johnreitano-activemerchant 1.5.7 → 1.5.8
Sign up to get free protection for your applications and to get access to all the features.
@@ -54,7 +54,10 @@ module ActiveMerchant #:nodoc:
|
|
54
54
|
CIM_TRANSACTION_TYPES = {
|
55
55
|
:auth_capture => 'profileTransAuthCapture',
|
56
56
|
:auth_only => 'profileTransAuthOnly',
|
57
|
-
:capture_only => 'profileTransCaptureOnly'
|
57
|
+
:capture_only => 'profileTransCaptureOnly',
|
58
|
+
:prior_auth_capture => 'profileTransPriorAuthCapture',
|
59
|
+
:refund => 'profileTransRefund',
|
60
|
+
:void => 'profileTransVoid'
|
58
61
|
}
|
59
62
|
|
60
63
|
CIM_VALIDATION_MODES = {
|
@@ -299,7 +302,7 @@ module ActiveMerchant #:nodoc:
|
|
299
302
|
|
300
303
|
# Creates a new payment transaction from an existing customer profile
|
301
304
|
#
|
302
|
-
# This is what is used to charge a customer whose information you have stored in a Customer Profile.
|
305
|
+
# This is what is used to charge, authorize, void, or refund a customer whose information you have stored in a Customer Profile.
|
303
306
|
#
|
304
307
|
# Returns a Response object that contains the result of the transaction in <tt>params['direct_response']</tt>
|
305
308
|
#
|
@@ -309,14 +312,51 @@ module ActiveMerchant #:nodoc:
|
|
309
312
|
#
|
310
313
|
# ==== Transaction
|
311
314
|
#
|
312
|
-
# * <tt>:type</tt> -- The type of transaction. Can be either <tt>:auth_only</tt>, <tt>:capture_only</tt>, or <tt>:
|
313
|
-
# * <tt>:amount</tt> -- The amount for the tranaction. Formatted with a decimal. For example "4.95" (
|
314
|
-
#
|
315
|
-
#
|
315
|
+
# * <tt>:type</tt> -- The type of transaction. Can be either <tt>:auth_only</tt>, <tt>:capture_only</tt>, <tt>:auth_capture</tt>, <tt>:prior_auth_capture</tt>, <tt>:refund</tt> or <tt>:void</tt>. (REQUIRED)
|
316
|
+
# * <tt>:amount</tt> -- The amount for the tranaction. Formatted with a decimal. For example "4.95" (CONDITIONAL)
|
317
|
+
# - :type == :void (NOT USED)
|
318
|
+
# - :type == (:refund, :auth_only, :capture_only, :auth_capture, :prior_auth_capture) (REQUIRED)
|
319
|
+
#
|
320
|
+
# * <tt>:customer_profile_id</tt> -- The Customer Profile ID of the customer to use in this transaction. (CONDITIONAL)
|
321
|
+
# - :type == (:void, :prior_auth_capture) (OPTIONAL)
|
322
|
+
# - :type == :refund (CONDITIONAL - required if masked information is not being submitted [see below])
|
323
|
+
# - :type == (:auth_only, :capture_only, :auth_capture) (REQUIRED)
|
324
|
+
#
|
325
|
+
# * <tt>:customer_payment_profile_id</tt> -- The Customer Payment Profile ID of the Customer Payment Profile to use in this transaction. (CONDITIONAL)
|
326
|
+
# - :type == (:void, :prior_auth_capture) (OPTIONAL)
|
327
|
+
# - :type == :refund (CONDITIONAL - required if masked information is not being submitted [see below])
|
328
|
+
# - :type == (:auth_only, :capture_only, :auth_capture) (REQUIRED)
|
329
|
+
#
|
330
|
+
# * <tt>:trans_id</tt> -- The payment gateway assigned transaction ID of the original transaction (CONDITIONAL):
|
331
|
+
# - :type = (:void, :refund, :prior_auth_capture) (REQUIRED)
|
332
|
+
# - :type = (:auth_only, :capture_only, :auth_capture) (NOT USED)
|
333
|
+
#
|
334
|
+
# * <tt>customer_shipping_address_id</tt> -- Payment gateway assigned ID associated with the customer shipping address (CONDITIONAL)
|
335
|
+
# - :type = (:void, :refund) (OPTIONAL)
|
336
|
+
# - :type = (:auth_only, :capture_only, :auth_capture) (NOT USED)
|
337
|
+
# - :type = (:prior_auth_capture) (OPTIONAL)
|
338
|
+
#
|
339
|
+
# ==== For :type == :refund only
|
340
|
+
# * <tt>:credit_card_number_masked</tt> -- (CONDITIONAL - requied for credit card refunds is :customer_profile_id AND :customer_payment_profile_id are missing)
|
341
|
+
# * <tt>:bank_routing_number_masked && :bank_account_number_masked</tt> -- (CONDITIONAL - requied for electronic check refunds is :customer_profile_id AND :customer_payment_profile_id are missing) (NOT ABLE TO TEST - I keep getting "ACH transactions are not accepted by this merchant." when trying to make a payment and, until that's possible I can't refund (wiseleyb@gmail.com))
|
316
342
|
def create_customer_profile_transaction(options)
|
317
343
|
requires!(options, :transaction)
|
318
|
-
requires!(options[:transaction], :type
|
319
|
-
|
344
|
+
requires!(options[:transaction], :type)
|
345
|
+
case options[:transaction][:type]
|
346
|
+
when :void
|
347
|
+
requires!(options[:transaction], :trans_id)
|
348
|
+
when :refund
|
349
|
+
requires!(options[:transaction], :trans_id) &&
|
350
|
+
(
|
351
|
+
(options[:transaction][:customer_profile_id] && options[:transaction][:customer_payment_profile_id]) ||
|
352
|
+
options[:transaction][:credit_card_number_masked] ||
|
353
|
+
(options[:transaction][:bank_routing_number_masked] && options[:transaction][:bank_account_number_masked])
|
354
|
+
)
|
355
|
+
when :prior_auth_capture
|
356
|
+
requires!(options[:transaction], :amount, :trans_id)
|
357
|
+
else
|
358
|
+
requires!(options[:transaction], :amount, :customer_profile_id, :customer_payment_profile_id)
|
359
|
+
end
|
320
360
|
request = build_request(:create_customer_profile_transaction, options)
|
321
361
|
commit(:create_customer_profile_transaction, request)
|
322
362
|
end
|
@@ -502,10 +542,37 @@ module ActiveMerchant #:nodoc:
|
|
502
542
|
xml.tag!('transaction') do
|
503
543
|
xml.tag!(CIM_TRANSACTION_TYPES[transaction[:type]]) do
|
504
544
|
# The amount to be billed to the customer
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
545
|
+
case transaction[:type]
|
546
|
+
when :void
|
547
|
+
tag_unless_blank(xml,'customerProfileId', transaction[:customer_profile_id])
|
548
|
+
tag_unless_blank(xml,'customerPaymentProfileId', transaction[:customer_payment_profile_id])
|
549
|
+
tag_unless_blank(xml,'customerShippingAddressId', transaction[:customer_shipping_address_id])
|
550
|
+
xml.tag!('transId', transaction[:trans_id])
|
551
|
+
when :refund
|
552
|
+
#TODO - add support for all the other options fields
|
553
|
+
xml.tag!('amount', transaction[:amount])
|
554
|
+
tag_unless_blank(xml, 'customerProfileId', transaction[:customer_profile_id])
|
555
|
+
tag_unless_blank(xml, 'customerPaymentProfileId', transaction[:customer_payment_profile_id])
|
556
|
+
tag_unless_blank(xml, 'customerShippingAddressId', transaction[:customer_shipping_address_id])
|
557
|
+
tag_unless_blank(xml, 'creditCardNumberMasked', transaction[:credit_card_number_masked])
|
558
|
+
tag_unless_blank(xml, 'bankRoutingNumberMasked', transaction[:bank_routing_number_masked])
|
559
|
+
tag_unless_blank(xml, 'bankAccountNumberMasked', transaction[:bank_account_number_masked])
|
560
|
+
add_order(xml, transaction.delete(:order)) if transaction[:order]
|
561
|
+
xml.tag!('transId', transaction[:trans_id])
|
562
|
+
when :prior_auth_capture
|
563
|
+
xml.tag!('amount', transaction[:amount])
|
564
|
+
xml.tag!('transId', transaction[:trans_id])
|
565
|
+
when :capture_only
|
566
|
+
xml.tag!('amount', transaction[:amount])
|
567
|
+
xml.tag!('customerProfileId', transaction[:customer_profile_id])
|
568
|
+
xml.tag!('customerPaymentProfileId', transaction[:customer_payment_profile_id])
|
569
|
+
add_order(xml, transaction.delete(:order)) if transaction[:order]
|
570
|
+
xml.tag!('approvalCode', transaction[:approval_code])
|
571
|
+
else
|
572
|
+
xml.tag!('amount', transaction[:amount])
|
573
|
+
xml.tag!('customerProfileId', transaction[:customer_profile_id])
|
574
|
+
xml.tag!('customerPaymentProfileId', transaction[:customer_payment_profile_id])
|
575
|
+
end
|
509
576
|
add_order(xml, transaction[:order]) if transaction[:order]
|
510
577
|
end
|
511
578
|
end
|
@@ -645,9 +712,14 @@ module ActiveMerchant #:nodoc:
|
|
645
712
|
)
|
646
713
|
|
647
714
|
response.params['direct_response'] = parse_direct_response(response) if response.params['direct_response']
|
715
|
+
|
648
716
|
response
|
649
717
|
end
|
650
718
|
|
719
|
+
def tag_unless_blank(xml, tag_name, data)
|
720
|
+
xml.tag!(tag_name, data) unless data.blank? || data.nil?
|
721
|
+
end
|
722
|
+
|
651
723
|
def parse_direct_response(response)
|
652
724
|
direct_response = {'raw' => response.params['direct_response']}
|
653
725
|
direct_response_fields = response.params['direct_response'].split(',')
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: johnreitano-activemerchant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 1.5.
|
9
|
+
- 8
|
10
|
+
version: 1.5.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- John Reitano
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain:
|
17
17
|
- gem-public_cert.pem
|
18
|
-
date: 2010-07-
|
18
|
+
date: 2010-07-27 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|