yetanothernguyen-activemerchant 1.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) hide show
  1. data/CHANGELOG +711 -0
  2. data/CONTRIBUTORS +245 -0
  3. data/MIT-LICENSE +20 -0
  4. data/gem-public_cert.pem +20 -0
  5. data/lib/active_merchant.rb +52 -0
  6. data/lib/active_merchant/billing.rb +9 -0
  7. data/lib/active_merchant/billing/avs_result.rb +98 -0
  8. data/lib/active_merchant/billing/base.rb +57 -0
  9. data/lib/active_merchant/billing/check.rb +68 -0
  10. data/lib/active_merchant/billing/credit_card.rb +178 -0
  11. data/lib/active_merchant/billing/credit_card_formatting.rb +21 -0
  12. data/lib/active_merchant/billing/credit_card_methods.rb +125 -0
  13. data/lib/active_merchant/billing/cvv_result.rb +38 -0
  14. data/lib/active_merchant/billing/expiry_date.rb +34 -0
  15. data/lib/active_merchant/billing/gateway.rb +170 -0
  16. data/lib/active_merchant/billing/gateways.rb +18 -0
  17. data/lib/active_merchant/billing/gateways/authorize_net.rb +672 -0
  18. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +858 -0
  19. data/lib/active_merchant/billing/gateways/barclays_epdq.rb +308 -0
  20. data/lib/active_merchant/billing/gateways/beanstream.rb +139 -0
  21. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +282 -0
  22. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +54 -0
  23. data/lib/active_merchant/billing/gateways/blue_pay.rb +11 -0
  24. data/lib/active_merchant/billing/gateways/bogus.rb +142 -0
  25. data/lib/active_merchant/billing/gateways/braintree.rb +17 -0
  26. data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +9 -0
  27. data/lib/active_merchant/billing/gateways/braintree_blue.rb +303 -0
  28. data/lib/active_merchant/billing/gateways/braintree_orange.rb +17 -0
  29. data/lib/active_merchant/billing/gateways/card_stream.rb +230 -0
  30. data/lib/active_merchant/billing/gateways/cyber_source.rb +430 -0
  31. data/lib/active_merchant/billing/gateways/data_cash.rb +597 -0
  32. data/lib/active_merchant/billing/gateways/efsnet.rb +235 -0
  33. data/lib/active_merchant/billing/gateways/elavon.rb +134 -0
  34. data/lib/active_merchant/billing/gateways/epay.rb +268 -0
  35. data/lib/active_merchant/billing/gateways/eway.rb +277 -0
  36. data/lib/active_merchant/billing/gateways/eway_managed.rb +231 -0
  37. data/lib/active_merchant/billing/gateways/exact.rb +222 -0
  38. data/lib/active_merchant/billing/gateways/federated_canada.rb +168 -0
  39. data/lib/active_merchant/billing/gateways/first_pay.rb +177 -0
  40. data/lib/active_merchant/billing/gateways/garanti.rb +262 -0
  41. data/lib/active_merchant/billing/gateways/ideal/ideal_base.rb +250 -0
  42. data/lib/active_merchant/billing/gateways/ideal/ideal_rabobank.pem +13 -0
  43. data/lib/active_merchant/billing/gateways/ideal/ideal_response.rb +29 -0
  44. data/lib/active_merchant/billing/gateways/ideal_rabobank.rb +55 -0
  45. data/lib/active_merchant/billing/gateways/inspire.rb +221 -0
  46. data/lib/active_merchant/billing/gateways/instapay.rb +164 -0
  47. data/lib/active_merchant/billing/gateways/iridium.rb +258 -0
  48. data/lib/active_merchant/billing/gateways/jetpay.rb +276 -0
  49. data/lib/active_merchant/billing/gateways/linkpoint.rb +454 -0
  50. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +156 -0
  51. data/lib/active_merchant/billing/gateways/merchant_ware.rb +289 -0
  52. data/lib/active_merchant/billing/gateways/modern_payments.rb +36 -0
  53. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +220 -0
  54. data/lib/active_merchant/billing/gateways/moneris.rb +209 -0
  55. data/lib/active_merchant/billing/gateways/net_registry.rb +189 -0
  56. data/lib/active_merchant/billing/gateways/netaxept.rb +239 -0
  57. data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
  58. data/lib/active_merchant/billing/gateways/nmi.rb +13 -0
  59. data/lib/active_merchant/billing/gateways/ogone.rb +292 -0
  60. data/lib/active_merchant/billing/gateways/orbital.rb +321 -0
  61. data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +46 -0
  62. data/lib/active_merchant/billing/gateways/pay_junction.rb +392 -0
  63. data/lib/active_merchant/billing/gateways/pay_secure.rb +120 -0
  64. data/lib/active_merchant/billing/gateways/paybox_direct.rb +207 -0
  65. data/lib/active_merchant/billing/gateways/payflow.rb +253 -0
  66. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +207 -0
  67. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +39 -0
  68. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
  69. data/lib/active_merchant/billing/gateways/payflow_express.rb +222 -0
  70. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +15 -0
  71. data/lib/active_merchant/billing/gateways/payflow_uk.rb +21 -0
  72. data/lib/active_merchant/billing/gateways/payment_express.rb +235 -0
  73. data/lib/active_merchant/billing/gateways/paypal.rb +121 -0
  74. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +351 -0
  75. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +49 -0
  76. data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
  77. data/lib/active_merchant/billing/gateways/paypal_express.rb +177 -0
  78. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +25 -0
  79. data/lib/active_merchant/billing/gateways/paystation.rb +201 -0
  80. data/lib/active_merchant/billing/gateways/plugnpay.rb +298 -0
  81. data/lib/active_merchant/billing/gateways/psigate.rb +219 -0
  82. data/lib/active_merchant/billing/gateways/psl_card.rb +304 -0
  83. data/lib/active_merchant/billing/gateways/qbms.rb +293 -0
  84. data/lib/active_merchant/billing/gateways/quantum.rb +282 -0
  85. data/lib/active_merchant/billing/gateways/quickpay.rb +223 -0
  86. data/lib/active_merchant/billing/gateways/realex.rb +311 -0
  87. data/lib/active_merchant/billing/gateways/sage.rb +146 -0
  88. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +88 -0
  89. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +116 -0
  90. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +97 -0
  91. data/lib/active_merchant/billing/gateways/sage_pay.rb +320 -0
  92. data/lib/active_merchant/billing/gateways/sallie_mae.rb +144 -0
  93. data/lib/active_merchant/billing/gateways/secure_net.rb +330 -0
  94. data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
  95. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +193 -0
  96. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
  97. data/lib/active_merchant/billing/gateways/skip_jack.rb +453 -0
  98. data/lib/active_merchant/billing/gateways/smart_ps.rb +271 -0
  99. data/lib/active_merchant/billing/gateways/stripe.rb +212 -0
  100. data/lib/active_merchant/billing/gateways/trans_first.rb +127 -0
  101. data/lib/active_merchant/billing/gateways/transax.rb +25 -0
  102. data/lib/active_merchant/billing/gateways/trust_commerce.rb +423 -0
  103. data/lib/active_merchant/billing/gateways/usa_epay.rb +194 -0
  104. data/lib/active_merchant/billing/gateways/verifi.rb +233 -0
  105. data/lib/active_merchant/billing/gateways/viaklix.rb +189 -0
  106. data/lib/active_merchant/billing/gateways/wirecard.rb +318 -0
  107. data/lib/active_merchant/billing/gateways/worldpay.rb +280 -0
  108. data/lib/active_merchant/billing/integrations.rb +17 -0
  109. data/lib/active_merchant/billing/integrations/action_view_helper.rb +70 -0
  110. data/lib/active_merchant/billing/integrations/bogus.rb +23 -0
  111. data/lib/active_merchant/billing/integrations/bogus/helper.rb +17 -0
  112. data/lib/active_merchant/billing/integrations/bogus/notification.rb +11 -0
  113. data/lib/active_merchant/billing/integrations/bogus/return.rb +10 -0
  114. data/lib/active_merchant/billing/integrations/chronopay.rb +23 -0
  115. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +120 -0
  116. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +158 -0
  117. data/lib/active_merchant/billing/integrations/chronopay/return.rb +10 -0
  118. data/lib/active_merchant/billing/integrations/direc_pay.rb +41 -0
  119. data/lib/active_merchant/billing/integrations/direc_pay/helper.rb +200 -0
  120. data/lib/active_merchant/billing/integrations/direc_pay/notification.rb +76 -0
  121. data/lib/active_merchant/billing/integrations/direc_pay/return.rb +32 -0
  122. data/lib/active_merchant/billing/integrations/direc_pay/status.rb +37 -0
  123. data/lib/active_merchant/billing/integrations/directebanking.rb +47 -0
  124. data/lib/active_merchant/billing/integrations/directebanking/helper.rb +90 -0
  125. data/lib/active_merchant/billing/integrations/directebanking/notification.rb +120 -0
  126. data/lib/active_merchant/billing/integrations/directebanking/return.rb +11 -0
  127. data/lib/active_merchant/billing/integrations/e_payment_plans.rb +48 -0
  128. data/lib/active_merchant/billing/integrations/e_payment_plans/helper.rb +34 -0
  129. data/lib/active_merchant/billing/integrations/e_payment_plans/notification.rb +84 -0
  130. data/lib/active_merchant/billing/integrations/gestpay.rb +25 -0
  131. data/lib/active_merchant/billing/integrations/gestpay/common.rb +42 -0
  132. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +70 -0
  133. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +85 -0
  134. data/lib/active_merchant/billing/integrations/gestpay/return.rb +10 -0
  135. data/lib/active_merchant/billing/integrations/helper.rb +96 -0
  136. data/lib/active_merchant/billing/integrations/hi_trust.rb +27 -0
  137. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +58 -0
  138. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +59 -0
  139. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +67 -0
  140. data/lib/active_merchant/billing/integrations/migs.rb +22 -0
  141. data/lib/active_merchant/billing/integrations/migs/helper.rb +64 -0
  142. data/lib/active_merchant/billing/integrations/migs/return.rb +54 -0
  143. data/lib/active_merchant/billing/integrations/moneybookers.rb +26 -0
  144. data/lib/active_merchant/billing/integrations/moneybookers/helper.rb +59 -0
  145. data/lib/active_merchant/billing/integrations/moneybookers/notification.rb +129 -0
  146. data/lib/active_merchant/billing/integrations/nochex.rb +88 -0
  147. data/lib/active_merchant/billing/integrations/nochex/helper.rb +68 -0
  148. data/lib/active_merchant/billing/integrations/nochex/notification.rb +94 -0
  149. data/lib/active_merchant/billing/integrations/nochex/return.rb +10 -0
  150. data/lib/active_merchant/billing/integrations/notification.rb +62 -0
  151. data/lib/active_merchant/billing/integrations/paypal.rb +39 -0
  152. data/lib/active_merchant/billing/integrations/paypal/helper.rb +119 -0
  153. data/lib/active_merchant/billing/integrations/paypal/notification.rb +154 -0
  154. data/lib/active_merchant/billing/integrations/paypal/return.rb +10 -0
  155. data/lib/active_merchant/billing/integrations/quickpay.rb +21 -0
  156. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +72 -0
  157. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +74 -0
  158. data/lib/active_merchant/billing/integrations/return.rb +42 -0
  159. data/lib/active_merchant/billing/integrations/sage_pay_form.rb +37 -0
  160. data/lib/active_merchant/billing/integrations/sage_pay_form/encryption.rb +33 -0
  161. data/lib/active_merchant/billing/integrations/sage_pay_form/helper.rb +111 -0
  162. data/lib/active_merchant/billing/integrations/sage_pay_form/notification.rb +210 -0
  163. data/lib/active_merchant/billing/integrations/sage_pay_form/return.rb +31 -0
  164. data/lib/active_merchant/billing/integrations/two_checkout.rb +23 -0
  165. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +59 -0
  166. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +114 -0
  167. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +17 -0
  168. data/lib/active_merchant/billing/integrations/valitor.rb +33 -0
  169. data/lib/active_merchant/billing/integrations/valitor/helper.rb +86 -0
  170. data/lib/active_merchant/billing/integrations/valitor/notification.rb +13 -0
  171. data/lib/active_merchant/billing/integrations/valitor/response_fields.rb +97 -0
  172. data/lib/active_merchant/billing/integrations/valitor/return.rb +13 -0
  173. data/lib/active_merchant/billing/integrations/world_pay.rb +27 -0
  174. data/lib/active_merchant/billing/integrations/world_pay/helper.rb +100 -0
  175. data/lib/active_merchant/billing/integrations/world_pay/notification.rb +160 -0
  176. data/lib/active_merchant/billing/response.rb +32 -0
  177. data/lib/active_merchant/common.rb +14 -0
  178. data/lib/active_merchant/common/connection.rb +177 -0
  179. data/lib/active_merchant/common/country.rb +328 -0
  180. data/lib/active_merchant/common/error.rb +26 -0
  181. data/lib/active_merchant/common/post_data.rb +24 -0
  182. data/lib/active_merchant/common/posts_data.rb +63 -0
  183. data/lib/active_merchant/common/requires_parameters.rb +16 -0
  184. data/lib/active_merchant/common/utils.rb +22 -0
  185. data/lib/active_merchant/common/validateable.rb +81 -0
  186. data/lib/active_merchant/railtie.rb +9 -0
  187. data/lib/active_merchant/version.rb +3 -0
  188. data/lib/activemerchant.rb +1 -0
  189. data/lib/certs/cacert.pem +7815 -0
  190. data/lib/support/gateway_support.rb +58 -0
  191. data/lib/support/outbound_hosts.rb +25 -0
  192. metadata +281 -0
