activemerchant 1.81.0 → 1.82.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9a3a23a8a15d84e0c61a12458a7198886b2ab517
4
- data.tar.gz: 256e0471468a250883d3b57eb8af909c4ae20a94
3
+ metadata.gz: 1bde5a09cd6310799e9c99a524dee8794f7cd8b4
4
+ data.tar.gz: 7e6b12456471b40677f716aadfd73a58059e9dc6
5
5
  SHA512:
6
- metadata.gz: 95115d4f69d651b30e3129af8bb20b37af280d4de58c3b4a9fa29954c5bc605b4c0226c3555d08ec2c7f2b41b7cdae16081f634199adf22e5caa69605d733ceb
7
- data.tar.gz: b711f96170b72145fa4ef79b79778c26c4396a0d51fdfb4af1aaeb7e05a56a7dd7c8a9bd8f03fe4ac3cf08a3a86944c9925a373206ff34a937526c2f4db305e8
6
+ metadata.gz: '059ecb8a37d8b7fc83efdf0a575a59c5c2d5ddc14da4d7d9610500f7c52400177dfe76cf88abfa4021bdd4f2fc8aa9564dc4b04ecb7072e9543da59589f6997e'
7
+ data.tar.gz: e339a4da14fdc7a0c7d746946452aea9d512c0ce6b8bc5b294d5aff0b8c1cbabb40f495ec240a8d9a878ff65409b01e3bde20d3657efa189d32ff2b7563d3c18
data/CHANGELOG CHANGED
@@ -1,6 +1,15 @@
1
1
  = ActiveMerchant CHANGELOG
2
2
 
3
3
  == HEAD
4
+ == Version 1.82.0 (August 13, 2018)
5
+ * FirstData: add support for WalletProviderID in v27 gateway [bpollack] #2946
6
+ * BlueSnap: Handle 403 responses [curiousepic] #2948
7
+ * BlueSnap: Add StoreCard Field [nfarve] #2953
8
+ * Worldpay: support installments [bpollack] #2957
9
+ * Paymentez: support partial refunds [bpollack] #2959
10
+ * Payflow: allow support for partial captures [pi3r] #2952
11
+
12
+ == Version 1.81.0 (July 30, 2018)
4
13
  * GlobalCollect: Don't overwrite contactDetails [curiousepic] #2915
5
14
  * Pin Payments: Pass reference for statement desc [curiousepic] #2919
6
15
  * FirstData: introduce v27 gateway [shasum] #2912
@@ -116,7 +116,7 @@ module ActiveMerchant
116
116
 
117
117
  def verify_credentials
118
118
  begin
119
- ssl_get("#{url}/nonexistent", headers)
119
+ ssl_get(url.to_s, headers)
120
120
  rescue ResponseError => e
121
121
  return false if e.response.code.to_i == 401
122
122
  end
@@ -140,6 +140,7 @@ module ActiveMerchant
140
140
  def add_auth_purchase(doc, money, payment_method, options)
141
141
  doc.send('recurring-transaction', options[:recurring] ? 'RECURRING' : 'ECOMMERCE')
142
142
  add_order(doc, options)
143
+ doc.send('storeCard', options[:store_card] || false)
143
144
  add_amount(doc, money, options)
144
145
  doc.send('transaction-fraud-info') do
145
146
  doc.send('shopper-ip-address', options[:ip]) if options[:ip]
@@ -209,6 +210,7 @@ module ActiveMerchant
209
210
 
210
211
  def parse(response)
211
212
  return bad_authentication_response if response.code.to_i == 401
213
+ return forbidden_response(response.body) if response.code.to_i == 403
212
214
 
213
215
  parsed = {}
214
216
  doc = Nokogiri::XML(response.body)
@@ -338,6 +340,10 @@ module ActiveMerchant
338
340
  def bad_authentication_response
339
341
  { 'description' => 'Unable to authenticate. Please check your credentials.' }
340
342
  end
343
+
344
+ def forbidden_response(body)
345
+ { 'description' => body }
346
+ end
341
347
  end
342
348
  end
343
349
  end
@@ -211,6 +211,7 @@ module ActiveMerchant #:nodoc:
211
211
  xml.tag! 'Expiry_Date', expdate(credit_card)
212
212
  xml.tag! 'CardHoldersName', credit_card.name
213
213
  xml.tag! 'CardType', card_type(credit_card.brand)
214
+ xml.tag! 'WalletProviderID', options[:wallet_provider_id] if options[:wallet_provider_id]
214
215
 
215
216
  add_credit_card_eci(xml, credit_card, options)
216
217
  add_credit_card_verification_strings(xml, credit_card, options)
@@ -273,6 +274,7 @@ module ActiveMerchant #:nodoc:
273
274
  xml.tag! 'Expiry_Date', expdate(credit_card)
