gonow-activemerchant 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. data/CHANGELOG +690 -0
  2. data/CONTRIBUTORS +237 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.rdoc +165 -0
  5. data/gem-public_cert.pem +20 -0
  6. data/lib/active_merchant.rb +47 -0
  7. data/lib/active_merchant/billing.rb +9 -0
  8. data/lib/active_merchant/billing/avs_result.rb +98 -0
  9. data/lib/active_merchant/billing/base.rb +57 -0
  10. data/lib/active_merchant/billing/check.rb +68 -0
  11. data/lib/active_merchant/billing/credit_card.rb +178 -0
  12. data/lib/active_merchant/billing/credit_card_formatting.rb +21 -0
  13. data/lib/active_merchant/billing/credit_card_methods.rb +125 -0
  14. data/lib/active_merchant/billing/cvv_result.rb +38 -0
  15. data/lib/active_merchant/billing/expiry_date.rb +34 -0
  16. data/lib/active_merchant/billing/gateway.rb +170 -0
  17. data/lib/active_merchant/billing/gateways.rb +18 -0
  18. data/lib/active_merchant/billing/gateways/authorize_net.rb +664 -0
  19. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +858 -0
  20. data/lib/active_merchant/billing/gateways/barclays_epdq.rb +308 -0
  21. data/lib/active_merchant/billing/gateways/beanstream.rb +139 -0
  22. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +282 -0
  23. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +54 -0
  24. data/lib/active_merchant/billing/gateways/blue_pay.rb +11 -0
  25. data/lib/active_merchant/billing/gateways/bogus.rb +132 -0
  26. data/lib/active_merchant/billing/gateways/braintree.rb +17 -0
  27. data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +9 -0
  28. data/lib/active_merchant/billing/gateways/braintree_blue.rb +293 -0
  29. data/lib/active_merchant/billing/gateways/braintree_orange.rb +17 -0
  30. data/lib/active_merchant/billing/gateways/braspag.rb +188 -0
  31. data/lib/active_merchant/billing/gateways/card_stream.rb +230 -0
  32. data/lib/active_merchant/billing/gateways/cyber_source.rb +430 -0
  33. data/lib/active_merchant/billing/gateways/data_cash.rb +597 -0
  34. data/lib/active_merchant/billing/gateways/efsnet.rb +235 -0
  35. data/lib/active_merchant/billing/gateways/elavon.rb +134 -0
  36. data/lib/active_merchant/billing/gateways/epay.rb +268 -0
  37. data/lib/active_merchant/billing/gateways/eway.rb +277 -0
  38. data/lib/active_merchant/billing/gateways/eway_managed.rb +231 -0
  39. data/lib/active_merchant/billing/gateways/exact.rb +222 -0
  40. data/lib/active_merchant/billing/gateways/federated_canada.rb +168 -0
  41. data/lib/active_merchant/billing/gateways/first_pay.rb +177 -0
  42. data/lib/active_merchant/billing/gateways/garanti.rb +262 -0
  43. data/lib/active_merchant/billing/gateways/ideal/ideal_base.rb +250 -0
  44. data/lib/active_merchant/billing/gateways/ideal/ideal_rabobank.pem +13 -0
  45. data/lib/active_merchant/billing/gateways/ideal/ideal_response.rb +29 -0
  46. data/lib/active_merchant/billing/gateways/ideal_rabobank.rb +55 -0
  47. data/lib/active_merchant/billing/gateways/inspire.rb +221 -0
  48. data/lib/active_merchant/billing/gateways/instapay.rb +164 -0
  49. data/lib/active_merchant/billing/gateways/iridium.rb +258 -0
  50. data/lib/active_merchant/billing/gateways/jetpay.rb +276 -0
  51. data/lib/active_merchant/billing/gateways/linkpoint.rb +454 -0
  52. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +156 -0
  53. data/lib/active_merchant/billing/gateways/merchant_ware.rb +289 -0
  54. data/lib/active_merchant/billing/gateways/modern_payments.rb +36 -0
  55. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +220 -0
  56. data/lib/active_merchant/billing/gateways/moneris.rb +209 -0
  57. data/lib/active_merchant/billing/gateways/net_registry.rb +189 -0
  58. data/lib/active_merchant/billing/gateways/netaxept.rb +239 -0
  59. data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
  60. data/lib/active_merchant/billing/gateways/nmi.rb +13 -0
  61. data/lib/active_merchant/billing/gateways/ogone.rb +292 -0
  62. data/lib/active_merchant/billing/gateways/orbital.rb +321 -0
  63. data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +46 -0
  64. data/lib/active_merchant/billing/gateways/pay_junction.rb +392 -0
  65. data/lib/active_merchant/billing/gateways/pay_secure.rb +120 -0
  66. data/lib/active_merchant/billing/gateways/paybox_direct.rb +207 -0
  67. data/lib/active_merchant/billing/gateways/payflow.rb +253 -0
  68. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +207 -0
  69. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +39 -0
  70. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
  71. data/lib/active_merchant/billing/gateways/payflow_express.rb +222 -0
  72. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +15 -0
  73. data/lib/active_merchant/billing/gateways/payflow_uk.rb +21 -0
  74. data/lib/active_merchant/billing/gateways/payment_express.rb +235 -0
  75. data/lib/active_merchant/billing/gateways/paypal.rb +121 -0
  76. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +351 -0
  77. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +49 -0
  78. data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
  79. data/lib/active_merchant/billing/gateways/paypal_express.rb +177 -0
  80. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +25 -0
  81. data/lib/active_merchant/billing/gateways/plugnpay.rb +298 -0
  82. data/lib/active_merchant/billing/gateways/psigate.rb +219 -0
  83. data/lib/active_merchant/billing/gateways/psl_card.rb +304 -0
  84. data/lib/active_merchant/billing/gateways/qbms.rb +295 -0
  85. data/lib/active_merchant/billing/gateways/quantum.rb +282 -0
  86. data/lib/active_merchant/billing/gateways/quickpay.rb +218 -0
  87. data/lib/active_merchant/billing/gateways/realex.rb +311 -0
  88. data/lib/active_merchant/billing/gateways/sage.rb +146 -0
  89. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +88 -0
  90. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +116 -0
  91. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +97 -0
  92. data/lib/active_merchant/billing/gateways/sage_pay.rb +320 -0
  93. data/lib/active_merchant/billing/gateways/sallie_mae.rb +144 -0
  94. data/lib/active_merchant/billing/gateways/secure_net.rb +330 -0
  95. data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
  96. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +193 -0
  97. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
  98. data/lib/active_merchant/billing/gateways/skip_jack.rb +453 -0
  99. data/lib/active_merchant/billing/gateways/smart_ps.rb +271 -0
  100. data/lib/active_merchant/billing/gateways/stripe.rb +212 -0
  101. data/lib/active_merchant/billing/gateways/trans_first.rb +127 -0
  102. data/lib/active_merchant/billing/gateways/transax.rb +25 -0
  103. data/lib/active_merchant/billing/gateways/trust_commerce.rb +423 -0
  104. data/lib/active_merchant/billing/gateways/usa_epay.rb +194 -0
  105. data/lib/active_merchant/billing/gateways/verifi.rb +233 -0
  106. data/lib/active_merchant/billing/gateways/viaklix.rb +189 -0
  107. data/lib/active_merchant/billing/gateways/wirecard.rb +318 -0
  108. data/lib/active_merchant/billing/gateways/worldpay.rb +280 -0
  109. data/lib/active_merchant/billing/integrations.rb +17 -0
  110. data/lib/active_merchant/billing/integrations/action_view_helper.rb +68 -0
  111. data/lib/active_merchant/billing/integrations/bogus.rb +23 -0
  112. data/lib/active_merchant/billing/integrations/bogus/helper.rb +17 -0
  113. data/lib/active_merchant/billing/integrations/bogus/notification.rb +11 -0
  114. data/lib/active_merchant/billing/integrations/bogus/return.rb +10 -0
  115. data/lib/active_merchant/billing/integrations/chronopay.rb +23 -0
  116. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +120 -0
  117. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +158 -0
  118. data/lib/active_merchant/billing/integrations/chronopay/return.rb +10 -0
  119. data/lib/active_merchant/billing/integrations/direc_pay.rb +41 -0
  120. data/lib/active_merchant/billing/integrations/direc_pay/helper.rb +200 -0
  121. data/lib/active_merchant/billing/integrations/direc_pay/notification.rb +76 -0
  122. data/lib/active_merchant/billing/integrations/direc_pay/return.rb +32 -0
  123. data/lib/active_merchant/billing/integrations/direc_pay/status.rb +37 -0
  124. data/lib/active_merchant/billing/integrations/directebanking.rb +47 -0
  125. data/lib/active_merchant/billing/integrations/directebanking/helper.rb +90 -0
  126. data/lib/active_merchant/billing/integrations/directebanking/notification.rb +120 -0
  127. data/lib/active_merchant/billing/integrations/directebanking/return.rb +11 -0
  128. data/lib/active_merchant/billing/integrations/e_payment_plans.rb +48 -0
  129. data/lib/active_merchant/billing/integrations/e_payment_plans/helper.rb +34 -0
  130. data/lib/active_merchant/billing/integrations/e_payment_plans/notification.rb +84 -0
  131. data/lib/active_merchant/billing/integrations/gestpay.rb +25 -0
  132. data/lib/active_merchant/billing/integrations/gestpay/common.rb +42 -0
  133. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +70 -0
  134. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +85 -0
  135. data/lib/active_merchant/billing/integrations/gestpay/return.rb +10 -0
  136. data/lib/active_merchant/billing/integrations/helper.rb +96 -0
  137. data/lib/active_merchant/billing/integrations/hi_trust.rb +27 -0
  138. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +58 -0
  139. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +59 -0
  140. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +67 -0
  141. data/lib/active_merchant/billing/integrations/moneybookers.rb +26 -0
  142. data/lib/active_merchant/billing/integrations/moneybookers/helper.rb +59 -0
  143. data/lib/active_merchant/billing/integrations/moneybookers/notification.rb +129 -0
  144. data/lib/active_merchant/billing/integrations/nochex.rb +88 -0
  145. data/lib/active_merchant/billing/integrations/nochex/helper.rb +68 -0
  146. data/lib/active_merchant/billing/integrations/nochex/notification.rb +94 -0
  147. data/lib/active_merchant/billing/integrations/nochex/return.rb +10 -0
  148. data/lib/active_merchant/billing/integrations/notification.rb +62 -0
  149. data/lib/active_merchant/billing/integrations/paypal.rb +39 -0
  150. data/lib/active_merchant/billing/integrations/paypal/helper.rb +119 -0
  151. data/lib/active_merchant/billing/integrations/paypal/notification.rb +154 -0
  152. data/lib/active_merchant/billing/integrations/paypal/return.rb +10 -0
  153. data/lib/active_merchant/billing/integrations/quickpay.rb +21 -0
  154. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +72 -0
  155. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +74 -0
  156. data/lib/active_merchant/billing/integrations/return.rb +42 -0
  157. data/lib/active_merchant/billing/integrations/sage_pay_form.rb +37 -0
  158. data/lib/active_merchant/billing/integrations/sage_pay_form/encryption.rb +33 -0
  159. data/lib/active_merchant/billing/integrations/sage_pay_form/helper.rb +111 -0
  160. data/lib/active_merchant/billing/integrations/sage_pay_form/notification.rb +210 -0
  161. data/lib/active_merchant/billing/integrations/sage_pay_form/return.rb +31 -0
  162. data/lib/active_merchant/billing/integrations/two_checkout.rb +23 -0
  163. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +59 -0
  164. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +114 -0
  165. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +17 -0
  166. data/lib/active_merchant/billing/integrations/valitor.rb +33 -0
  167. data/lib/active_merchant/billing/integrations/valitor/helper.rb +86 -0
  168. data/lib/active_merchant/billing/integrations/valitor/notification.rb +13 -0
  169. data/lib/active_merchant/billing/integrations/valitor/response_fields.rb +97 -0
  170. data/lib/active_merchant/billing/integrations/valitor/return.rb +13 -0
  171. data/lib/active_merchant/billing/integrations/world_pay.rb +27 -0
  172. data/lib/active_merchant/billing/integrations/world_pay/helper.rb +100 -0
  173. data/lib/active_merchant/billing/integrations/world_pay/notification.rb +160 -0
  174. data/lib/active_merchant/billing/response.rb +32 -0
  175. data/lib/active_merchant/common.rb +14 -0
  176. data/lib/active_merchant/common/connection.rb +177 -0
  177. data/lib/active_merchant/common/country.rb +328 -0
  178. data/lib/active_merchant/common/error.rb +26 -0
  179. data/lib/active_merchant/common/post_data.rb +24 -0
  180. data/lib/active_merchant/common/posts_data.rb +63 -0
  181. data/lib/active_merchant/common/requires_parameters.rb +16 -0
  182. data/lib/active_merchant/common/utils.rb +22 -0
  183. data/lib/active_merchant/common/validateable.rb +81 -0
  184. data/lib/active_merchant/version.rb +3 -0
  185. data/lib/activemerchant.rb +1 -0
  186. data/lib/certs/cacert.pem +7815 -0
  187. data/lib/support/gateway_support.rb +58 -0
  188. data/lib/support/outbound_hosts.rb +25 -0
  189. metadata +276 -0
@@ -0,0 +1,31 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module SagePayForm
5
+ class Return < ActiveMerchant::Billing::Integrations::Return
6
+
7
+ def initialize(query_string, options)
8
+ begin
9
+ @notification = Notification.new(query_string, options)
10
+ rescue Notification::CryptError => e
11
+ @message = e.message
12
+ end
13
+ end
14
+
15
+ def success?
16
+ @notification && @notification.complete?
17
+ end
18
+
19
+ def cancelled?
20
+ @notification && @notification.cancelled?
21
+ end
22
+
23
+ def message
24
+ @message || @notification.message
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,23 @@
1
+
2
+ module ActiveMerchant #:nodoc:
3
+ module Billing #:nodoc:
4
+ module Integrations #:nodoc:
5
+ module TwoCheckout
6
+ autoload 'Helper', File.dirname(__FILE__) + '/two_checkout/helper'
7
+ autoload 'Return', File.dirname(__FILE__) + '/two_checkout/return'
8
+ autoload 'Notification', File.dirname(__FILE__) + '/two_checkout/notification'
9
+
10
+ mattr_accessor :service_url
11
+ self.service_url = 'https://www.2checkout.com/2co/buyer/purchase'
12
+
13
+ def self.notification(post, options = {})
14
+ Notification.new(post)
15
+ end
16
+
17
+ def self.return(query_string, options = {})
18
+ Return.new(query_string)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,59 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module TwoCheckout
5
+ class Helper < ActiveMerchant::Billing::Integrations::Helper
6
+ def initialize(order, account, options = {})
7
+ super
8
+ add_field('fixed', 'Y')
9
+
10
+ if ActiveMerchant::Billing::Base.integration_mode == :test || options[:test]
11
+ add_field('demo', 'Y')
12
+ end
13
+ end
14
+
15
+ # The 2checkout vendor account number
16
+ mapping :account, 'sid'
17
+
18
+ # he total amount to be billed, in decimal form, without a currency symbol. (8 characters, decimal, 2 characters: Example: 99999999.99)
19
+ mapping :amount, 'total'
20
+
21
+ # a unique order id from your program. (128 characters max)
22
+ mapping :order, 'cart_order_id'
23
+
24
+
25
+ mapping :customer, :email => 'email',
26
+ :phone => 'phone'
27
+
28
+ mapping :billing_address, :city => 'city',
29
+ :address1 => 'street_address',
30
+ :address2 => 'street_address2',
31
+ :state => 'state',
32
+ :zip => 'zip',
33
+ :country => 'country'
34
+
35
+ mapping :shipping_address, :city => 'ship_city',
36
+ :address1 => 'ship_street_address',
37
+ :state => 'ship_state',
38
+ :zip => 'ship_zip',
39
+ :country => 'ship_country'
40
+
41
+ mapping :invoice, 'merchant_order_id'
42
+
43
+ # Does nothing, since we've disabled the Continue Shopping button by using the fixed = Y field
44
+ mapping :return_url, 'return_url'
45
+
46
+ #mapping :description, ''
47
+ #mapping :tax, ''
48
+ #mapping :shipping, ''
49
+
50
+ def customer(params = {})
51
+ add_field(mappings[:customer][:email], params[:email])
52
+ add_field(mappings[:customer][:phone], params[:phone])
53
+ add_field('card_holder_name', "#{params[:first_name]} #{params[:last_name]}")
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,114 @@
1
+ require 'net/http'
2
+ require 'base64'
3
+ require 'digest/md5'
4
+
5
+ module ActiveMerchant #:nodoc:
6
+ module Billing #:nodoc:
7
+ module Integrations #:nodoc:
8
+ module TwoCheckout
9
+ class Notification < ActiveMerchant::Billing::Integrations::Notification
10
+ # order_number 2Checkout.com order number
11
+ # card_holder_name Card holder's name
12
+ # street_address Card holder's address
13
+ # city Card holder's city
14
+ # state Card holder's state
15
+ # zip Card holder's zip
16
+ # country Card holder's country
17
+ # email Card holder's email
18
+ # phone Card holder's phone
19
+ # credit_card_processed Y if successful, K if waiting for approval
20
+ # total Total purchase amount
21
+ # ship_name Shipping information
22
+ # ship_street_address Shipping information
23
+ # ship_city Shipping information
24
+ # ship_state Shipping information
25
+ # ship_zip Shipping information
26
+ # ship_country Shipping information
27
+ # product_id 2Checkout product ID for purchased items will append a number if more than one item.
28
+ # ex. product_id,product_id1,product_id2
29
+ # quantity quantity of corresponding product will append a number if more than one item.
30
+ # ex. quantity,quantity1,quantity2
31
+ # merchant_product_id your product ID for purchased items will append a number if more than one item.
32
+ # ex. merchant_product_id,merchant_product_id1,merchant_product_id2
33
+ # product_description your description for purchased items will append a number if more than one item.
34
+ # ex. product_description,product_description1,product_description2
35
+
36
+ def currency
37
+ 'USD'
38
+ end
39
+
40
+ def complete?
41
+ status == 'Completed'
42
+ end
43
+
44
+ def item_id
45
+ params['cart_order_id']
46
+ end
47
+
48
+ def transaction_id
49
+ params['order_number']
50
+ end
51
+
52
+ def received_at
53
+ params['']
54
+ end
55
+
56
+ def payer_email
57
+ params['email']
58
+ end
59
+
60
+ def receiver_email
61
+ params['']
62
+ end
63
+
64
+ # The MD5 Hash
65
+ def security_key
66
+ params['key']
67
+ end
68
+
69
+ # the money amount we received in X.2 decimal.
70
+ def gross
71
+ params['total']
72
+ end
73
+
74
+ # Was this a test transaction? # Use the hash
75
+ def test?
76
+ params['demo'] == 'Y'
77
+ end
78
+
79
+ def status
80
+ case params['credit_card_processed']
81
+ when 'Y'
82
+ 'Completed'
83
+ when 'K'
84
+ 'Pending'
85
+ else
86
+ 'Failed'
87
+ end
88
+ end
89
+
90
+ def secret
91
+ @options[:credential2]
92
+ end
93
+
94
+ def acknowledge
95
+ return false if security_key.blank?
96
+
97
+ Digest::MD5.hexdigest("#{secret}#{params['sid']}#{transaction_id}#{gross}").upcase == security_key.upcase
98
+ end
99
+
100
+ private
101
+
102
+ def parse(post)
103
+ @raw = post.to_s
104
+ for line in @raw.split('&')
105
+ key, value = *line.scan( %r{^(\w+)\=(.*)$} ).flatten
106
+ params[key] = CGI.unescape(value || '')
107
+ end
108
+ end
109
+
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,17 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module TwoCheckout
5
+ class Return < ActiveMerchant::Billing::Integrations::Return
6
+ def success?
7
+ params['credit_card_processed'] == 'Y'
8
+ end
9
+
10
+ def message
11
+
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,33 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module Valitor
5
+ autoload :Return, 'active_merchant/billing/integrations/valitor/return.rb'
6
+ autoload :Helper, 'active_merchant/billing/integrations/valitor/helper.rb'
7
+ autoload :Notification, 'active_merchant/billing/integrations/valitor/notification.rb'
8
+
9
+ mattr_accessor :test_url
10
+ self.test_url = 'https://testvefverslun.valitor.is/1_1/'
11
+
12
+ mattr_accessor :production_url
13
+ self.production_url = 'https://vefverslun.valitor.is/1_1/'
14
+
15
+ def self.test?
16
+ (ActiveMerchant::Billing::Base.integration_mode == :test)
17
+ end
18
+
19
+ def self.service_url
20
+ (test? ? test_url : production_url)
21
+ end
22
+
23
+ def self.notification(params, options={})
24
+ Notification.new(params, options.merge(:test => test?))
25
+ end
26
+
27
+ def self.return(query_string, options={})
28
+ Return.new(query_string, options.merge(:test => test?))
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,86 @@
1
+ require 'digest/md5'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ module Integrations #:nodoc:
6
+ module Valitor
7
+ class Helper < ActiveMerchant::Billing::Integrations::Helper
8
+ include RequiresParameters
9
+
10
+ DEFAULT_SUCCESS_TEXT = "The transaction has been completed."
11
+
12
+ def initialize(order, account, options={})
13
+ options[:currency] ||= 'ISK'
14
+ super
15
+ add_field 'Adeinsheimild', '0'
16
+ add_field 'KaupandaUpplysingar', '0'
17
+ add_field 'SlokkvaHaus', '0'
18
+ @security_number = options[:credential2]
19
+ @amount = options[:amount]
20
+ @order = order
21
+ end
22
+
23
+ mapping :account, 'VefverslunID'
24
+ mapping :currency, 'Gjaldmidill'
25
+
26
+ mapping :order, 'Tilvisunarnumer'
27
+
28
+ mapping :notify_url, 'SlodTokstAdGjaldfaeraServerSide'
29
+ mapping :return_url, 'SlodTokstAdGjaldfaera'
30
+ mapping :cancel_return_url, 'SlodNotandiHaettirVid'
31
+
32
+ mapping :success_text, 'SlodTokstAdGjaldfaeraTexti'
33
+
34
+ mapping :language, 'Lang'
35
+
36
+ def authorize_only
37
+ add_field 'Adeinsheimild', '1'
38
+ end
39
+
40
+ def collect_customer_info
41
+ add_field 'KaupandaUpplysingar', '1'
42
+ end
43
+
44
+ def hide_header
45
+ add_field 'SlokkvaHaus', '1'
46
+ end
47
+
48
+ def product(id, options={})
49
+ raise ArgumentError, "Product id #{id} is not an integer between 1 and 500" unless id.to_i > 0 && id.to_i <= 500
50
+ requires!(options, :amount, :description)
51
+ options.assert_valid_keys([:description, :quantity, :amount, :discount])
52
+
53
+ add_field("Vara_#{id}_Verd", format_amount(options[:amount]))
54
+ add_field("Vara_#{id}_Fjoldi", options[:quantity] || "1")
55
+
56
+ add_field("Vara_#{id}_Lysing", options[:description]) if options[:description]
57
+ add_field("Vara_#{id}_Afslattur", options[:discount] || '0')
58
+
59
+ @products ||= []
60
+ @products << id.to_i
61
+ end
62
+
63
+ def signature
64
+ raise ArgumentError, "Security number not set" unless @security_number
65
+ parts = [@security_number, @fields['Adeinsheimild']]
66
+ @products.sort.uniq.each do |id|
67
+ parts.concat(["Vara_#{id}_Fjoldi", "Vara_#{id}_Verd", "Vara_#{id}_Afslattur"].collect{|e| @fields[e]})
68
+ end if @products
69
+ parts.concat(%w(VefverslunID Tilvisunarnumer SlodTokstAdGjaldfaera SlodTokstAdGjaldfaeraServerSide Gjaldmidill).collect{|e| @fields[e]})
70
+ Digest::MD5.hexdigest(parts.compact.join(''))
71
+ end
72
+
73
+ def form_fields
74
+ product(1, :amount => @amount, :description => @order) if Array(@products).empty?
75
+ @fields[mappings[:success_text]] ||= DEFAULT_SUCCESS_TEXT
76
+ @fields.merge('RafraenUndirskrift' => signature)
77
+ end
78
+
79
+ def format_amount(amount)
80
+ amount.to_f.round
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,13 @@
1
+ require 'active_merchant/billing/integrations/valitor/response_fields'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ module Integrations #:nodoc:
6
+ module Valitor
7
+ class Notification < ActiveMerchant::Billing::Integrations::Notification
8
+ include ResponseFields
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,97 @@
1
+ require 'digest/md5'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ module Integrations #:nodoc:
6
+ module Valitor
7
+ module ResponseFields
8
+ def success?
9
+ status == 'Completed'
10
+ end
11
+ alias :complete? :success?
12
+
13
+ def test?
14
+ @options[:test]
15
+ end
16
+
17
+ def item_id
18
+ params['Tilvisunarnumer']
19
+ end
20
+ alias :order :item_id
21
+
22
+ def transaction_id
23
+ params['VefverslunSalaID']
24
+ end
25
+
26
+ def currency
27
+ nil
28
+ end
29
+
30
+ def status
31
+ "Completed" if acknowledge
32
+ end
33
+
34
+ def received_at
35
+ Time.parse(params['Dagsetning'].to_s)
36
+ end
37
+
38
+ def gross
39
+ "%0.2f" % params['Upphaed'].to_s
40
+ end
41
+
42
+ def card_type
43
+ params['Kortategund']
44
+ end
45
+
46
+ def card_last_four
47
+ params['KortnumerSidustu']
48
+ end
49
+
50
+ def authorization_number
51
+ params['Heimildarnumer']
52
+ end
53
+
54
+ def transaction_number
55
+ params['Faerslunumer']
56
+ end
57
+
58
+ def customer_name
59
+ params['Nafn']
60
+ end
61
+
62
+ def customer_address
63
+ params['Heimilisfang']
64
+ end
65
+
66
+ def customer_zip
67
+ params['Postnumer']
68
+ end
69
+
70
+ def customer_city
71
+ params['Stadur']
72
+ end
73
+
74
+ def customer_country
75
+ params['Land']
76
+ end
77
+
78
+ def customer_email
79
+ params['Tolvupostfang']
80
+ end
81
+
82
+ def customer_comment
83
+ params['Athugasemdir']
84
+ end
85
+
86
+ def password
87
+ @options[:credential2]
88
+ end
89
+
90
+ def acknowledge
91
+ password ? Digest::MD5.hexdigest("#{password}#{order}") == params['RafraenUndirskriftSvar'] : true
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end