@@ -0,0 +1,22 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Migs
5
+
6
+ autoload :Return, 'active_merchant/billing/integrations/migs/return.rb'
7
+ autoload :Helper, 'active_merchant/billing/integrations/migs/helper.rb'
8
+
9
+ mattr_accessor :service_url
10
+ self.service_url = 'https://migs.mastercard.com.au/vpcpay'
11
+
12
+ def self.notification(post)
13
+ Notification.new(post)
14
+ end
15
+
16
+ def self.return(post, options = {})
17
+ Return.new(post, options)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,64 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Migs
5
+ class Helper < ActiveMerchant::Billing::Integrations::Helper
6
+ # Replace with the real mapping
7
+ mapping :account, 'email'
8
+ mapping :access_code, 'vpc_AccessCode'
9
+ mapping :amount, 'vpc_Amount'
10
+ mapping :command, 'vpc_Command'
11
+ mapping :locale, 'vpc_Locale'
12
+ mapping :reference_id, 'vpc_MerchTxnRef'
13
+ mapping :merchant, 'vpc_Merchant'
14
+ mapping :order, 'vpc_OrderInfo'
15
+ mapping :return_url, 'vpc_ReturnURL'
16
+ mapping :version, 'vpc_Version'
17
+ mapping :secure_hash, 'vpc_SecureHash'
18
+
19
+ VERSION = '1'
20
+ COMMAND = 'pay'
21
+ LOCALE = 'en'
22
+
23
+ def initialize(order, account, options = {})
24
+ super
25
+
26
+ add_field mappings[:version], VERSION
27
+ add_field mappings[:command], COMMAND
28
+ add_field mappings[:locale], LOCALE
29
+
30
+ @secret_code = options[:credential2]
31
+ add_field mappings[:merchant], options[:credential3]
32
+ add_field mappings[:access_code], options[:credential4]
33
+ end
34
+
35
+ # Convert to cents
36
+ def amount=(money)
37
+ amount = money.to_f
38
+ if amount <= 0
39
+ raise ArgumentError, 'amount must be positive'
40
+ end
41
+
42
+ amount = (amount * 100).to_i
43
+ add_field mappings[:amount], amount
44
+ end
45
+
46
+ def form_fields
47
+ @fields.merge(mappings[:secure_hash] => signature)
48
+ end
49
+
50
+ def signature
51
+ self.class.sign(@secret_code, @fields)
52
+ end
53
+
54
+ def self.sign(prefix, params)
55
+ hash_input = prefix
56
+ params.reject { |k,v| k == mappings[:secure_hash] }.sort.each { |p| hash_input += p.last }
57
+
58
+ return Digest::MD5.hexdigest(hash_input).upcase
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,54 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Migs
5
+ class Return < ActiveMerchant::Billing::Integrations::Return
6
+ def success?
7
+ acknowledge && params['vpc_TxnResponseCode'] == '0'
8
+ end
9
+
10
+ def item_id
11
+ params['vpc_MerchTxnRef']
12
+ end
13
+
14
+ def transaction_no
15
+ params['vpc_TransactionNo']
16
+ end
17
+
18
+ def authorize_id
19
+ params['vpc_AuthorizeId']
20
+ end
21
+
22
+ def receipt_no
23
+ params['vpc_ReceiptNo']
24
+ end
25
+
26
+ def payer_card
27
+ params['vpc_Card']
28
+ end
29
+
30
+ def order
31
+ params['vpc_OrderInfo']
32
+ end
33
+
34
+ def message
35
+ params['vpc_Message']
36
+ end
37
+
38
+ def response_code
39
+ params['vpc_TxnResponseCode']
40
+ end
41
+
42
+ def acknowledge
43
+ signature == params['vpc_SecureHash']
44
+ end
45
+
46
+ def signature
47
+ unescape_params = params.map
48
+ Helper::sign(@options[:credential2], params)
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,26 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Moneybookers
5
+
6
+ autoload :Notification, File.dirname(__FILE__) + '/moneybookers/notification.rb'
7
+ autoload :Helper, File.dirname(__FILE__) + '/moneybookers/helper.rb'
8
+
9
+ mattr_accessor :production_url
10
+ self.production_url = 'https://www.moneybookers.com/app/payment.pl'
11
+
12
+ def self.service_url
13
+ self.production_url
14
+ end
15
+
16
+ def self.notification(post, options)
17
+ Notification.new(post, options)
18
+ end
19
+
20
+ def self.return(post, options = {})
21
+ Return.new(post, options)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,59 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Moneybookers
5
+ class Helper < ActiveMerchant::Billing::Integrations::Helper
6
+ mapping :account, 'pay_to_email'
7
+ mapping :order, 'transaction_id'
8
+ mapping :amount, 'amount'
9
+ mapping :currency, 'currency'
10
+
11
+ mapping :customer,
12
+ :first_name => 'firstname',
13
+ :last_name => 'lastname',
14
+ :email => 'pay_from_email',
15
+ :phone => 'phone_number'
16
+
17
+ mapping :billing_address,
18
+ :city => 'city',
19
+ :address1 => 'address',
20
+ :address2 => 'address2',
21
+ :state => 'state',
22
+ :zip => 'postal_code',
23
+ :country => 'country'
24
+
25
+ mapping :notify_url, 'status_url'
26
+ mapping :return_url, 'return_url'
27
+ mapping :cancel_return_url, 'cancel_url'
28
+ mapping :description, 'detail1_text'
29
+
30
+ def initialize(order, account, options = {})
31
+ super
32
+ add_tracking_token
33
+ add_default_parameters
34
+ add_seller_details(options)
35
+ end
36
+
37
+
38
+ private
39
+
40
+ def add_tracking_token
41
+ return if application_id.blank? || application_id == 'ActiveMerchant'
42
+
43
+ add_field('merchant_fields', 'platform')
44
+ add_field('platform', application_id)
45
+ end
46
+
47
+ def add_default_parameters
48
+ add_field('hide_login', 1)
49
+ end
50
+
51
+ def add_seller_details(options)
52
+ add_field('recipient_description', options[:account_name]) if options[:account_name]
53
+ add_field('country', lookup_country_code(options[:country], :alpha3)) if options[:country]
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,129 @@
1
+ require 'net/http'
2
+ require 'digest/md5'
3
+
4
+ module ActiveMerchant #:nodoc:
5
+ module Billing #:nodoc:
6
+ module Integrations #:nodoc:
7
+ module Moneybookers
8
+ class Notification < ActiveMerchant::Billing::Integrations::Notification
9
+
10
+ def initialize(data, options)
11
+ if options[:credential2].nil?
12
+ raise ArgumentError, "You need to provide the md5 secret as the option :credential2 to verify that the notification originated from Moneybookers"
13
+ end
14
+ super
15
+ end
16
+
17
+ def complete?
18
+ status == 'Completed'
19
+ end
20
+
21
+ # ‘2’ Processed – This status is sent when the transaction is processed and the funds have been received on your Moneybookers account.
22
+ # ‘0’ Pending – This status is sent when the customers pays via the pending bank transfer option. Such transactions will auto-process IF the bank transfer is received by Moneybookers. We strongly recommend that you do NOT process the order/transaction in your system upon receipt of a pending status from Moneybookers.
23
+ # ‘-1’ Cancelled – Pending transactions can either be cancelled manually by the sender in their online account history or they will auto-cancel after 14 days if still pending.
24
+ # ‘-2’ Failed – This status is sent when the customer tries to pay via Credit Card or Direct Debit but our provider declines the transaction. If you do not accept Credit Card or Direct Debit payments via Moneybookers (see page 17) then you will never receive the failed status.
25
+ # ‘-3’ Chargeback – This status could be received only if your account is configured to receive chargebacks. If this is the case, whenever a chargeback is received by Moneybookers, a -3 status will be posted on the status_url for the reversed transaction.
26
+ def status
27
+ case status_code
28
+ when '2'
29
+ 'Completed'
30
+ when '0'
31
+ 'Pending'
32
+ when '-1'
33
+ 'Cancelled'
34
+ when '-2'
35
+ 'Failed'
36
+ when '-3'
37
+ 'Reversed'
38
+ else
39
+ 'Error'
40
+ end
41
+ end
42
+
43
+ def status_code
44
+ params['status']
45
+ end
46
+
47
+ def item_id
48
+ params['transaction_id']
49
+ end
50
+
51
+ def transaction_id
52
+ params['mb_transaction_id']
53
+ end
54
+
55
+ # When was this payment received by the client.
56
+ def received_at
57
+ nil
58
+ end
59
+
60
+ def payer_email
61
+ params['pay_from_email']
62
+ end
63
+
64
+ def receiver_email
65
+ params['pay_to_email']
66
+ end
67
+
68
+ def md5sig
69
+ params['md5sig']
70
+ end
71
+
72
+ #Unique ID from the merchant's Moneybookers.com account, needed for calculatinon of md5 sig
73
+ def merchant_id
74
+ params['merchant_id']
75
+ end
76
+
77
+ # currency of the payment as posted by the merchant on the entry form
78
+ def currency
79
+ params['currency']
80
+ end
81
+
82
+ # amount of the payment as posted by the merchant on the entry form (ex. 39.60/39.6/39)
83
+ def gross
84
+ params['amount']
85
+ end
86
+
87
+ # currency of mb_amount, will always be the same as the currency of the beneficiary's account at Moneybookers.com
88
+ def merchant_currency
89
+ params['mb_currency']
90
+ end
91
+
92
+ # total amount of the payment in Merchants currency (ex 25.46/25.4/25)
93
+ def merchant_amount
94
+ params['mb_amount']
95
+ end
96
+
97
+ # Was this a test transaction?
98
+ def test?
99
+ false
100
+ end
101
+
102
+ def secret
103
+ @options[:credential2]
104
+ end
105
+
106
+ # Acknowledge the transaction to MoneyBooker. This method has to be called after a new
107
+ # apc arrives. It will verify that all the information we received is correct and will return a
108
+ # ok or a fail. The secret (second credential) has to be provided in the parameter :credential2
109
+ # when instantiating the Notification object.
110
+ #
111
+ # Example:
112
+ #
113
+ # def ipn
114
+ # notify = Moneybookers.notification(request.raw_post, :credential2 => 'secret')
115
+ #
116
+ # if notify.acknowledge
117
+ # ... process order ... if notify.complete?
118
+ # else
119
+ # ... log possible hacking attempt ...
120
+ # end
121
+ def acknowledge
122
+ fields = [merchant_id, item_id, Digest::MD5.hexdigest(secret).upcase, merchant_amount, merchant_currency, status_code].join
123
+ md5sig == Digest::MD5.hexdigest(fields).upcase
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,88 @@
1
+
2
+ module ActiveMerchant #:nodoc:
3
+ module Billing #:nodoc:
4
+ module Integrations #:nodoc:
5
+ # To start with Nochex, follow the instructions for installing
6
+ # ActiveMerchant as a plugin, as described on
7
+ # http://www.activemerchant.org/.
8
+ #
9
+ # The plugin will automatically add the ActionView helper for
10
+ # ActiveMerchant, which will allow you to make the Nochex payments.
11
+ # The idea behind the helper is that it generates an invisible
12
+ # forwarding screen that will automatically redirect the user.
13
+ # So you would collect all the information about the order and then
14
+ # simply render the hidden form, which redirects the user to Nochex.
15
+ #
16
+ # The syntax of the helper is as follows:
17
+ #
18
+ # <% payment_service_for 'order id', 'nochex_user_id',
19
+ # :amount => 50.00,
20
+ # :service => :nochex,
21
+ # :html => { :id => 'nochex-form' } do |service| %>
22
+ #
23
+ # <% service.customer :first_name => 'Cody',
24
+ # :last_name => 'Fauser',
25
+ # :phone => '(555)555-5555',
26
+ # :email => 'cody@example.com' %>
27
+ #
28
+ # <% service.billing_address :city => 'Ottawa',
29
+ # :address1 => '21 Snowy Brook Lane',
30
+ # :address2 => 'Apt. 36',
31
+ # :state => 'ON',
32
+ # :country => 'CA',
33
+ # :zip => 'K1J1E5' %>
34
+ #
35
+ # <% service.invoice '#1000' %>
36
+ # <% service.shipping '0.00' %>
37
+ # <% service.tax '0.00' %>
38
+ #
39
+ # <% service.notify_url url_for(:action => 'notify', :only_path => false) %>
40
+ # <% service.return_url url_for(:action => 'done', :only_path => false) %>
41
+ # <% service.cancel_return_url 'http://mystore.com' %>
42
+ # <% end %>
43
+ #
44
+ # The notify_url is the URL that the Nochex IPN will be sent. You can
45
+ # handle the notification in your controller action as follows:
46
+ #
47
+ # class NotificationController < ApplicationController
48
+ # include ActiveMerchant::Billing::Integrations
49
+ #
50
+ # def notify
51
+ # notification = Nochex::Notification.new(request.raw_post)
52
+ #
53
+ # begin
54
+ # # Acknowledge notification with Nochex
55
+ # raise StandardError, 'Illegal Notification' unless notification.acknowledge
56
+ # # Process the payment
57
+ # rescue => e
58
+ # logger.warn("Illegal notification received: #{e.message}")
59
+ # ensure
60
+ # head(:ok)
61
+ # end
62
+ # end
63
+ # end
64
+ module Nochex
65
+ autoload :Return, File.dirname(__FILE__) + '/nochex/return.rb'
66
+ autoload :Helper, File.dirname(__FILE__) + '/nochex/helper.rb'
67
+ autoload :Notification, File.dirname(__FILE__) + '/nochex/notification.rb'
68
+
69
+
70
+ mattr_accessor :service_url
71
+ self.service_url = 'https://www.nochex.com/nochex.dll/checkout'
72
+
73
+ mattr_accessor :notification_confirmation_url
74
+ self.notification_confirmation_url = 'https://www.nochex.com/nochex.dll/apc/apc'
75
+
76
+ # Simply a convenience method that returns a new
77
+ # ActiveMerchant::Billing::Integrations::Nochex::Notification
78
+ def self.notification(post, options = {})
79
+ Notification.new(post)
80
+ end
81
+
82
+ def self.return(query_string, options = {})
83
+ Return.new(query_string)
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end