274
275
  xml.tag! 'CardHoldersName', credit_card.name
275
276
  xml.tag! 'CardType', card_type(credit_card.brand)
277
+ xml.tag! 'WalletProviderID', options[:wallet_provider_id] if options[:wallet_provider_id]
276
278
  add_card_authentication_data(xml, options)
277
279
  end
278
280
 
@@ -398,9 +400,9 @@ module ActiveMerchant #:nodoc:
398
400
  end
399
401
 
400
402
  def message_from(response)
401
- if(response[:faultcode] && response[:faultstring])
403
+ if response[:faultcode] && response[:faultstring]
402
404
  response[:faultstring]
403
- elsif(response[:error_number] && response[:error_number] != '0')
405
+ elsif response[:error_number] && response[:error_number] != '0'
404
406
  response[:error_description]
405
407
  else
406
408
  result = (response[:exact_message] || '')
@@ -119,6 +119,11 @@ module ActiveMerchant #:nodoc:
119
119
  xml.tag!('Description', options[:description]) unless options[:description].blank?
120
120
  xml.tag!('Comment', options[:comment]) unless options[:comment].blank?
121
121
  xml.tag!('ExtData', 'Name'=> 'COMMENT2', 'Value'=> options[:comment2]) unless options[:comment2].blank?
122
+ xml.tag!(
123
+ 'ExtData',
124
+ 'Name' => 'CAPTURECOMPLETE',
125
+ 'Value' => options[:capture_complete]
126
+ ) unless options[:capture_complete].blank?
122
127
  end
123
128
  end
124
129
  end
@@ -9,9 +9,7 @@ module ActiveMerchant #:nodoc:
9
9
  # in the docs that they recommend you pass the exact same parameters to both setup and authorize/purchase.
10
10
  #
11
11
  # This information was gleaned from a mix of:
12
- # * PayFlow documentation
13
- # * for key value pairs: {Express Checkout for Payflow Pro (PDF)}[https://cms.paypal.com/cms_content/US/en_US/files/developer/PFP_ExpressCheckout_PP.pdf]
14
- # * XMLPay: {Payflow Pro XMLPay Developer's Guide (PDF)}[https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_PayflowPro_XMLPay_Guide.pdf]
12
+ # * {PayFlow documentation}[https://developer.paypal.com/docs/classic/payflow/integration-guide/]
15
13
  # * previous ActiveMerchant code
16
14
  # * trial & error
17
15
  #
@@ -221,4 +219,3 @@ module ActiveMerchant #:nodoc:
221
219
  end
222
220
  end
223
221
  end
224
-
@@ -76,8 +76,11 @@ module ActiveMerchant #:nodoc:
76
76
  commit_transaction('capture', post)
77
77
  end
78
78
 
79
- def refund(_money, authorization, options = {})
80
- void(authorization, options)
79
+ def refund(money, authorization, options = {})
80
+ post = {transaction: {id: authorization}}
81
+ post[:order] = {amount: amount(money).to_f} if money
82
+
83
+ commit_transaction('refund', post)
81
84
  end
82
85
 
83
86
  def void(authorization, _options = {})
@@ -168,6 +168,9 @@ module ActiveMerchant #:nodoc:
168
168
  if options[:hcg_additional_data]
169
169
  add_hcg_additional_data(xml, options)
170
170
  end
171
+ if options[:instalments]
172
+ add_instalments_data(xml, options)
173
+ end
171
174
  end
172
175
  end
173
176
  end
@@ -292,6 +295,13 @@ module ActiveMerchant #:nodoc:
292
295
  end
293
296
  end
294
297
 
298
+ def add_instalments_data(xml, options)
299
+ xml.tag! 'thirdPartyData' do
300
+ xml.tag! 'instalments', options[:instalments]
301
+ xml.tag! 'cpf', options[:cpf] if options[:cpf]
302
+ end
303
+ end
304
+
295
305
  def address_with_defaults(address)
296
306
  address ||= {}
297
307
  address.delete_if { |_, v| v.blank? }
@@ -370,7 +380,7 @@ module ActiveMerchant #:nodoc:
370
380
  def handle_response(response)
371
381
  case response.code.to_i
372
382
  when 200...300
373
- @cookie = response.response['Set-Cookie']
383
+ @cookie = response['Set-Cookie']
374
384
  response.body
375
385
  else
376
386
  raise ResponseError.new(response)
@@ -1,3 +1,3 @@
1
1
  module ActiveMerchant
2
- VERSION = '1.81.0'
2
+ VERSION = '1.82.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.81.0
4
+ version: 1.82.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: 2018-08-03 00:00:00.000000000 Z
11
+ date: 2018-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport