activemerchant 1.7.3 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
data/CHANGELOG CHANGED
@@ -1,5 +1,17 @@
1
1
  = ActiveMerchant CHANGELOG
2
2
 
3
+ == Version 1.8.0 (September 24, 2010)
4
+
5
+ * PayPal Express: Add support for billing agreements [Nathaniel Talbott]
6
+ * Allow comparing countries [Nathaniel Talbott]
7
+ * Iridium: Fix country handling [Nathaniel Talbott]
8
+ * Iridium: Fix missing billing address [Nathaniel Talbott]
9
+ * Iridium: Do not pass CV2 if not present [Nathaniel Talbott]
10
+ * Add Iridium support [Phil Smy]
11
+ * Add Netaxept support [Nathaniel Talbott]
12
+ * PaymentExpress: Use Card Holder Help Text for the response message [Nathaniel Talbott]
13
+ * Sort the country name list [Duff OMelia]
14
+
3
15
  == Version 1.7.3 (September 14, 2010)
4
16
 
5
17
  * Fix SagePay special handling for Japanese YEN currency to not send fractional amounts [Soleone]
data/CONTRIBUTORS CHANGED
@@ -109,6 +109,10 @@ Instapay Gateway (May 3, 2009)
109
109
 
110
110
  * Thomas Rideout
111
111
 
112
+ Iridium Gateway (June 13, 2009)
113
+
114
+ * Phil Smy
115
+
112
116
  MerchantWARE (July 7, 2009)
113
117
 
114
118
  * Cody Fauser
@@ -133,6 +137,10 @@ SallieMae (October 2, 2009)
133
137
 
134
138
  * iamjwc
135
139
 
140
+ Netaxept (February 08, 2010)
141
+
142
+ * Nathaniel Talbott
143
+
136
144
  Garanti (May 05, 2010)
137
145
 
138
146
  * Selem Delul (moon@mac.home)
