activemerchant-kiddy 1.15.0.kiddy

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. data/CHANGELOG +688 -0
  2. data/CONTRIBUTORS +233 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.rdoc +164 -0
  5. data/gem-public_cert.pem +20 -0
  6. data/lib/active_merchant/billing/avs_result.rb +98 -0
  7. data/lib/active_merchant/billing/base.rb +57 -0
  8. data/lib/active_merchant/billing/check.rb +68 -0
  9. data/lib/active_merchant/billing/credit_card.rb +172 -0
  10. data/lib/active_merchant/billing/credit_card_formatting.rb +21 -0
  11. data/lib/active_merchant/billing/credit_card_methods.rb +125 -0
  12. data/lib/active_merchant/billing/cvv_result.rb +38 -0
  13. data/lib/active_merchant/billing/expiry_date.rb +34 -0
  14. data/lib/active_merchant/billing/gateway.rb +170 -0
  15. data/lib/active_merchant/billing/gateways/authorize_net.rb +671 -0
  16. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +858 -0
  17. data/lib/active_merchant/billing/gateways/barclays_epdq.rb +309 -0
  18. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +282 -0
  19. data/lib/active_merchant/billing/gateways/beanstream.rb +139 -0
  20. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +54 -0
  21. data/lib/active_merchant/billing/gateways/blue_pay.rb +11 -0
  22. data/lib/active_merchant/billing/gateways/bogus.rb +132 -0
  23. data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +9 -0
  24. data/lib/active_merchant/billing/gateways/braintree.rb +17 -0
  25. data/lib/active_merchant/billing/gateways/braintree_blue.rb +293 -0
  26. data/lib/active_merchant/billing/gateways/braintree_orange.rb +17 -0
  27. data/lib/active_merchant/billing/gateways/card_stream.rb +230 -0
  28. data/lib/active_merchant/billing/gateways/cyber_source.rb +410 -0
  29. data/lib/active_merchant/billing/gateways/data_cash.rb +597 -0
  30. data/lib/active_merchant/billing/gateways/efsnet.rb +235 -0
  31. data/lib/active_merchant/billing/gateways/elavon.rb +134 -0
  32. data/lib/active_merchant/billing/gateways/epay.rb +268 -0
  33. data/lib/active_merchant/billing/gateways/eway.rb +277 -0
  34. data/lib/active_merchant/billing/gateways/eway_managed.rb +231 -0
  35. data/lib/active_merchant/billing/gateways/exact.rb +222 -0
  36. data/lib/active_merchant/billing/gateways/federated_canada.rb +168 -0
  37. data/lib/active_merchant/billing/gateways/first_pay.rb +177 -0
  38. data/lib/active_merchant/billing/gateways/garanti.rb +262 -0
  39. data/lib/active_merchant/billing/gateways/ideal/ideal_base.rb +250 -0
  40. data/lib/active_merchant/billing/gateways/ideal/ideal_rabobank.pem +13 -0
  41. data/lib/active_merchant/billing/gateways/ideal/ideal_response.rb +29 -0
  42. data/lib/active_merchant/billing/gateways/ideal_rabobank.rb +55 -0
  43. data/lib/active_merchant/billing/gateways/inspire.rb +221 -0
  44. data/lib/active_merchant/billing/gateways/instapay.rb +164 -0
  45. data/lib/active_merchant/billing/gateways/iridium.rb +258 -0
  46. data/lib/active_merchant/billing/gateways/jetpay.rb +276 -0
  47. data/lib/active_merchant/billing/gateways/linkpoint.rb +454 -0
  48. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +156 -0
  49. data/lib/active_merchant/billing/gateways/merchant_ware.rb +289 -0
  50. data/lib/active_merchant/billing/gateways/modern_payments.rb +36 -0
  51. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +220 -0
  52. data/lib/active_merchant/billing/gateways/moneris.rb +209 -0
  53. data/lib/active_merchant/billing/gateways/net_registry.rb +189 -0
  54. data/lib/active_merchant/billing/gateways/netaxept.rb +239 -0
  55. data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
  56. data/lib/active_merchant/billing/gateways/nmi.rb +13 -0
  57. data/lib/active_merchant/billing/gateways/ogone.rb +292 -0
  58. data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +46 -0
  59. data/lib/active_merchant/billing/gateways/orbital.rb +317 -0
  60. data/lib/active_merchant/billing/gateways/pay_junction.rb +392 -0
  61. data/lib/active_merchant/billing/gateways/pay_secure.rb +120 -0
  62. data/lib/active_merchant/billing/gateways/paybox_direct.rb +207 -0
  63. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +207 -0
  64. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +39 -0
  65. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
  66. data/lib/active_merchant/billing/gateways/payflow.rb +253 -0
  67. data/lib/active_merchant/billing/gateways/payflow_express.rb +222 -0
  68. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +15 -0
  69. data/lib/active_merchant/billing/gateways/payflow_uk.rb +21 -0
  70. data/lib/active_merchant/billing/gateways/payment_express.rb +235 -0
  71. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +351 -0
  72. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +49 -0
  73. data/lib/active_merchant/billing/gateways/paypal.rb +121 -0
  74. data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
  75. data/lib/active_merchant/billing/gateways/paypal_express.rb +177 -0
  76. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +25 -0
  77. data/lib/active_merchant/billing/gateways/plugnpay.rb +298 -0
  78. data/lib/active_merchant/billing/gateways/psigate.rb +219 -0
  79. data/lib/active_merchant/billing/gateways/psl_card.rb +304 -0
  80. data/lib/active_merchant/billing/gateways/qbms.rb +295 -0
  81. data/lib/active_merchant/billing/gateways/quantum.rb +282 -0
  82. data/lib/active_merchant/billing/gateways/quickpay.rb +218 -0
  83. data/lib/active_merchant/billing/gateways/realex.rb +311 -0
  84. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +88 -0
  85. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +116 -0
  86. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +97 -0
  87. data/lib/active_merchant/billing/gateways/sage.rb +146 -0
  88. data/lib/active_merchant/billing/gateways/sage_pay.rb +320 -0
  89. data/lib/active_merchant/billing/gateways/sallie_mae.rb +144 -0
  90. data/lib/active_merchant/billing/gateways/secure_net.rb +330 -0
  91. data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
  92. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +193 -0
  93. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
  94. data/lib/active_merchant/billing/gateways/skip_jack.rb +453 -0
  95. data/lib/active_merchant/billing/gateways/smart_ps.rb +271 -0
  96. data/lib/active_merchant/billing/gateways/trans_first.rb +127 -0
  97. data/lib/active_merchant/billing/gateways/transax.rb +25 -0
  98. data/lib/active_merchant/billing/gateways/trust_commerce.rb +423 -0
  99. data/lib/active_merchant/billing/gateways/usa_epay.rb +194 -0
  100. data/lib/active_merchant/billing/gateways/verifi.rb +233 -0
  101. data/lib/active_merchant/billing/gateways/viaklix.rb +189 -0
  102. data/lib/active_merchant/billing/gateways/wirecard.rb +318 -0
  103. data/lib/active_merchant/billing/gateways/worldpay.rb +280 -0
  104. data/lib/active_merchant/billing/gateways.rb +18 -0
  105. data/lib/active_merchant/billing/integrations/action_view_helper.rb +68 -0
  106. data/lib/active_merchant/billing/integrations/bogus/helper.rb +17 -0
  107. data/lib/active_merchant/billing/integrations/bogus/notification.rb +11 -0
  108. data/lib/active_merchant/billing/integrations/bogus/return.rb +10 -0
  109. data/lib/active_merchant/billing/integrations/bogus.rb +23 -0
  110. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +120 -0
  111. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +158 -0
  112. data/lib/active_merchant/billing/integrations/chronopay/return.rb +10 -0
  113. data/lib/active_merchant/billing/integrations/chronopay.rb +23 -0
  114. data/lib/active_merchant/billing/integrations/direc_pay/helper.rb +200 -0
  115. data/lib/active_merchant/billing/integrations/direc_pay/notification.rb +76 -0
  116. data/lib/active_merchant/billing/integrations/direc_pay/return.rb +32 -0
  117. data/lib/active_merchant/billing/integrations/direc_pay/status.rb +37 -0
  118. data/lib/active_merchant/billing/integrations/direc_pay.rb +41 -0
  119. data/lib/active_merchant/billing/integrations/directebanking/helper.rb +90 -0
  120. data/lib/active_merchant/billing/integrations/directebanking/notification.rb +120 -0
  121. data/lib/active_merchant/billing/integrations/directebanking/return.rb +11 -0
  122. data/lib/active_merchant/billing/integrations/directebanking.rb +47 -0
  123. data/lib/active_merchant/billing/integrations/gestpay/common.rb +42 -0
  124. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +70 -0
  125. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +85 -0
  126. data/lib/active_merchant/billing/integrations/gestpay/return.rb +10 -0
  127. data/lib/active_merchant/billing/integrations/gestpay.rb +25 -0
  128. data/lib/active_merchant/billing/integrations/helper.rb +96 -0
  129. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +58 -0
  130. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +59 -0
  131. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +67 -0
  132. data/lib/active_merchant/billing/integrations/hi_trust.rb +27 -0
  133. data/lib/active_merchant/billing/integrations/moneybookers/helper.rb +48 -0
  134. data/lib/active_merchant/billing/integrations/moneybookers/notification.rb +129 -0
  135. data/lib/active_merchant/billing/integrations/moneybookers.rb +26 -0
  136. data/lib/active_merchant/billing/integrations/nochex/helper.rb +68 -0
  137. data/lib/active_merchant/billing/integrations/nochex/notification.rb +94 -0
  138. data/lib/active_merchant/billing/integrations/nochex/return.rb +10 -0
  139. data/lib/active_merchant/billing/integrations/nochex.rb +88 -0
  140. data/lib/active_merchant/billing/integrations/notification.rb +62 -0
  141. data/lib/active_merchant/billing/integrations/paypal/helper.rb +119 -0
  142. data/lib/active_merchant/billing/integrations/paypal/notification.rb +154 -0
  143. data/lib/active_merchant/billing/integrations/paypal/return.rb +10 -0
  144. data/lib/active_merchant/billing/integrations/paypal.rb +39 -0
  145. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +72 -0
  146. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +74 -0
  147. data/lib/active_merchant/billing/integrations/quickpay.rb +21 -0
  148. data/lib/active_merchant/billing/integrations/return.rb +42 -0
  149. data/lib/active_merchant/billing/integrations/sage_pay_form/encryption.rb +33 -0
  150. data/lib/active_merchant/billing/integrations/sage_pay_form/helper.rb +111 -0
  151. data/lib/active_merchant/billing/integrations/sage_pay_form/notification.rb +210 -0
  152. data/lib/active_merchant/billing/integrations/sage_pay_form/return.rb +31 -0
  153. data/lib/active_merchant/billing/integrations/sage_pay_form.rb +37 -0
  154. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +59 -0
  155. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +114 -0
  156. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +17 -0
  157. data/lib/active_merchant/billing/integrations/two_checkout.rb +23 -0
  158. data/lib/active_merchant/billing/integrations/valitor/helper.rb +86 -0
  159. data/lib/active_merchant/billing/integrations/valitor/notification.rb +13 -0
  160. data/lib/active_merchant/billing/integrations/valitor/response_fields.rb +88 -0
  161. data/lib/active_merchant/billing/integrations/valitor/return.rb +13 -0
  162. data/lib/active_merchant/billing/integrations/valitor.rb +33 -0
  163. data/lib/active_merchant/billing/integrations/world_pay/helper.rb +100 -0
  164. data/lib/active_merchant/billing/integrations/world_pay/notification.rb +160 -0
  165. data/lib/active_merchant/billing/integrations/world_pay.rb +38 -0
  166. data/lib/active_merchant/billing/integrations.rb +17 -0
  167. data/lib/active_merchant/billing/response.rb +32 -0
  168. data/lib/active_merchant/billing.rb +9 -0
  169. data/lib/active_merchant/common/connection.rb +177 -0
  170. data/lib/active_merchant/common/country.rb +328 -0
  171. data/lib/active_merchant/common/error.rb +26 -0
  172. data/lib/active_merchant/common/post_data.rb +24 -0
  173. data/lib/active_merchant/common/posts_data.rb +63 -0
  174. data/lib/active_merchant/common/requires_parameters.rb +16 -0
  175. data/lib/active_merchant/common/utils.rb +22 -0
  176. data/lib/active_merchant/common/validateable.rb +81 -0
  177. data/lib/active_merchant/common.rb +14 -0
  178. data/lib/active_merchant/version.rb +3 -0
  179. data/lib/active_merchant.rb +50 -0
  180. data/lib/activemerchant.rb +1 -0
  181. data/lib/certs/cacert.pem +7815 -0
  182. data/lib/support/gateway_support.rb +58 -0
  183. data/lib/support/outbound_hosts.rb +25 -0
  184. metadata +273 -0
