Coder Social home page Coder Social logo

webmoney's Introduction

About Webmoney library

This library should help to make requests to WebMoney Transfer http://www.wmtransfer.com XML-interfaces: http://www.wmtransfer.com/eng/developers/interfaces/index.shtml

Gem have built-in native wmsigner.

Compatible with ruby: 1.8.7, 1.9.2 Reqirements: Nokogiri >= 1.4.1 built with libxml2 >= 2.7 (IMPORTANT!)

Author:: Alexander Oryol (mailto:[email protected]) License:: MIT License

Request types

Completed:

  • create_invoice - x1
  • create_transaction - x2
  • outgoing_invoices - x4
  • send_message - x6
  • find_wm - x8
  • balance - x9
  • get_passport - x11
  • i_trust - x15
  • trust_me - x15
  • check_user - x19
  • bussines_level
  • login

Incompleted (help need!):

  • operation_history - x3
  • finish_protect - x5
  • check_sign - x7
  • incoming_invoices - x10
  • reject_protection - x13
  • transaction_moneyback - x14
  • trust_save - x15
  • create_purse - x16
  • create_contract - x17
  • transaction_get - x18

Please, see relative documentation and parameters on wiki:

http://wiki.wmtransfer.com/wiki/list/XML-Interfaces

http://wiki.webmoney.ru/wiki/list/XML-%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D1%8B (in russian)

or official sites:

http://www.wmtransfer.com/eng/developers/interfaces/xml/index.shtml

http://www.webmoney.ru/rus/developers/interfaces/xml/index.shtml (in russian)

Examples

Setup

class MyWM
  include Webmoney
end
@wm = MyWM.new(:wmid => '123456789012', :password => 'my_pass', :key => 'gQABAIR6...2cC8FZTyKyjBM=')

wmid = '111222333444'

Light

The key convert instruction from P12 format to PEM see here

mywm = MyWM.new(:wmid => '123456789012',
  :cert => 'webmoney.pem', # ~/.wm/webmoney.pem
#  :cert => '/home/user/webmoney.pem',
  :key =>  'webmoney.key', # ~/.wm/webmoney.key
#  :key =>  '/home/user/webmoney.key',
  :password => 'pa$$w0rt')

or

cert = OpenSSL::X509::Certificate.new(File.read("webmoney.pem"))
key = OpenSSL::PKey::RSA.new(File.read("webmoney.key"), "password")
mywm = MyWM.new(:wmid => '123456789012', :cert => cert, :key => key)

Passport (X11)

Get attestat data:

passport = Webmoney::Passport.new(wmid, :mode => 1) # optionally :mode, :dict, :info
passport.attestat     # { # hash
                      #   :attestat => 110, # == FORMAL attestat, as example
                      #   :created_at => Wed Feb 25 21:54:01 +0300 2004 # Time object
                      #   :cid => "103453"
                      #   and etc.
                      # }
passport.wmids        # All wmids attached to the attestat
passport.userinfo[:country]          # => 'Russia' # Userinfo fields in string context
passport.userinfo[:country].checked  # => true     # with checked/locked attribute
passport.directory    # Base dictionary

Bussines level

bl = @wm.request(:bussines_level, :wmid => wmid)       #  => 15

Sending message

... for one message:

@wm.request(:send_message, :wmid => wmid, :subj => 'Subject', :text => 'Body of \<b>message\</b>')

... for many messages (with queue):

@wm.send_message(:wmid => wmid, :subj => 'Subject', :text => 'Body of \<b>message\</b>') do |msg, result|
  File.open("logfile", "w") do |file|
    case result
    when Hash
      file.puts "Message #{msg.inspect} sended in:#{result[:date]} with id:#{result[:id]}"
    else
      file.puts "Error sent message #{msg.inspect}: #{result.message}"
    end
  end
end

Purses and WMIDs

@wm.wmid_exist?('123456789012')                   # => true

purse = Purse.new('Z123456789012')
purse.wmid                                        # => '123456789012'
purse.belong_to?('123456789012')                  # => true

Example: Create invoice and check it's state

@wm = MyWM.new(:wmid => '123456789012', :password => 'my_pass', :key => 'gQABAIR6...2cC8FZTyKyjBM=')

Create invoice

@invoice = @wm.request(:create_invoice,
  :orderid => 5,
  :amount => 10,
  :customerwmid => CUSTOMER_WMID,
  :storepurse => STORE_PURSE,
  :desc => "Test invoice",
  :address => "Delivery Address"
)

Check state

res = @wm.request(:outgoing_invoices,
  :purse => STORE_PURSE,
  :wminvid => @invoice[:id],
  :orderid => @invoice[:orderid],
  :customerwmid => CUSTOMER_WMID,
  :datestart => @invoice[:created_at],
  :datefinish => @invoice[:created_at]
)
if res[:retval].should == 0 && !res[:invoices].empty?
  invoice = res[:invoices].first
  case invoice[:state]
    when 0 then # Not Paid
    when 1 then # Paid with protection
    when 2 then # Payment complete
    when 3 then # Rejected
  end
end

Check purse owner

res = @wm.request(:check_user,
  :operation => {
    :type => 2,
    :amount => 100,
    :pursetype => "WMZ"
  },
  :userinfo => {
    :wmid => "123445532523",
    :iname => "Alexander",
    :fname => "Ivanov"
  }
)

Also, see spec/* for examples.

webmoney's People

Contributors

eagleas avatar dilshod avatar divineforest avatar harmaty avatar skyeagle avatar admsev avatar c0nstantin avatar phuongnd08 avatar postmaster027 avatar grindars avatar mehonoshin avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.