dilshod / webmoney

Interface library for WebMoney Transfer payment system. Gem.

Home Page:http://www.wmtransfer.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

== 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:eagle.alex@gmail.com)
License::   MIT License

== Request types

Completed:
- send_message       - x6
- get_passport       - x11
- find_wm            - x8
- bussines_level

Incompleted (help need!):
- create_invoice     - x1
- create_transaction - x2
- operation_history  - x3
- outgoing_invoices  - x4
- finish_protect     - x5
- check_sign         - x7
- balance            - x9
- incoming_invoices  - x10
- reject_protection  - x13
- transaction_moneyback - x14
- i_trust               - x15
- trust_me              - x15
- 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

cert = OpenSSL::X509::Certificate.new(File.read("webmoney.cert"))
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)
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


Also, see spec/* for examples.

About

Interface library for WebMoney Transfer payment system. Gem.

http://www.wmtransfer.com


Languages

Language:C++ 52.0%Language:Ruby 38.2%Language:C 9.8%