activemerchant 1.51.0 → 1.52.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 410fa6679494b0904c1bff664722c9b23c907e06
4
- data.tar.gz: bf3827fcd65d592b51d9e5d06b28dfeec0e05ac2
3
+ metadata.gz: 1b14d2c1c73ff33e03eda050a96c1de86f89619a
4
+ data.tar.gz: 89f173df6f5343c3da814920e5b4006ca928204d
5
5
  SHA512:
6
- metadata.gz: 228a238436b76648adcfab724d7807fa75c1af50c5b975057da9461a64cf9863c1b1693c65e24ceb2250e9e3bebbadca189c7d07ff4bff9b45fcd79c2ae57d23
7
- data.tar.gz: 0922949cb3d6db73cbb74324ae57865f4eb72bcdafaba4ce4cbf468558b8d7f514dabe74cec344ca43f7a4e98906c8eff82195f604219ff851492aa5f7fadab5
6
+ metadata.gz: 9886654ba8fd2e3167ba753dc267fbe8ff585b8866b7201151b57e096a88cfb9e380a95f8ca95efa936b5d02a4965072318b3e29d60195c640a0f95ec17ca47d
7
+ data.tar.gz: 8b321b19d61ae62a920ebb55e3f70e267453bc8a73ee811f09ea162d16cea90124c384df699d1e43d6927096ddfc0777d982fd221a92f8b13a8901590ec1285e
data/CHANGELOG CHANGED
@@ -1,5 +1,25 @@
1
1
  = ActiveMerchant CHANGELOG
2
2
 
3
+ == Version 1.52.0 (July 20, 2015)
4
+
5
+ * Authorize.Net: Add device type to authorize.net retail requests [abecevello]
6
+ * Vanco: Change transaction type to WEB for echecks [duff]
7
+ * PayPal: Allow soft descriptor to be specified [davidsantoso]
8
+ * Authorize.net: Add disable_partial_auth field [anellis]
9
+ * SagePay: Add apply_avscv2 field [anellis]
10
+ * S5: Add Store [anellis]
11
+ * Merchant Ware v4: Add support for verify [davidsantoso]
12
+ * Mercury: No longer default to allow partial auth [duff]
13
+ * PayPal: Fix soft_descriptor and support soft_descriptor_city [duff]
14
+ * Merchant Ware: Add scrubbing [davidsantoso]
15
+ * Stripe: Make purchase via vaulted card consistent [duff]
16
+ * Moneris: Add network tokenization support [andrewpaliga]
17
+ * Ogone: Allow specifying a timeout value for requests [tomhipkin]
18
+ * PayU India: Increase allowed txnid to 30 characters [ntalbott]
19
+ * Authorize.Net: Allow passing device type through options, make wireless POS the default [abecevello]
20
+ * Authorize.Net: Update to new Akamai URL [taf2]
21
+ * Braintree: Add hold_in_escrow [anellis]
22
+ * Stripe: Allow purchases with tokens without customer specification [bizla]
3
23
 
4
24
  == Version 1.51.0 (July 2, 2015)
5
25
 