@@ -0,0 +1,58 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module HiTrust
5
+ class Helper < ActiveMerchant::Billing::Integrations::Helper
6
+
7
+ # Transaction types
8
+ # * Auth
9
+ # * AuthRe
10
+ # * Capture
11
+ # * CaptureRe
12
+ # * Refund
13
+ # * RefundRe
14
+ # * Query
15
+ def initialize(order, account, options = {})
16
+ super
17
+ # Perform an authorization by default
18
+ add_field('Type', 'Auth')
19
+
20
+ # Capture the payment right away
21
+ add_field('depositflag', '1')
22
+
23
+ # Disable auto query - who knows what it does?
24
+ add_field('queryflag', '1')
25
+
26
+ add_field('orderdesc', 'Store purchase')
27
+ end
28
+
29
+ mapping :account, 'storeid'
30
+ mapping :amount, 'amount'
31
+
32
+ def amount=(money)
33
+ cents = money.respond_to?(:cents) ? money.cents : money
34
+
35
+ if money.is_a?(String) or cents.to_i < 0
36
+ raise ArgumentError, 'money amount must be either a Money object or a positive integer in cents.'
37
+ end
38
+
39
+ add_field(mappings[:amount], cents)
40
+ end
41
+ # Supported currencies include:
42
+ # * CNY:Chinese Yuan (Renminbi)
43
+ # * TWD:New Taiwan Dollar
44
+ # * HKD:Hong Kong Dollar
45
+ # * USD:US Dollar
46
+ # * AUD:Austrian Dollar
47
+ mapping :currency, 'currency'
48
+
49
+ mapping :order, 'ordernumber'
50
+ mapping :description, 'orderdesc'
51
+
52
+ mapping :notify_url, 'merUpdateURL'
53
+ mapping :return_url, 'returnURL'
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,59 @@
1
+ require 'net/http'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ module Integrations #:nodoc:
6
+ module HiTrust
7
+ class Notification < ActiveMerchant::Billing::Integrations::Notification
8
+ SUCCESS = '00'
9
+
10
+ self.production_ips = [ '203.75.242.8' ]
11
+
12
+ def complete?
13
+ status == 'Completed'
14
+ end
15
+
16
+ def transaction_id
17
+ params['authRRN']
18
+ end
19
+
20
+ def item_id
21
+ params['ordernumber']
22
+ end
23
+
24
+ def received_at
25
+ Time.parse(params['orderdate']) rescue nil
26
+ end
27
+
28
+ def currency
29
+ params['currency']
30
+ end
31
+
32
+ def gross
33
+ sprintf("%.2f", gross_cents.to_f / 100)
34
+ end
35
+
36
+ def gross_cents
37
+ params['approveamount'].to_i
38
+ end
39
+
40
+ def account
41
+ params['storeid']
42
+ end
43
+
44
+ def status
45
+ params['retcode'] == SUCCESS ? 'Completed' : 'Failed'
46
+ end
47
+
48
+ def test?
49
+ ActiveMerchant::Billing::Base.integration_mode == :test
50
+ end
51
+
52
+ def acknowledge
53
+ true
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,67 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module HiTrust
5
+ class Return < ActiveMerchant::Billing::Integrations::Return
6
+ SUCCESS = "00"
7
+ CODES = { "00" => "Operation completed successfully",
8
+ "-1" => "Unable to initialize winsock dll.",
9
+ "-2" => "Can't create stream socket.",
10
+ "-3" => "No Request Message.",
11
+ "-4" => "Can't connect to server.",
12
+ "-5" => "Send socket error.",
13
+ "-6" => "Couldn't receive data.",
14
+ "-7" => "Receive Broken message.",
15
+ "-8" => "Unable to initialize Envirnment.",
16
+ "-9" => "Can't Read Server RSA File.",
17
+ "-10" => "Can't Read Client RSA File.",
18
+ "-11" => "Web Server error.",
19
+ "-12" => "Receive Message type error.",
20
+ "-13" => "No Request Message.",
21
+ "-14" => "No Response Content.",
22
+ "-18" => "Merchant Update URL not found.",
23
+ "-19" => "Server URL not find Domain or IP.",
24
+ "-20" => "Server URL only can fill http or https.",
25
+ "-21" => "Server Config File open error.",
26
+ "-22" => "Server RSA Key File open error.",
27
+ "-23" => "Server RSA Key File read error.",
28
+ "-24" => "Server Config File have some errors, Please to check it.",
29
+ "-25" => "Merchant Config File open error.",
30
+ "-26" => "Merchant RSA Key File open error.",
31
+ "-27" => "Merchant RSA Key File read error.",
32
+ "-28" => "Merchant Config File has some errors, Please to check it.",
33
+ "-29" => "Server Type is unknown.",
34
+ "-30" => "Comm Type is unknown.",
35
+ "-31" => "Input Parameter [ORDERNO] is null or empty.",
36
+ "-32" => "Input Parameter [STOREID] is null or empty.",
37
+ "-33" => "Input Parameter [ORDERDESC] is null or empty.",
38
+ "-34" => "Input Parameter [CURRENCY] is null or empty.",
39
+ "-35" => "Input Parameter [AMOUNT] is null or empty.",
40
+ "-36" => "Input Parameter [ORDERURL] is null or empty.",
41
+ "-37" => "Input Parameter [RETURNURL] is null or empty.",
42
+ "-38" => "Input Parameter [DEPOSIT] is null or empty.",
43
+ "-39" => "Input Parameter [QUERYFLAG] is null or empty.",
44
+ "-40" => "Input Parameter [UPDATEURL] is null or empty.",
45
+ "-41" => "Input Parameter [MERUPDATEURL] is null or empty.",
46
+ "-42" => "Input Parameter [KEY] is null or empty.",
47
+ "-43" => "Input Parameter [MAC] is null or empty.",
48
+ "-44" => "Input Parameter [CIPHER] is null or empty.",
49
+ "-45" => "Input Parameter [TrxType] is wrong.",
50
+ "-100" => "TrustLink Server is closed. Or Merchant Server IP is not consistent with TrustLink Server setting.",
51
+ "-101" => "TrustLink Server receives NULL.",
52
+ "-308" => "Order Number already exists.",
53
+ "positive" => "Response from Bank. Please contact with Acquirer Bank Service or HiTRUST Call Center."
54
+ }
55
+
56
+ def success?
57
+ params['retcode'] == SUCCESS
58
+ end
59
+
60
+ def message
61
+ CODES[ params['retcode'] ]
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,27 @@
1
+
2
+ module ActiveMerchant #:nodoc:
3
+ module Billing #:nodoc:
4
+ module Integrations #:nodoc:
5
+ module HiTrust
6
+ autoload :Helper, File.dirname(__FILE__) + '/hi_trust/helper.rb'
7
+ autoload :Return, File.dirname(__FILE__) + '/hi_trust/return.rb'
8
+ autoload :Notification, File.dirname(__FILE__) + '/hi_trust/notification.rb'
9
+
10
+ TEST_URL = 'https://testtrustlink.hitrust.com.tw/TrustLink/TrxReq'
11
+ LIVE_URL = 'https://trustlink.hitrust.com.tw/TrustLink/TrxReq'
12
+
13
+ def self.service_url
14
+ ActiveMerchant::Billing::Base.integration_mode == :test ? TEST_URL : LIVE_URL
15
+ end
16
+
17
+ def self.notification(post, options = {})
18
+ Notification.new(post)
19
+ end
20
+
21
+ def self.return(query_string, options = {})
22
+ Return.new(query_string)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,48 @@
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
+ end
34
+
35
+
36
+ private
37
+
38
+ def add_tracking_token
39
+ return if application_id.blank? || application_id == 'ActiveMerchant'
40
+
41
+ add_field('merchant_fields', 'platform')
42
+ add_field('platform', application_id)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ 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,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,68 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Nochex
5
+ class Helper < ActiveMerchant::Billing::Integrations::Helper
6
+ # Required Parameters
7
+ # email
8
+ # amount
9
+ mapping :account, 'email'
10
+ mapping :amount, 'amount'
11
+
12
+ # Set the field status = test for testing with accounts:
13
+ # Account Password
14
+ # test1@nochex.com 123456
15
+ # test2@nochex.com 123456
16
+ # def initialize(order, account, options = {})
17
+ # super
18
+ # add_field('status', 'test')
19
+ # end
20
+
21
+ # Need to format the amount to have 2 decimal places
22
+ def amount=(money)
23
+ cents = money.respond_to?(:cents) ? money.cents : money
24
+ if money.is_a?(String) or cents.to_i <= 0
25
+ raise ArgumentError, 'money amount must be either a Money object or a positive integer in cents.'
26
+ end
27
+ add_field mappings[:amount], sprintf("%.2f", cents.to_f/100)
28
+ end
29
+
30
+ # Optional Parameters
31
+ # ordernumber
32
+ mapping :order, 'ordernumber'
33
+
34
+ # firstname
35
+ # lastname
36
+ # email_address_sender
37
+ mapping :customer, :first_name => 'firstname',
38
+ :last_name => 'lastname',
39
+ :email => 'email_address_sender'
40
+
41
+ # town
42
+ # firstline
43
+ # county
44
+ # postcode
45
+ mapping :billing_address, :city => 'town',
46
+ :address1 => 'firstline',
47
+ :state => 'county',
48
+ :zip => 'postcode'
49
+
50
+ # responderurl
51
+ mapping :notify_url, 'responderurl'
52
+
53
+ # returnurl
54
+ mapping :return_url, 'returnurl'
55
+
56
+ # cancelurl
57
+ mapping :cancel_return_url, 'cancelurl'
58
+
59
+ # description
60
+ mapping :description, 'description'
61
+
62
+ # Currently unmapped
63
+ # logo
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,94 @@
1
+ require 'net/http'
2
+ require 'date'
3
+
4
+ module ActiveMerchant #:nodoc:
5
+ module Billing #:nodoc:
6
+ module Integrations #:nodoc:
7
+ module Nochex
8
+ # Parser and handler for incoming Automatic Payment Confirmations from Nochex.
9
+ class Notification < ActiveMerchant::Billing::Integrations::Notification
10
+ include ActiveMerchant::PostsData
11
+
12
+ def complete?
13
+ status == 'Completed'
14
+ end
15
+
16
+ # Id of the order we passed to Nochex
17
+ def item_id
18
+ params['order_id']
19
+ end
20
+
21
+ def transaction_id
22
+ params['transaction_id']
23
+ end
24
+
25
+ def currency
26
+ 'GBP'
27
+ end
28
+
29
+ # When was this payment received by the client.
30
+ def received_at
31
+ # U.K. Format: 27/09/2006 22:30:54
32
+ return if params['transaction_date'].blank?
33
+ time = params['transaction_date'].scan(/\d+/)
34
+ Time.utc(time[2], time[1], time[0], time[3], time[4], time[5])
35
+ end
36
+
37
+ def payer_email
38
+ params['from_email']
39
+ end
40
+
41
+ def receiver_email
42
+ params['to_email']
43
+ end
44
+
45
+ def security_key
46
+ params['security_key']
47
+ end
48
+
49
+ # the money amount we received in X.2 decimal.
50
+ def gross
51
+ sprintf("%.2f", params['amount'].to_f)
52
+ end
53
+
54
+ # Was this a test transaction?
55
+ def test?
56
+ params['status'] == 'test'
57
+ end
58
+
59
+ def status
60
+ 'Completed'
61
+ end
62
+
63
+ # Acknowledge the transaction to Nochex. This method has to be called after a new
64
+ # apc arrives. Nochex will verify that all the information we received are correct and will return a
65
+ # ok or a fail. This is very similar to the PayPal IPN scheme.
66
+ #
67
+ # Example:
68
+ #
69
+ # def nochex_ipn
70
+ # notify = NochexNotification.new(request.raw_post)
71
+ #
72
+ # if notify.acknowledge
73
+ # ... process order ... if notify.complete?
74
+ # else
75
+ # ... log possible hacking attempt ...
76
+ # end
77
+ def acknowledge
78
+ payload = raw
79
+
80
+ response = ssl_post(Nochex.notification_confirmation_url, payload,
81
+ 'Content-Length' => "#{payload.size}",
82
+ 'User-Agent' => "Active Merchant -- http://activemerchant.org",
83
+ 'Content-Type' => "application/x-www-form-urlencoded"
84
+ )
85
+
86
+ raise StandardError.new("Faulty Nochex result: #{response}") unless ["AUTHORISED", "DECLINED"].include?(response)
87
+
88
+ response == "AUTHORISED"
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,10 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Nochex
5
+ class Return < ActiveMerchant::Billing::Integrations::Return
6
+ end
7
+ end
8
+ end
9
+ end
10
+ 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