data/README.rdoc CHANGED
@@ -21,10 +21,12 @@ The {ActiveMerchant Wiki}[http://github.com/Shopify/active_merchant/wikis] conta
21
21
  * {Efsnet}[http://www.concordefsnet.com/] - US
22
22
  * {eWAY}[http://www.eway.com.au/] - AU
23
23
  * {E-xact}[http://www.e-xact.com] - CA, US
24
+ * {Iridium}[http://www.iridiumcorp.co.uk/] - UK, ES
24
25
  * {LinkPoint}[http://www.linkpoint.com/] - US
25
26
  * {Merchant e-Solutions}[http://merchante-solutions.com/] - US
26
27
  * {Modern Payments}[http://www.modpay.com] - US
27
28
  * {Moneris}[http://www.moneris.com/] - CA
29
+ * {Netaxept}[http://www.betalingsterminal.no/Netthandel-forside] - NO, DK, SE, FI
28
30
  * {NetRegistry}[http://www.netregistry.com.au] - AU
29
31
  * {NELiX TransaX Gateway}[http://www.nelixtransax.com] - US
30
32
  * {NETbilling}[http://www.netbilling.com] - US
@@ -59,8 +61,8 @@ The {ActiveMerchant Wiki}[http://github.com/Shopify/active_merchant/wikis] conta
59
61
  == Supported Offsite Payment Gateways
60
62
 
61
63
  * {PayPal Website Payments Standard}[https://www.paypal.com/cgi-bin/webscr?cmd=_wp-standard-overview-outside]
62
- * Chronopay[http://www.chronopay.com]
63
- * Nochex[http://www.nochex.com]
64
+ * {Chronopay}[http://www.chronopay.com]
65
+ * {Nochex}[http://www.nochex.com]
64
66
  * {Banca Sella GestPay}[https://www.sella.it/banca/ecommerce/gestpay/gestpay.jsp]
65
67
  * {2 Checkout}[http://www.2checkout.com]
66
68
  * {HiTRUST}[http://www.hitrust.com.hk/]
@@ -0,0 +1,253 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ # For more information on the Iridium Gateway please download the
4
+ # documentation from their Merchant Management System.
5
+ #
6
+ # The login and password are not the username and password you use to
7
+ # login to the Iridium Merchant Management System. Instead, you will
8
+ # use the API username and password you were issued separately.
9
+ class IridiumGateway < Gateway
10
+ TEST_URL = 'https://gw1.iridiumcorp.net/'
11
+ LIVE_URL = 'https://gw1.iridiumcorp.net/'
12
+
13
+ # The countries the gateway supports merchants from as 2 digit ISO country codes
14
+ self.supported_countries = ['GB', 'ES']
15
+ self.default_currency = 'EUR'
16
+ self.money_format = :cents
17
+
18
+ # The card types supported by the payment gateway
19
+ self.supported_cardtypes = [:visa, :master, :american_express, :discover]
20
+
21
+ # The homepage URL of the gateway
22
+ self.homepage_url = 'http://www.iridiumcorp.co.uk/'
23
+
24
+ # The name of the gateway
25
+ self.display_name = 'Iridium'
26
+
27
+ CURRENCY_CODES = {
28
+ "AUD" => '036',
29
+ "CAD" => '124',
30
+ "EUR" => '978',
31
+ "GBP" => '826',
32
+ "MXN" => '484',
33
+ "NZD" => '554',
34
+ "USD" => '840',
35
+ }
36
+
37
+ def initialize(options = {})
38
+ requires!(options, :login, :password)
39
+ @options = options
40
+ super
41
+ end
42
+
43
+ def authorize(money, creditcard, options = {})
44
+ commit(build_purchase_request('PREAUTH', money, creditcard, options), options)
45
+ end
46
+
47
+ def purchase(money, payment_source, options = {})
48
+ setup_address_hash(options)
49
+
50
+ if payment_source.is_a?(CreditCard)
51
+ commit(build_purchase_request('SALE', money, payment_source, options), options)
52
+ else
53
+ commit(build_reference_request('SALE', money, payment_source, options), options)
54
+ end
55
+ end
56
+
57
+ def capture(money, authorization, options = {})
58
+ commit(build_reference_request('COLLECTION', money, authorization, options), options)
59
+ end
60
+
61
+ def credit(money, authorization, options={})
62
+ commit(build_reference_request('REFUND', money, authorization, options), options)
63
+ end
64
+
65
+ def void(authorization, options={})
66
+ commit(build_reference_request('VOID', nil, authorization, options), options)
67
+ end
68
+
69
+ private
70
+
71
+ def build_purchase_request(type, money, creditcard, options)
72
+ options.merge!(:action => 'CardDetailsTransaction')
73
+ build_request(options) do |xml|
74
+ add_purchase_data(xml, type, money, options)
75
+ add_creditcard(xml, creditcard)
76
+ add_customerdetails(xml, creditcard, options[:billing_address], options)
77
+ end
78
+ end
79
+
80
+ def build_reference_request(type, money, authorization, options)
81
+ options.merge!(:action => 'CrossReferenceTransaction')
82
+ order_id, cross_reference, auth_id = authorization.split(";")
83
+ build_request(options) do |xml|
84
+ if money
85
+ details = {'CurrencyCode' => currency_code(options[:currency] || default_currency), 'Amount' => amount(money)}
86
+ else
87
+ details = {'CurrencyCode' => currency_code(default_currency), 'Amount' => '0'}
88
+ end
89
+ xml.tag! 'TransactionDetails', details do
90
+ xml.tag! 'MessageDetails', {'TransactionType' => type, 'CrossReference' => cross_reference}
91
+ xml.tag! 'OrderID', (options[:order_id] || order_id)
92
+ end
93
+ end
94
+ end
95
+
96
+ def build_request(options)
97
+ requires!(options, :action)
98
+ xml = Builder::XmlMarkup.new :indent => 2
99
+ xml.instruct!(:xml, :version => '1.0', :encoding => 'utf-8')
100
+ xml.tag! 'soap:Envelope', { 'xmlns:soap' => 'http://schemas.xmlsoap.org/soap/envelope/',
101
+ 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
102
+ 'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema'} do
103
+ xml.tag! 'soap:Body' do
104
+ xml.tag! options[:action], {'xmlns' => "https://www.thepaymentgateway.net/"} do
105
+ xml.tag! 'PaymentMessage' do
106
+ add_merchant_data(xml, options)
107
+ yield(xml)
108
+ end
109
+ end
110
+ end
111
+ end
112
+ xml.target!
113
+ end
114
+
115
+ def setup_address_hash(options)
116
+ options[:billing_address] = options[:billing_address] || options[:address] || {}
117
+ options[:shipping_address] = options[:shipping_address] || {}
118
+ end
119
+
120
+ def add_purchase_data(xml, type, money, options)
121
+ requires!(options, :order_id)
122
+ xml.tag! 'TransactionDetails', {'Amount' => amount(money), 'CurrencyCode' => currency_code(options[:currency] || currency(money))} do
123
+ xml.tag! 'MessageDetails', {'TransactionType' => type}
124
+ xml.tag! 'OrderID', options[:order_id]
125
+ xml.tag! 'TransactionControl' do
126
+ xml.tag! 'ThreeDSecureOverridePolicy', 'FALSE'
127
+ xml.tag! 'EchoAVSCheckResult', 'TRUE'
128
+ xml.tag! 'EchoCV2CheckResult', 'TRUE'
129
+ end
130
+ end
131
+ end
132
+
133
+ def add_customerdetails(xml, creditcard, address, options, shipTo = false)
134
+ xml.tag! 'CustomerDetails' do
135
+ if address
136
+ unless address[:country].blank?
137
+ country_code = Country.find(address[:country]).code(:numeric)
138
+ end
139
+ xml.tag! 'BillingAddress' do
140
+ xml.tag! 'Address1', address[:address1]
141
+ xml.tag! 'Address2', address[:address2]
142
+ xml.tag! 'City', address[:city]
143
+ xml.tag! 'State', address[:state]
144
+ xml.tag! 'PostCode', address[:zip]
145
+ xml.tag! 'CountryCode', country_code if country_code
146
+ end
147
+ xml.tag! 'PhoneNumber', address[:phone]
148
+ end
149
+
150
+ xml.tag! 'EmailAddress', options[:email]
151
+ xml.tag! 'CustomerIPAddress', options[:ip] || "127.0.0.1"
152
+ end
153
+ end
154
+
155
+ def add_creditcard(xml, creditcard)
156
+ xml.tag! 'CardDetails' do
157
+ xml.tag! 'CardName', creditcard.name
158
+ xml.tag! 'CV2', creditcard.verification_value if creditcard.verification_value
159
+ xml.tag! 'CardNumber', creditcard.number
160
+ xml.tag! 'ExpiryDate', { 'Month' => creditcard.expiry_date.month.to_s.rjust(2, "0"), 'Year' => creditcard.expiry_date.year.to_s[/\d\d$/] }
161
+ end
162
+ end
163
+
164
+ def add_merchant_data(xml, options)
165
+ xml.tag! 'MerchantAuthentication', {"MerchantID" => @options[:login], "Password" => @options[:password]}
166
+ end
167
+
168
+ def commit(request, options)
169
+ requires!(options, :action)
170
+ response = parse(ssl_post(test? ? TEST_URL : LIVE_URL, request,
171
+ {"SOAPAction" => "https://www.thepaymentgateway.net/#{options[:action]}",
172
+ "Content-Type" => "text/xml; charset=utf-8" }))
173
+
174
+ success = response[:transaction_result][:status_code] == "0"
175
+ message = response[:transaction_result][:message]
176
+ authorization = success ? [ options[:order_id], response[:transaction_output_data][:cross_reference], response[:transaction_output_data][:auth_code] ].compact.join(";") : nil
177
+
178
+ Response.new(success, message, response,
179
+ :test => test?,
180
+ :authorization => authorization)
181
+ end
182
+
183
+ def parse(xml)
184
+ reply = {}
185
+ xml = REXML::Document.new(xml)
186
+ if (root = REXML::XPath.first(xml, "//CardDetailsTransactionResponse")) or
187
+ (root = REXML::XPath.first(xml, "//CrossReferenceTransactionResponse"))
188
+ root.elements.to_a.each do |node|
189
+ case node.name
190
+ when 'Message'
191
+ reply[:message] = reply(node.text)
192
+ else
193
+ parse_element(reply, node)
194
+ end
195
+ end
196
+ elsif root = REXML::XPath.first(xml, "//soap:Fault")
197
+ parse_element(reply, root)
198
+ reply[:message] = "#{reply[:faultcode]}: #{reply[:faultstring]}"
199
+ end
200
+ reply
201
+ end
202
+
203
+ def parse_element(reply, node)
204
+ case node.name
205
+ when "CrossReferenceTransactionResult"
206
+ reply[:transaction_result] = {}
207
+ node.attributes.each do |a,b|
208
+ reply[:transaction_result][a.underscore.to_sym] = b
209
+ end
210
+ node.elements.each{|e| parse_element(reply[:transaction_result], e) } if node.has_elements?
211
+
212
+ when "CardDetailsTransactionResult"
213
+ reply[:transaction_result] = {}
214
+ node.attributes.each do |a,b|
215
+ reply[:transaction_result][a.underscore.to_sym] = b
216
+ end
217
+ node.elements.each{|e| parse_element(reply[:transaction_result], e) } if node.has_elements?
218
+
219
+ when "TransactionOutputData"
220
+ reply[:transaction_output_data] = {}
221
+ node.attributes.each{|a,b| reply[:transaction_output_data][a.underscore.to_sym] = b }
222
+ node.elements.each{|e| parse_element(reply[:transaction_output_data], e) } if node.has_elements?
223
+ when "CustomVariables"
224
+ reply[:custom_variables] = {}
225
+ node.attributes.each{|a,b| reply[:custom_variables][a.underscore.to_sym] = b }
226
+ node.elements.each{|e| parse_element(reply[:custom_variables], e) } if node.has_elements?
227
+ when "GatewayEntryPoints"
228
+ reply[:gateway_entry_points] = {}
229
+ node.attributes.each{|a,b| reply[:gateway_entry_points][a.underscore.to_sym] = b }
230
+ node.elements.each{|e| parse_element(reply[:gateway_entry_points], e) } if node.has_elements?
231
+ else
232
+ k = node.name.underscore.to_sym
233
+ if node.has_elements?
234
+ reply[k] = {}
235
+ node.elements.each{|e| parse_element(reply[k], e) }
236
+ else
237
+ if node.has_attributes?
238
+ reply[k] = {}
239
+ node.attributes.each{|a,b| reply[k][a.underscore.to_sym] = b }
240
+ else
241
+ reply[k] = node.text
242
+ end
243
+ end
244
+ end
245
+ reply
246
+ end
247
+
248
+ def currency_code(currency)
249
+ CURRENCY_CODES[currency]
250
+ end
251
+ end
252
+ end
253
+ end
@@ -0,0 +1,233 @@
1
+ require 'digest/md5'
2
+
3
+ module ActiveMerchant #:nodoc:
4
+ module Billing #:nodoc:
5
+ class NetaxeptGateway < Gateway
6
+ TEST_URL = 'https://epayment-test.bbs.no/'
7
+ LIVE_URL = 'https://epayment.bbs.no/'
8
+
9
+ # The countries the gateway supports merchants from as 2 digit ISO country codes
10
+ self.supported_countries = ['NO', 'DK', 'SE', 'FI']
11
+
12
+ # The card types supported by the payment gateway
13
+ self.supported_cardtypes = [:visa, :master, :american_express]
14
+
15
+ # The homepage URL of the gateway
16
+ self.homepage_url = 'http://www.betalingsterminal.no/Netthandel-forside/'
17
+
18
+ # The name of the gateway
19
+ self.display_name = 'BBS Netaxept'
20
+
21
+ self.money_format = :cents
22
+
23
+ self.default_currency = 'NOK'
24
+
25
+ def initialize(options = {})
26
+ requires!(options, :login, :password)
27
+ @options = options
28
+ super
29
+ end
30
+
31
+ def purchase(money, creditcard, options = {})
32
+ requires!(options, :order_id)
33
+
34
+ post = {}
35
+ add_credentials(post, options)
36
+ add_transaction(post, options)
37
+ add_order(post, money, options)
38
+ add_creditcard(post, creditcard)
39
+ commit('Sale', post)
40
+ end
41
+
42
+ def authorize(money, creditcard, options = {})
43
+ requires!(options, :order_id)
44
+
45
+ post = {}
46
+ add_credentials(post, options)
47
+ add_transaction(post, options)
48
+ add_order(post, money, options)
49
+ add_creditcard(post, creditcard)
50
+ commit('Auth', post)
51
+ end
52
+
53
+ def capture(money, authorization, options = {})
54
+ post = {}
55
+ add_credentials(post, options)
56
+ add_authorization(post, authorization, money)
57
+ commit('Capture', post, false)
58
+ end
59
+
60
+ def credit(money, authorization, options = {})
61
+ post = {}
62
+ add_credentials(post, options)
63
+ add_authorization(post, authorization, money)
64
+ commit('Credit', post, false)
65
+ end
66
+
67
+ def void(authorization, options = {})
68
+ post = {}
69
+ add_credentials(post, options)
70
+ add_authorization(post, authorization)
71
+ commit('Annul', post, false)
72
+ end
73
+
74
+ def test?
75
+ @options[:test] || Base.gateway_mode == :test
76
+ end
77
+
78
+
79
+ private
80
+
81
+ def add_credentials(post, options)
82
+ post[:merchantId] = @options[:login]
83
+ post[:token] = @options[:password]
84
+ end
85
+
86
+ def add_authorization(post, authorization, money=nil)
87
+ post[:transactionId] = authorization
88
+ post[:transactionAmount] = amount(money) if money
89
+ end
90
+
91
+ def add_transaction(post, options)
92
+ post[:transactionId] = generate_transaction_id(options)
93
+ post[:serviceType] = 'C'
94
+ post[:redirectUrl] = 'http://example.com'
95
+ end
96
+
97
+ def add_order(post, money, options)
98
+ post[:orderNumber] = options[:order_id]
99
+ post[:amount] = amount(money)
100
+ post[:currencyCode] = (options[:currency] || currency(money))
101
+ end
102
+
103
+ CARD_TYPE_PREFIXES = {
104
+ 'visa' => 'v',
105
+ 'master' => 'm',
106
+ 'american_express' => 'a',
107
+ }
108
+ def add_creditcard(post, creditcard)
109
+ prefix = CARD_TYPE_PREFIXES[creditcard.type]
110
+ unless prefix
111
+ raise ArgumentError.new("Card type #{creditcard.type} not supported.")
112
+ end
113
+
114
+ post[:creditcard] = {}
115
+ post[:creditcard][:"#{prefix}a"] = creditcard.number
116
+ post[:creditcard][:"#{prefix}m"] = format(creditcard.month, :two_digits)
117
+ post[:creditcard][:"#{prefix}y"] = format(creditcard.year, :two_digits)
118
+ post[:creditcard][:"#{prefix}c"] = creditcard.verification_value
119
+ end
120
+
121
+ def commit(action, parameters, setup=true)
122
+ parameters[:action] = action
123
+
124
+ response = {:success => false}
125
+
126
+ catch(:exception) do
127
+ if setup
128
+ commit_transaction_setup(response, parameters)
129
+ commit_payment_details(response, parameters)
130
+ commit_process_setup(response, parameters)
131
+ end
132
+ commit_transaction(response, parameters)
133
+ response[:success] = true
134
+ end
135
+
136
+ Response.new(response[:success], response[:message], response, :test => test?, :authorization => response[:authorization])
137
+ end
138
+
139
+ def commit_transaction_setup(response, parameters)
140
+ response[:setup] = parse(ssl_get(build_url("REST/Setup.aspx", pick(parameters, :merchantId, :token, :serviceType, :amount, :currencyCode, :redirectUrl, :orderNumber, :transactionId))))
141
+ process(response, :setup)
142
+ end
143
+
144
+ def commit_payment_details(response, parameters)
145
+ data = encode(parameters[:creditcard].merge(:BBSePay_transaction => response[:setup]['SetupString']))
146
+ response[:paymentDetails] = parse(ssl_post(build_url("terminal/default.aspx"), data), false)
147
+ process(response, :paymentDetails)
148
+ end
149
+
150
+ def commit_process_setup(response, parameters)
151
+ result = ssl_get(build_url("REST/ProcessSetup.aspx", pick(parameters, :merchantId, :token, :transactionId).merge(:transactionString => response[:paymentDetails][:result])))
152
+ response[:processSetup] = parse(result)
153
+ process(response, :processSetup)
154
+ end
155
+
156
+ def commit_transaction(response, parameters)
157
+ result = ssl_get(build_url("REST/#{parameters[:action]}.aspx", pick(parameters, :merchantId, :token, :transactionId, :transactionAmount)))
158
+ response[:action] = parse(result)
159
+ process(response, :action)
160
+ end
161
+
162
+ def process(response, step)
163
+ if response[step][:container] =~ /Exception|Error/
164
+ response[:message] = response[step]['Message']
165
+ throw :exception
166
+ else
167
+ message = (response[step]['ResponseText'] || response[step]['ResponseCode'])
168
+ response[:message] = (message || response[:message])
169
+
170
+ response[:authorization] = response[step]['TransactionId']
171
+ end
172
+ end
173
+
174
+ def parse(result, expects_xml=true)
175
+ if expects_xml || /^</ =~ result
176
+ doc = REXML::Document.new(result)
177
+ extract_xml(doc.root).merge(:container => doc.root.name)
178
+ else
179
+ {:result => result}
180
+ end
181
+ end
182
+
183
+ def extract_xml(element)
184
+ if element.has_elements?
185
+ hash = {}
186
+ element.elements.each do |e|
187
+ hash[e.name] = extract_xml(e)
188
+ end
189
+ hash
190
+ else
191
+ element.text
192
+ end
193
+ end
194
+
195
+ def url
196
+ (test? ? TEST_URL : LIVE_URL)
197
+ end
198
+
199
+ def generate_transaction_id(options)
200
+ Digest::MD5.hexdigest("#{options.inspect}+#{Time.now}+#{rand}")
201
+ end
202
+
203
+ def pick(hash, *keys)
204
+ keys.inject({}){|h,key| h[key] = hash[key] if hash[key]; h}
205
+ end
206
+
207
+ def build_url(base, parameters=nil)
208
+ url = "#{test? ? TEST_URL : LIVE_URL}"
209
+ url << base
210
+ if parameters
211
+ url << '?'
212
+ url << encode(parameters)
213
+ end
214
+ url
215
+ end
216
+
217
+ def encode(hash)
218
+ hash.collect{|(k,v)| "#{URI.encode(k.to_s)}=#{URI.encode(v.to_s)}"}.join('&')
219
+ end
220
+
221
+ class Response < Billing::Response
222
+ attr_reader :error_detail
223
+ def initialize(success, message, raw, options)
224
+ super
225
+ unless success
226
+ @error_detail = raw[:processSetup]['Result']['ResponseText'] if raw[:processSetup] && raw[:processSetup]['Result']
227
+ end
228
+ end
229
+ end
230
+ end
231
+ end
232
+ end
233
+
@@ -187,7 +187,7 @@ module ActiveMerchant #:nodoc:
187
187
  response = parse( ssl_post(URL, request.to_s) )
188
188
 
189
189
  # Return a response
190
- PaymentExpressResponse.new(response[:success] == APPROVED, response[:response_text], response,
190
+ PaymentExpressResponse.new(response[:success] == APPROVED, response[:card_holder_help_text], response,
191
191
  :test => response[:test_mode] == '1',
192
192
  :authorization => response[:dps_txn_ref]
193
193
  )
@@ -102,10 +102,18 @@ module ActiveMerchant #:nodoc:
102
102
  xml.tag! 'n2:NoShipping', options[:no_shipping] ? '1' : '0'
103
103
  xml.tag! 'n2:ReturnURL', options[:return_url]
104
104
  xml.tag! 'n2:CancelURL', options[:cancel_return_url]
105
- xml.tag! 'n2:IPAddress', options[:ip]
105
+ xml.tag! 'n2:IPAddress', options[:ip] unless options[:ip].blank?
106
106
  xml.tag! 'n2:OrderDescription', options[:description]
107
107
  xml.tag! 'n2:BuyerEmail', options[:email] unless options[:email].blank?
108
108
  xml.tag! 'n2:InvoiceID', options[:order_id]
109
+
110
+ if options[:billing_agreement]
111
+ xml.tag! 'n2:BillingAgreementDetails' do
112
+ xml.tag! 'n2:BillingType', options[:billing_agreement][:type]
113
+ xml.tag! 'n2:BillingAgreementDescription', options[:billing_agreement][:description]
114
+ xml.tag! 'n2:PaymentType', options[:billing_agreement][:payment_type] || 'InstantOnly'
115
+ end
116
+ end
109
117
 
110
118
  # Customization of the payment page
111
119
  xml.tag! 'n2:PageStyle', options[:page_style] unless options[:page_style].blank?
@@ -48,6 +48,15 @@ module ActiveMerchant #:nodoc:
48
48
  def code(format)
49
49
  @codes.select{|c| c.format == format}
50
50
  end
51
+
52
+ def ==(other)
53
+ (@name == other.name)
54
+ end
55
+ alias eql? ==
56
+
57
+ def hash
58
+ @name.hash
59
+ end
51
60
 
52
61
  def to_s
53
62
  @name
@@ -67,7 +76,6 @@ module ActiveMerchant #:nodoc:
67
76
  { :alpha2 => 'AW', :name => 'Aruba', :alpha3 => 'ABW', :numeric => '533' },
68
77
  { :alpha2 => 'AU', :name => 'Australia', :alpha3 => 'AUS', :numeric => '036' },
69
78
  { :alpha2 => 'AT', :name => 'Austria', :alpha3 => 'AUT', :numeric => '040' },
70
- { :alpha2 => 'AX', :name => 'Åland Islands', :alpha3 => 'ALA', :numeric => '248' },
71
79
  { :alpha2 => 'AZ', :name => 'Azerbaijan', :alpha3 => 'AZE', :numeric => '031' },
72
80
  { :alpha2 => 'BS', :name => 'Bahamas', :alpha3 => 'BHS', :numeric => '044' },
73
81
  { :alpha2 => 'BH', :name => 'Bahrain', :alpha3 => 'BHR', :numeric => '048' },
@@ -84,8 +92,8 @@ module ActiveMerchant #:nodoc:
84
92
  { :alpha2 => 'BW', :name => 'Botswana', :alpha3 => 'BWA', :numeric => '072' },
85
93
  { :alpha2 => 'BV', :name => 'Bouvet Island', :alpha3 => 'BVD', :numeric => '074' },
86
94
  { :alpha2 => 'BR', :name => 'Brazil', :alpha3 => 'BRA', :numeric => '076' },
87
- { :alpha2 => 'BN', :name => 'Brunei Darussalam', :alpha3 => 'BRN', :numeric => '096' },
88
95
  { :alpha2 => 'IO', :name => 'British Indian Ocean Territory', :alpha3 => 'IOT', :numeric => '086' },
96
+ { :alpha2 => 'BN', :name => 'Brunei Darussalam', :alpha3 => 'BRN', :numeric => '096' },
89
97
  { :alpha2 => 'BG', :name => 'Bulgaria', :alpha3 => 'BGR', :numeric => '100' },
90
98
  { :alpha2 => 'BF', :name => 'Burkina Faso', :alpha3 => 'BFA', :numeric => '854' },
91
99
  { :alpha2 => 'BI', :name => 'Burundi', :alpha3 => 'BDI', :numeric => '108' },
@@ -142,15 +150,15 @@ module ActiveMerchant #:nodoc:
142
150
  { :alpha2 => 'GP', :name => 'Guadeloupe', :alpha3 => 'GLP', :numeric => '312' },
143
151
  { :alpha2 => 'GU', :name => 'Guam', :alpha3 => 'GUM', :numeric => '316' },
144
152
  { :alpha2 => 'GT', :name => 'Guatemala', :alpha3 => 'GTM', :numeric => '320' },
153
+ { :alpha2 => 'GG', :name => 'Guernsey', :alpha3 => 'GGY', :numeric => '831' },
145
154
  { :alpha2 => 'GN', :name => 'Guinea', :alpha3 => 'GIN', :numeric => '324' },
146
155
  { :alpha2 => 'GW', :name => 'Guinea-Bissau', :alpha3 => 'GNB', :numeric => '624' },
147
156
  { :alpha2 => 'GY', :name => 'Guyana', :alpha3 => 'GUY', :numeric => '328' },
148
- { :alpha2 => 'GG', :name => 'Guernsey', :alpha3 => 'GGY', :numeric => '831' },
149
157
  { :alpha2 => 'HT', :name => 'Haiti', :alpha3 => 'HTI', :numeric => '332' },
158
+ { :alpha2 => 'HM', :name => 'Heard Island And Mcdonald Islands', :alpha3 => 'HMD', :numeric => '334' },
150
159
  { :alpha2 => 'VA', :name => 'Holy See (Vatican City State)', :alpha3 => 'VAT', :numeric => '336' },
151
160
  { :alpha2 => 'HN', :name => 'Honduras', :alpha3 => 'HND', :numeric => '340' },
152
161
  { :alpha2 => 'HK', :name => 'Hong Kong', :alpha3 => 'HKG', :numeric => '344' },
153
- { :alpha2 => 'HM', :name => 'Heard Island And Mcdonald Islands', :alpha3 => 'HMD', :numeric => '334' },
154
162
  { :alpha2 => 'HU', :name => 'Hungary', :alpha3 => 'HUN', :numeric => '348' },
155
163
  { :alpha2 => 'IS', :name => 'Iceland', :alpha3 => 'ISL', :numeric => '352' },
156
164
  { :alpha2 => 'IN', :name => 'India', :alpha3 => 'IND', :numeric => '356' },
@@ -298,7 +306,8 @@ module ActiveMerchant #:nodoc:
298
306
  { :alpha2 => 'EH', :name => 'Western Sahara', :alpha3 => 'ESH', :numeric => '732' },
299
307
  { :alpha2 => 'YE', :name => 'Yemen', :alpha3 => 'YEM', :numeric => '887' },
300
308
  { :alpha2 => 'ZM', :name => 'Zambia', :alpha3 => 'ZMB', :numeric => '894' },
301
- { :alpha2 => 'ZW', :name => 'Zimbabwe', :alpha3 => 'ZWE', :numeric => '716' }
309
+ { :alpha2 => 'ZW', :name => 'Zimbabwe', :alpha3 => 'ZWE', :numeric => '716' },
310
+ { :alpha2 => 'AX', :name => 'Åland Islands', :alpha3 => 'ALA', :numeric => '248' }
302
311
  ]
303
312
 
304
313
  def self.find(name)
@@ -1,3 +1,3 @@
1
1
  module ActiveMerchant
2
- VERSION = "1.7.3"
2
+ VERSION = "1.8.0"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activemerchant
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 55
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
- - 7
9
- - 3
10
- version: 1.7.3
8
+ - 8
9
+ - 0
10
+ version: 1.8.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tobias Luetke
@@ -36,7 +36,7 @@ cert_chain:
36
36
  hPaSTyVU0yCSnw==
37
37
  -----END CERTIFICATE-----
38
38
 
39
- date: 2010-09-14 00:00:00 -04:00
39
+ date: 2010-09-24 00:00:00 -04:00
40
40
  default_executable:
41
41
  dependencies:
42
42
  - !ruby/object:Gem::Dependency
@@ -130,6 +130,7 @@ files:
130
130
  - lib/active_merchant/billing/gateways/first_pay.rb
131
131
  - lib/active_merchant/billing/gateways/garanti.rb
132
132
  - lib/active_merchant/billing/gateways/instapay.rb
133
+ - lib/active_merchant/billing/gateways/iridium.rb
133
134
  - lib/active_merchant/billing/gateways/jetpay.rb
134
135
  - lib/active_merchant/billing/gateways/linkpoint.rb
135
136
  - lib/active_merchant/billing/gateways/merchant_e_solutions.rb
@@ -138,6 +139,7 @@ files:
138
139
  - lib/active_merchant/billing/gateways/modern_payments_cim.rb
139
140
  - lib/active_merchant/billing/gateways/moneris.rb
140
141
  - lib/active_merchant/billing/gateways/net_registry.rb
142
+ - lib/active_merchant/billing/gateways/netaxept.rb
141
143
  - lib/active_merchant/billing/gateways/netbilling.rb
142
144
  - lib/active_merchant/billing/gateways/ogone.rb
143
145
  - lib/active_merchant/billing/gateways/pay_junction.rb
metadata.gz.sig CHANGED
Binary file