data/README.md CHANGED
@@ -146,6 +146,7 @@ The [ActiveMerchant Wiki](http://github.com/activemerchant/active_merchant/wikis
146
146
  * [Metrics Global](http://www.metricsglobal.com) - US
147
147
  * [MasterCard Internet Gateway Service (MiGS)](http://mastercard.com/mastercardsps) - AU, AE, BD, BN, EG, HK, ID, IN, JO, KW, LB, LK, MU, MV, MY, NZ, OM, PH, QA, SA, SG, TT, VN
148
148
  * [Modern Payments](http://www.modpay.com) - US
149
+ * [MONEI](http://www.monei.net/) - ES
149
150
  * [Moneris](http://www.moneris.com/) - CA
150
151
  * [Moneris (US)](http://www.monerisusa.com/) - US
151
152
  * [MoneyMovers](http://mmoa.us/) - US
@@ -72,6 +72,7 @@ module ActiveMerchant #:nodoc:
72
72
  # :incorrect_cvc - Secerity code was not matched by the processor
73
73
  # :incorrect_zip - Zip code is not in correct format
74
74
  # :incorrect_address - Billing address info was not matched by the processor
75
+ # :incorrect_pin - Card PIN is incorrect
75
76
  # :card_declined - Card number declined by processor
76
77
  # :processing_error - Processor error
77
78
  # :call_issuer - Transaction requires voice authentication, call issuer
@@ -86,6 +87,7 @@ module ActiveMerchant #:nodoc:
86
87
  :incorrect_cvc => 'incorrect_cvc',
87
88
  :incorrect_zip => 'incorrect_zip',
88
89
  :incorrect_address => 'incorrect_address',
90
+ :incorrect_pin => 'incorrect_pin',
89
91
  :card_declined => 'card_declined',
90
92
  :processing_error => 'processing_error',
91
93
  :call_issuer => 'call_issuer',
@@ -40,6 +40,19 @@ module ActiveMerchant #:nodoc:
40
40
  :retail => '2'
41
41
  }
42
42
 
43
+ DEVICE_TYPE = {
44
+ :unknown => '1',
45
+ :unattended_terminal => '2',
46
+ :self_service_terminal => '3',
47
+ :electronic_cash_register => '4',
48
+ :personal_computer_terminal => '5',
49
+ :airpay => '6',
50
+ :wireless_pos => '7',
51
+ :website => '8',
52
+ :dial_terminal => '9',
53
+ :virtual_terminal => '10'
54
+ }
55
+
43
56
  class_attribute :duplicate_window
44
57
 
45
58
  APPROVED, DECLINED, ERROR, FRAUD_REVIEW = 1, 2, 3, 4
@@ -204,7 +217,7 @@ module ActiveMerchant #:nodoc:
204
217
  add_payment_source(xml, payment)
205
218
  add_invoice(xml, options)
206
219
  add_customer_data(xml, payment, options)
207
- add_market_type(xml, payment)
220
+ add_market_type_device_type(xml, payment, options)
208
221
  add_settings(xml, payment, options)
209
222
  add_user_fields(xml, amount, options)
210
223
  end
@@ -327,6 +340,12 @@ module ActiveMerchant #:nodoc:
327
340
  xml.settingValue("true")
328
341
  end
329
342
  end
343
+ if options[:disable_partial_auth]
344
+ xml.setting do
345
+ xml.settingName("allowPartialAuth")
346
+ xml.settingValue("false")
347
+ end
348
+ end
330
349
  if options[:duplicate_window]
331
350
  set_duplicate_window(xml, options[:duplicate_window])
332
351
  elsif self.class.duplicate_window
@@ -407,11 +426,14 @@ module ActiveMerchant #:nodoc:
407
426
  end
408
427
  end
409
428
 
410
- def add_market_type(xml, payment)
429
+ def add_market_type_device_type(xml, payment, options)
411
430
  return if payment.is_a?(String) || card_brand(payment) == 'check' || card_brand(payment) == 'apple_pay'
412
431
  if valid_track_data
413
432
  xml.retail do
414
433
  xml.marketType(MARKET_TYPE[:retail])
434
+
435
+ device_type = options[:device_type] || DEVICE_TYPE[:wireless_pos]
436
+ xml.deviceType(device_type)
415
437
  end
416
438
  elsif payment.manual_entry
417
439
  xml.retail do
@@ -28,7 +28,7 @@ module ActiveMerchant #:nodoc:
28
28
  # 5. Click Submit
29
29
  class AuthorizeNetCimGateway < Gateway
30
30
  self.test_url = 'https://apitest.authorize.net/xml/v1/request.api'
31
- self.live_url = 'https://api.authorize.net/xml/v1/request.api'
31
+ self.live_url = 'https://api2.authorize.net/xml/v1/request.api'
32
32
 
33
33
  AUTHORIZE_NET_CIM_NAMESPACE = 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'
34
34
 
@@ -517,7 +517,8 @@ module ActiveMerchant #:nodoc:
517
517
  },
518
518
  :options => {
519
519
  :store_in_vault => options[:store] ? true : false,
520
- :submit_for_settlement => options[:submit_for_settlement]
520
+ :submit_for_settlement => options[:submit_for_settlement],
521
+ :hold_in_escrow => options[:hold_in_escrow]
521
522
  }
522
523
  }
523
524
 
@@ -2,7 +2,7 @@ module ActiveMerchant #:nodoc:
2
2
  module Billing #:nodoc:
3
3
  class MerchantWareVersionFourGateway < Gateway
4
4
  self.live_url = 'https://ps1.merchantware.net/Merchantware/ws/RetailTransaction/v4/Credit.asmx'
5
- self.test_url = 'https://staging.merchantware.net/Merchantware/ws/RetailTransaction/v4/Credit.asmx'
5
+ self.test_url = 'https://ps1.merchantware.net/Merchantware/ws/RetailTransaction/v4/Credit.asmx'
6
6
 
7
7
  self.supported_countries = ['US']
8
8
  self.supported_cardtypes = [:visa, :master, :american_express, :discover]
@@ -108,6 +108,24 @@ module ActiveMerchant #:nodoc:
108
108
  commit(:refund, request)
109
109
  end
110
110
 
111
+ def verify(credit_card, options={})
112
+ MultiResponse.run(:use_first_response) do |r|
113
+ r.process { authorize(100, credit_card, options) }
114
+ r.process(:ignore_result) { void(r.authorization, options) }
115
+ end
116
+ end
117
+
118
+ def supports_scrubbing?
119
+ true
120
+ end
121
+
122
+ def scrub(transcript)
123
+ transcript.
124
+ gsub(%r((<merchantKey>).+?(</merchantKey>))i, '\1[FILTERED]\2').
125
+ gsub(%r((<cardNumber>).+?(</cardNumber>))i, '\1[FILTERED]\2').
126
+ gsub(%r((<cardSecurityCode>).+?(</cardSecurityCode>))i, '\1[FILTERED]\2')
127
+ end
128
+
111
129
  private
112
130
 
113
131
  def soap_request(action)
@@ -90,7 +90,7 @@ module ActiveMerchant #:nodoc:
90
90
  xml.tag! "Transaction" do
91
91
  xml.tag! 'TranType', 'Credit'
92
92
  xml.tag! 'TranCode', action
93
- if action == 'PreAuth' || action == 'Sale'
93
+ if options[:allow_partial_auth] && (action == 'PreAuth' || action == 'Sale')
94
94
  xml.tag! "PartialAuth", "Allow"
95
95
  end
96
96
  add_invoice(xml, options[:order_id], nil, options)
@@ -113,7 +113,7 @@ module ActiveMerchant #:nodoc:
113
113
  xml.tag! "TStream" do
114
114
  xml.tag! "Transaction" do
115
115
  xml.tag! 'TranType', 'Credit'
116
- if action == 'PreAuthCapture'
116
+ if options[:allow_partial_auth] && (action == 'PreAuthCapture')
117
117
  xml.tag! "PartialAuth", "Allow"
118
118
  end
119
119
  xml.tag! 'TranCode', (@use_tokenization ? (action + "ByRecordNo") : action)
@@ -51,7 +51,13 @@ module ActiveMerchant #:nodoc:
51
51
  post[:order_id] = options[:order_id]
52
52
  post[:address] = options[:billing_address] || options[:address]
53
53
  post[:crypt_type] = options[:crypt_type] || @options[:crypt_type]
54
- action = (post[:data_key].blank?) ? 'preauth' : 'res_preauth_cc'
54
+ action = if post[:cavv]
55
+ 'cavv_preauth'
56
+ elsif post[:data_key].blank?
57
+ 'preauth'
58
+ else
59
+ 'res_preauth_cc'
60
+ end
55
61
  commit(action, post)
56
62
  end
57
63
 
@@ -67,7 +73,13 @@ module ActiveMerchant #:nodoc:
67
73
  post[:order_id] = options[:order_id]
68
74
  post[:address] = options[:billing_address] || options[:address]
69
75
  post[:crypt_type] = options[:crypt_type] || @options[:crypt_type]
70
- action = (post[:data_key].blank?) ? 'purchase' : 'res_purchase_cc'
76
+ action = if post[:cavv]
77
+ 'cavv_purchase'
78
+ elsif post[:data_key].blank?
79
+ 'purchase'
80
+ else
81
+ 'res_purchase_cc'
82
+ end
71
83
  commit(action, post)
72
84
  end
73
85
 
@@ -161,6 +173,7 @@ module ActiveMerchant #:nodoc:
161
173
  post[:pan] = source.number
162
174
  post[:expdate] = expdate(source)
163
175
  post[:cvd_value] = source.verification_value if source.verification_value?
176
+ post[:cavv] = source.payment_cryptogram if source.is_a?(NetworkTokenizationCreditCard)
164
177
  end
165
178
  post[:cust_id] = options[:customer] || source.name
166
179
  end
@@ -291,8 +304,8 @@ module ActiveMerchant #:nodoc:
291
304
  "indrefund" => [:order_id, :cust_id, :amount, :pan, :expdate, :crypt_type],
292
305
  "completion" => [:order_id, :comp_amount, :txn_number, :crypt_type],
293
306
  "purchasecorrection" => [:order_id, :txn_number, :crypt_type],
294
- "cavvpurcha" => [:order_id, :cust_id, :amount, :pan, :expdate, :cav],
295
- "cavvpreaut" => [:order_id, :cust_id, :amount, :pan, :expdate, :cavv],
307
+ "cavv_preauth" => [:order_id, :cust_id, :amount, :pan, :expdate, :cavv],
308
+ "cavv_purchase" => [:order_id, :cust_id, :amount, :pan, :expdate, :cavv],
296
309
  "transact" => [:order_id, :cust_id, :amount, :pan, :expdate, :crypt_type],
297
310
  "Batchcloseall" => [],
298
311
  "opentotals" => [:ecr_number],
@@ -335,6 +335,7 @@ module ActiveMerchant #:nodoc:
335
335
  end
336
336
 
337
337
  def commit(action, parameters)
338
+ add_pair parameters, 'RTIMEOUT', @options[:timeout] if @options[:timeout]
338
339
  add_pair parameters, 'PSPID', @options[:login]
339
340
  add_pair parameters, 'USERID', @options[:user]
340
341
  add_pair parameters, 'PSWD', @options[:password]
@@ -74,6 +74,7 @@ module ActiveMerchant #:nodoc:
74
74
  xml.tag! 'n2:' + transaction_type + 'RequestDetails' do
75
75
  xml.tag! 'n2:ReferenceID', reference_id if transaction_type == 'DoReferenceTransaction'
76
76
  xml.tag! 'n2:PaymentAction', action
77
+ add_descriptors(xml, options)
77
78
  add_payment_details(xml, money, currency_code, options)
78
79
  add_credit_card(xml, credit_card_or_referenced_id, billing_address, options) unless transaction_type == 'DoReferenceTransaction'
79
80
  xml.tag! 'n2:IPAddress', options[:ip]
@@ -110,6 +111,11 @@ module ActiveMerchant #:nodoc:
110
111
  end
111
112
  end
112
113
 
114
+ def add_descriptors(xml, options)
115
+ xml.tag! 'n2:SoftDescriptor', options[:soft_descriptor] unless options[:soft_descriptor].blank?
116
+ xml.tag! 'n2:SoftDescriptorCity', options[:soft_descriptor_city] unless options[:soft_descriptor_city].blank?
117
+ end
118
+
113
119
  def credit_card_type(type)
114
120
  case type
115
121
  when 'visa' then 'Visa'
@@ -604,9 +604,9 @@ module ActiveMerchant #:nodoc:
604
604
 
605
605
  def add_express_only_payment_details(xml, options = {})
606
606
  add_optional_fields(xml,
607
- %w{n2:NoteText n2:SoftDescriptor
607
+ %w{n2:NoteText n2:PaymentAction
608
608
  n2:TransactionId n2:AllowedPaymentMethodType
609
- n2:PaymentRequestID n2:PaymentAction},
609
+ n2:PaymentRequestID },
610
610
  options)
611
611
  end
612
612
 
@@ -124,7 +124,7 @@ module ActiveMerchant #:nodoc:
124
124
  def add_invoice(post, money, options)
125
125
  post[:amount] = amount(money)
126
126
 
127
- post[:txnid] = clean(options[:order_id], :alphanumeric, 25)
127
+ post[:txnid] = clean(options[:order_id], :alphanumeric, 30)
128
128
  post[:productinfo] = clean(options[:description] || "Purchase", nil, 100)
129
129
 
130
130
  post[:surl] = "http://example.com"
@@ -19,6 +19,7 @@ module ActiveMerchant #:nodoc:
19
19
  'capture' => 'CC.CP',
20
20
  'refund' => 'CC.RF',
21
21
  'void' => 'CC.RV',
22
+ 'store' => 'CC.RG'
22
23
  }
23
24
 
24
25
  def initialize(options={})
@@ -75,6 +76,16 @@ module ActiveMerchant #:nodoc:
75
76
  commit(request)
76
77
  end
77
78
 
79
+ def store(payment, options = {})
80
+ request = build_xml_request do |xml|
81
+ xml.Payment(code: SUPPORTED_TRANSACTIONS["store"])
82
+ add_account(xml, payment)
83
+ add_customer(xml, payment, options)
84
+ end
85
+
86
+ commit(request)
87
+ end
88
+
78
89
  def verify(credit_card, options={})
79
90
  MultiResponse.run(:use_first_response) do |r|
80
91
  r.process { authorize(100, credit_card, options) }
@@ -82,6 +93,7 @@ module ActiveMerchant #:nodoc:
82
93
  end
83
94
  end
84
95
 
96
+
85
97
  def supports_scrubbing?
86
98
  true
87
99
  end
@@ -112,17 +124,22 @@ module ActiveMerchant #:nodoc:
112
124
  end
113
125
  end
114
126
 
115
- def add_account(xml, creditcard)
116
- xml.Account do
117
- xml.Number creditcard.number
118
- xml.Holder "#{creditcard.first_name} #{creditcard.last_name}"
119
- xml.Brand creditcard.brand
120
- xml.Expiry(year: creditcard.year, month: creditcard.month)
121
- xml.Verification creditcard.verification_value
127
+ def add_account(xml, payment_method)
128
+ if !payment_method.respond_to?(:number)
129
+ xml.Account(registration: payment_method)
130
+ else
131
+ xml.Account do
132
+ xml.Number payment_method.number
133
+ xml.Holder "#{payment_method.first_name} #{payment_method.last_name}"
134
+ xml.Brand payment_method.brand
135
+ xml.Expiry(year: payment_method.year, month: payment_method.month)
136
+ xml.Verification payment_method.verification_value
137
+ end
122
138
  end
123
139
  end
124
140
 
125
141
  def add_customer(xml, creditcard, options)
142
+ return unless creditcard.respond_to?(:number)
126
143
  address = options[:billing_address]
127
144
  xml.Customer do
128
145
  xml.Contact do
@@ -187,6 +187,7 @@ module ActiveMerchant #:nodoc:
187
187
 
188
188
  def add_optional_data(post, options)
189
189
  add_pair(post, :GiftAidPayment, options[:gift_aid_payment]) unless options[:gift_aid_payment].blank?
190
+ add_pair(post, :ApplyAVSCV2, options[:apply_avscv2]) unless options[:apply_avscv2].blank?
190
191
  add_pair(post, :Apply3DSecure, options[:apply_3d_secure]) unless options[:apply_3d_secure].blank?
191
192
  add_pair(post, :CreateToken, 1) unless options[:store].blank?
192
193
  add_pair(post, :FIRecipientAcctNumber, options[:recipient_account_number])
@@ -43,7 +43,8 @@ module ActiveMerchant #:nodoc:
43
43
  'incorrect_zip' => STANDARD_ERROR_CODE[:incorrect_zip],
44
44
  'card_declined' => STANDARD_ERROR_CODE[:card_declined],
45
45
  'call_issuer' => STANDARD_ERROR_CODE[:call_issuer],
46
- 'processing_error' => STANDARD_ERROR_CODE[:processing_error]
46
+ 'processing_error' => STANDARD_ERROR_CODE[:processing_error],
47
+ 'incorrect_pin' => STANDARD_ERROR_CODE[:incorrect_pin]
47
48
  }
48
49
 
49
50
  def initialize(options = {})
@@ -187,17 +188,16 @@ module ActiveMerchant #:nodoc:
187
188
  commit(:post, "customers/#{CGI.escape(customer_id)}", options, options)
188
189
  end
189
190
 
190
- def unstore(customer_id, options = {}, deprecated_options = {})
191
+ def unstore(identification, options = {}, deprecated_options = {})
192
+ customer_id, card_id = identification.split("|")
193
+
191
194
  if options.kind_of?(String)
192
- ActiveMerchant.deprecated "Passing the card_id as the 2nd parameter is deprecated. Put it in the options hash instead."
193
- options = deprecated_options.merge(card_id: options)
195
+ ActiveMerchant.deprecated "Passing the card_id as the 2nd parameter is deprecated. The response authorization includes both the customer_id and the card_id."
196
+ card_id ||= options
197
+ options = deprecated_options
194
198
  end
195
199
 
196
- if options[:card_id]
197
- commit(:delete, "customers/#{CGI.escape(customer_id)}/cards/#{CGI.escape(options[:card_id])}", nil, options)
198
- else
199
- commit(:delete, "customers/#{CGI.escape(customer_id)}", nil, options)
200
- end
200
+ commit(:delete, "customers/#{CGI.escape(customer_id)}/cards/#{CGI.escape(card_id)}", nil, options)
201
201
  end
202
202
 
203
203
  def tokenize_apple_pay_token(apple_pay_payment_token, options = {})
@@ -243,6 +243,7 @@ module ActiveMerchant #:nodoc:
243
243
  else
244
244
  add_creditcard(post, payment, options)
245
245
  end
246
+
246
247
  unless emv_payment?(payment)
247
248
  add_amount(post, money, options, true)
248
249
  add_customer_data(post, options)
@@ -309,6 +310,7 @@ module ActiveMerchant #:nodoc:
309
310
  if creditcard.respond_to?(:track_data) && creditcard.track_data.present?
310
311
  card[:swipe_data] = creditcard.track_data
311
312
  card[:fallback_reason] = creditcard.fallback_reason if creditcard.fallback_reason
313
+ card[:read_method] = "contactless" if creditcard.contactless
312
314
  else
313
315
  card[:number] = creditcard.number
314
316
  card[:exp_month] = creditcard.month
@@ -329,6 +331,10 @@ module ActiveMerchant #:nodoc:
329
331
  elsif creditcard.kind_of?(String)
330
332
  if options[:track_data]
331
333
  card[:swipe_data] = options[:track_data]
334
+ elsif creditcard.include?("|")
335
+ customer_id, card_id = creditcard.split("|")
336
+ card = card_id
337
+ post[:customer] = customer_id
332
338
  else
333
339
  card = creditcard
334
340
  end
@@ -345,7 +351,10 @@ module ActiveMerchant #:nodoc:
345
351
  end
346
352
 
347
353
  def add_customer(post, payment, options)
348
- post[:customer] = options[:customer] if options[:customer] && !payment.respond_to?(:number)
354
+ if options[:customer] && !payment.respond_to?(:number)
355
+ ActiveMerchant.deprecated "Passing the customer in the options is deprecated. Just use the response.authorization instead."
356
+ post[:customer] = options[:customer]
357
+ end
349
358
  end
350
359
 
351
360
  def add_flags(post, options)
@@ -436,7 +445,7 @@ module ActiveMerchant #:nodoc:
436
445
  success ? "Transaction approved" : response["error"]["message"],
437
446
  response,
438
447
  :test => response.has_key?("livemode") ? !response["livemode"] : false,
439
- :authorization => success ? response["id"] : response["error"]["charge"],
448
+ :authorization => authorization_from(success, url, method, response),
440
449
  :avs_result => { :code => avs_code },
441
450
  :cvv_result => cvc_code,
442
451
  :emv_authorization => emv_authorization_from_response(response),
@@ -444,6 +453,18 @@ module ActiveMerchant #:nodoc:
444
453
  )
445
454
  end
446
455
 
456
+ def authorization_from(success, url, method, response)
457
+ return response["error"]["charge"] unless success
458
+
459
+ if url == "customers"
460
+ [response["id"], response["sources"]["data"].first["id"]].join("|")
461
+ elsif method == :post && url.match(/customers\/.*\/cards/)
462
+ [response["customer"], response["id"]].join("|")
463
+ else
464
+ response["id"]
465
+ end
466
+ end
467
+
447
468
  def response_error(raw_response)
448
469
  begin
449
470
  parse(raw_response)
@@ -223,7 +223,7 @@ module ActiveMerchant
223
223
  doc.CustomerName("#{echeck.last_name}, #{echeck.first_name}")
224
224
  doc.AccountNumber(echeck.account_number)
225
225
  doc.RoutingNumber(echeck.routing_number)
226
- doc.TransactionTypeCode("TEL")
226
+ doc.TransactionTypeCode("WEB")
227
227
  end
228
228
 
229
229
  def add_purchase_noise(doc)
@@ -1,3 +1,3 @@
1
1
  module ActiveMerchant
2
- VERSION = "1.51.0"
2
+ VERSION = "1.52.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activemerchant
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.51.0
4
+ version: 1.52.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Luetke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-02 00:00:00.000000000 Z
11
+ date: 2015-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport