activemerchant 1.54.0 → 1.55.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 +4 -4
- data/CHANGELOG +51 -0
- data/CONTRIBUTORS +24 -0
- data/README.md +8 -2
- data/lib/active_merchant/billing/base.rb +11 -22
- data/lib/active_merchant/billing/credit_card.rb +24 -1
- data/lib/active_merchant/billing/gateway.rb +18 -8
- data/lib/active_merchant/billing/gateways/allied_wallet.rb +1 -1
- data/lib/active_merchant/billing/gateways/authorize_net.rb +12 -14
- data/lib/active_merchant/billing/gateways/blue_pay.rb +3 -2
- data/lib/active_merchant/billing/gateways/bogus.rb +63 -17
- data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +1 -1
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +19 -10
- data/lib/active_merchant/billing/gateways/cams.rb +230 -0
- data/lib/active_merchant/billing/gateways/card_stream.rb +1 -1
- data/lib/active_merchant/billing/gateways/clearhaus.rb +238 -0
- data/lib/active_merchant/billing/gateways/creditcall.rb +1 -1
- data/lib/active_merchant/billing/gateways/cyber_source.rb +1 -0
- data/lib/active_merchant/billing/gateways/elavon.rb +21 -18
- data/lib/active_merchant/billing/gateways/eway_rapid.rb +7 -7
- data/lib/active_merchant/billing/gateways/ezic.rb +2 -12
- data/lib/active_merchant/billing/gateways/firstdata_e4.rb +15 -9
- data/lib/active_merchant/billing/gateways/forte.rb +32 -21
- data/lib/active_merchant/billing/gateways/inspire.rb +1 -1
- data/lib/active_merchant/billing/gateways/jetpay.rb +141 -38
- data/lib/active_merchant/billing/gateways/komoju.rb +115 -0
- data/lib/active_merchant/billing/gateways/litle.rb +7 -3
- data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +1 -1
- data/lib/active_merchant/billing/gateways/micropayment.rb +18 -14
- data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +1 -3
- data/lib/active_merchant/billing/gateways/monei.rb +1 -1
- data/lib/active_merchant/billing/gateways/netbilling.rb +10 -11
- data/lib/active_merchant/billing/gateways/omise.rb +2 -2
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +3 -2
- data/lib/active_merchant/billing/gateways/orbital.rb +1 -0
- data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +1 -1
- data/lib/active_merchant/billing/gateways/paybox_direct.rb +2 -1
- data/lib/active_merchant/billing/gateways/payeezy.rb +238 -0
- data/lib/active_merchant/billing/gateways/payflow.rb +16 -3
- data/lib/active_merchant/billing/gateways/paymill.rb +101 -44
- data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +2 -2
- data/lib/active_merchant/billing/gateways/paypal_express.rb +8 -0
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +1 -1
- data/lib/active_merchant/billing/gateways/sage_pay.rb +6 -14
- data/lib/active_merchant/billing/gateways/secure_net.rb +3 -4
- data/lib/active_merchant/billing/gateways/securion_pay.rb +238 -0
- data/lib/active_merchant/billing/gateways/stripe.rb +9 -7
- data/lib/active_merchant/billing/gateways/swipe_checkout.rb +1 -2
- data/lib/active_merchant/billing/gateways/tns.rb +2 -8
- data/lib/active_merchant/billing/gateways/transact_pro.rb +224 -0
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +2 -2
- data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +5 -7
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +12 -11
- data/lib/active_merchant/billing/gateways/vanco.rb +8 -3
- data/lib/active_merchant/billing/gateways/viaklix.rb +1 -9
- data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +22 -8
- data/lib/active_merchant/posts_data.rb +2 -2
- data/lib/active_merchant/version.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7e8d9130eaadeedc543af0a5b2cf5b060a2f1399
|
|
4
|
+
data.tar.gz: 868d04daf3f0dbd97f7f87adb0d96add9e868a57
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c079b666da79f7f8e77f47ca08003f2712a5daefb801b927454234c9c25f7b1b7d311e63b9432f758dcbb1594d111a323a8606e8636d50cd45da33a87cc35434
|
|
7
|
+
data.tar.gz: 0c77b4dbbf7f9f8b3bcbb5e1ae1bbc9af213cab749a0690b1337d46772813043dc65aefb2cc816b86c26dd8fe42cf53b0ce11cb93de53587bc2af3b55b6ecd49
|
data/CHANGELOG
CHANGED
|
@@ -1,6 +1,57 @@
|
|
|
1
1
|
= ActiveMerchant CHANGELOG
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
== Version 1.55.0 (November 9, 2015)
|
|
5
|
+
* CyberSource: send customer IP address when provided [fastjames]
|
|
6
|
+
* Braintree: Simplify Braintree scrubbing when no transcript [duff]
|
|
7
|
+
* AuthorizeNet: Allow market_type override [duff]
|
|
8
|
+
* FirstData_e4: Support level_2 data [duff]
|
|
9
|
+
* FirstData_e4: Fix level_2 and level_3 [duff]
|
|
10
|
+
* MerchantWareFour: Use Void not PreAuthorizationVoid [duff]
|
|
11
|
+
* JetPay: Allow partial captures [duff]
|
|
12
|
+
* Creditcall: Fix production url [duff]
|
|
13
|
+
* FirstData_e4: Fix float error in Void [duff]
|
|
14
|
+
* Micropayment: Upgrade to new API [mrezentes]
|
|
15
|
+
* Netbilling: Add order_id to user_info [mrezentes]
|
|
16
|
+
* Stripe: scrub swipe/track, EMV data out of gateway transcripts [girasquid]
|
|
17
|
+
* Remove integration_mode [mattfawcett]
|
|
18
|
+
* Allow setting CVV requirement at instance level [fabiokr]
|
|
19
|
+
* Add SecurionPay gateway [szajbus]
|
|
20
|
+
* AuthorizeNet: Don't send currency to void [duff]
|
|
21
|
+
* Add Komoju gateway [k2nr]
|
|
22
|
+
* Replace Connection magic numbers with constant references [larrylv]
|
|
23
|
+
* Add CAMS gateway [trevorgrayson]
|
|
24
|
+
* PayPal Express: Fix AllowedPaymentMethod [edclements]
|
|
25
|
+
* Litle: Store credit card from PayPage [dontmatta]
|
|
26
|
+
* Orbital: Deprecate profile management API [ntalbott]
|
|
27
|
+
* FirstData e4: Honor currency when supplied [tchill]
|
|
28
|
+
* Authorize.net: Add config_error standard error code [andrewpaliga]
|
|
29
|
+
* PayPal Express: Add support for TotalType in SetExpressCheckout [gingerhendrix]
|
|
30
|
+
* eWay Rapid: Add :invoice option [DylanFM]
|
|
31
|
+
* Braintree: Add nonce payment method [eric1234,cwoodcox]
|
|
32
|
+
* Payflow: Allow passing of 3D Secure details via options [marquisong]
|
|
33
|
+
* Elavon: Support capture via CCCOMPLETE without credit card [marquisong]
|
|
34
|
+
* Securenet: Allow setting test_mode independently [wedstar]
|
|
35
|
+
* Replace Base.integration_mode and Base.gateway_mode with just Base.mode [aprofeit]
|
|
36
|
+
* Micropayment: Allow specification of a project [duff]
|
|
37
|
+
* QuickpayV10: Truncate order_id [duff]
|
|
38
|
+
* FirstData_e4: Fix Level 2 data [duff]
|
|
39
|
+
* Remove some duplication around name handling [duff]
|
|
40
|
+
* FirstData_e4: Support Tax1Number [duff]
|
|
41
|
+
* Add Transact Pro gateway [varyonic]
|
|
42
|
+
* Add Payeezy gateway [huoxito]
|
|
43
|
+
* USAePay: Add test mode setting via options [marquisong]
|
|
44
|
+
* Add Clearhaus gateway [dinesh]
|
|
45
|
+
* WorldpayOnlinePayments: Fix logic to determine success [ao]
|
|
46
|
+
* Paymill: store order_id in description field [nikoloff]
|
|
47
|
+
* TWD isn't a zero decimal currency [duff]
|
|
48
|
+
* PaypalExpress: Use custom zero decimal currencies [duff]
|
|
49
|
+
* Stripe: Migrate from /refund to /refunds [matthelm]
|
|
50
|
+
* Bogus: Adding basic EMV support [ryanbalsdon]
|
|
51
|
+
* PayBox Direct: Refunds and working test credentials [ivanfer]
|
|
52
|
+
* Vanco: Handle case of no billing_address [duff]
|
|
53
|
+
* BluePay: Add support for CUSTOM_ID2 field [ajporterfield]
|
|
54
|
+
|
|
4
55
|
== Version 1.54.0 (October 2, 2015)
|
|
5
56
|
* Beanstream: Add Network Tokenization support [girasquid]
|
|
6
57
|
* CenPOS: Allow order_id on void [duff]
|
data/CONTRIBUTORS
CHANGED
|
@@ -538,3 +538,27 @@ Worldpay Online Payments (April 2015)
|
|
|
538
538
|
PayU India (May 2015)
|
|
539
539
|
|
|
540
540
|
* Nathaniel Talbott (ntalbott)
|
|
541
|
+
|
|
542
|
+
SecurionPay (October 2015)
|
|
543
|
+
|
|
544
|
+
* Michał Szajbe (szajbus)
|
|
545
|
+
|
|
546
|
+
Komoju (October 2015)
|
|
547
|
+
|
|
548
|
+
* Kazunori Kajihiro (k2nr)
|
|
549
|
+
|
|
550
|
+
CAMS: Central Account Management System (October 2015)
|
|
551
|
+
|
|
552
|
+
* Trevor Grayson (trevorgrayson)
|
|
553
|
+
|
|
554
|
+
Transact Pro (October 2015)
|
|
555
|
+
|
|
556
|
+
* Piers C (varyonic)
|
|
557
|
+
|
|
558
|
+
Payeezy (October 2015)
|
|
559
|
+
|
|
560
|
+
* Washington L Braga Jr (huoxito)
|
|
561
|
+
|
|
562
|
+
Clearhaus (October 2015)
|
|
563
|
+
|
|
564
|
+
* Dinesh Yadav (dinesh)
|
data/README.md
CHANGED
|
@@ -102,8 +102,10 @@ The [ActiveMerchant Wiki](http://github.com/activemerchant/active_merchant/wikis
|
|
|
102
102
|
* [Cashnet](http://www.higherone.com/) - US
|
|
103
103
|
* [Cecabank](http://www.ceca.es/es/) - ES
|
|
104
104
|
* [Cenpos](https://www.cenpos.com/) - AD, AI, AG, AR, AU, AT, BS, BB, BE, BZ, BM, BR, BN, BG, CA, HR, CY, CZ, DK, DM, EE, FI, FR, DE, GR, GD, GY, HK, HU, IS, IN, IL, IT, JP, LV, LI, LT, LU, MY, MT, MX, MC, MS, NL, PA, PL, PT, KN, LC, MF, VC, SM, SG, SK, SI, ZA, ES, SR, SE, CH, TR, GB, US, UY
|
|
105
|
+
* [CAMS: Central Account Management System](https://www.centralams.com/) - US
|
|
105
106
|
* [CertoDirect](http://www.certodirect.com/) - BE, BG, CZ, DK, DE, EE, IE, EL, ES, FR, IT, CY, LV, LT, LU, HU, MT, NL, AT, PL, PT, RO, SI, SK, FI, SE, GB
|
|
106
107
|
* [Checkout.com](https://www.checkout.com/) - AT, BE, BG, CY, CZ, DE, DK, EE, ES, FI, FR, GR, HR, HU, IE, IS, IT, LI, LT, LU, LV, MT, MU, NL, NO, PL, PT, RO, SE, SI, SK, US
|
|
108
|
+
* [Clearhaus](https://www.clearhaus.com) - AD, AT, BE, BG, CH, CY, CZ, DE, DK, EE, ES, FI, FO, FR, GB, GL, GR, HR, HU, IE, IS, IT, LI, LT, LU, LV, MT, NL, NO, PL, PT, RO, SE, SI, SK
|
|
107
109
|
* [Commercegate](http://www.commercegate.com/) - AD, AT, AX, BE, BG, CH, CY, CZ, DE, DK, ES, FI, FR, GB, GG, GI, GR, HR, HU, IE, IM, IS, IT, JE, LI, LT, LU, LV, MC, MT, NL, NO, PL, PT, RO, SE, SI, SK, VA
|
|
108
110
|
* [Conekta](https://conekta.io) - MX
|
|
109
111
|
* [CyberSource](http://www.cybersource.com) - US, BR, CA, CN, DK, FI, FR, DE, JP, MX, NO, SE, GB, SG
|
|
@@ -135,6 +137,7 @@ The [ActiveMerchant Wiki](http://github.com/activemerchant/active_merchant/wikis
|
|
|
135
137
|
* [Iridium](http://www.iridiumcorp.co.uk/) - GB, ES
|
|
136
138
|
* [iTransact](http://www.itransact.com/) - US
|
|
137
139
|
* [JetPay](http://www.jetpay.com/) - US
|
|
140
|
+
* [Komoju](http://www.komoju.com/) - JP
|
|
138
141
|
* [LinkPoint](http://www.linkpoint.com/) - US
|
|
139
142
|
* [Litle & Co.](http://www.litle.com/) - US
|
|
140
143
|
* [maxiPago!](http://www.maxipago.com/) - BR
|
|
@@ -151,6 +154,7 @@ The [ActiveMerchant Wiki](http://github.com/activemerchant/active_merchant/wikis
|
|
|
151
154
|
* [Moneris (US)](http://www.monerisusa.com/) - US
|
|
152
155
|
* [MoneyMovers](http://mmoa.us/) - US
|
|
153
156
|
* [NAB Transact](http://transact.nab.com.au) - AU
|
|
157
|
+
* [NELiX TransaX](https://www.nelixtransax.com/) - US
|
|
154
158
|
* [NetRegistry](http://www.netregistry.com.au) - AU
|
|
155
159
|
* [BBS Netaxept](http://www.betalingsterminal.no/Netthandel-forside/) - NO, DK, SE, FI
|
|
156
160
|
* [NETbilling](http://www.netbilling.com) - US
|
|
@@ -168,6 +172,7 @@ The [ActiveMerchant Wiki](http://github.com/activemerchant/active_merchant/wikis
|
|
|
168
172
|
* [PayJunction](http://www.payjunction.com/) - US
|
|
169
173
|
* [PaySecure](http://www.commsecure.com.au/paysecure.shtml) - AU
|
|
170
174
|
* [Paybox Direct](http://www.paybox.com/) - FR
|
|
175
|
+
* [Payeezy](https://developer.payeezy.com/) - CA, US
|
|
171
176
|
* [Payex](http://payex.com/) - DK, FI, NO, SE
|
|
172
177
|
* [PaymentExpress](http://www.paymentexpress.com/) - AU, CA, DE, ES, FR, GB, HK, IE, MY, NL, NZ, SG, US, ZA
|
|
173
178
|
* [PAYMILL](https://paymill.com) - AD, AT, BE, BG, CH, CY, CZ, DE, DK, EE, ES, FI, FO, FR, GB, GI, GR, HU, IE, IL, IS, IT, LI, LT, LU, LV, MT, NL, NO, PL, PT, RO, SE, SI, SK, TR, VA
|
|
@@ -201,14 +206,15 @@ The [ActiveMerchant Wiki](http://github.com/activemerchant/active_merchant/wikis
|
|
|
201
206
|
* [SecureNet](http://www.securenet.com/) - US
|
|
202
207
|
* [SecurePay](http://www.securepay.com/) - US, CA, GB, AU
|
|
203
208
|
* [SecurePayTech](http://www.securepaytech.com/) - NZ
|
|
209
|
+
* [SecurionPay](https://securionpay.com/) - AD, AE, AF, AG, AI, AL, AM, AN, AO, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KV, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, ST, SV, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, YE, YT, ZA, ZM, ZW
|
|
204
210
|
* [SkipJack](http://www.skipjack.com/) - US, CA
|
|
205
211
|
* [SoEasyPay](http://www.soeasypay.com/) - US, CA, AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, DE, GR, HU, IE, IT, LV, LT, LU, MT, NL, PL, PT, RO, SK, SI, ES, SE, GB, IS, NO, CH
|
|
206
212
|
* [Spreedly](https://spreedly.com) - AD, AE, AT, AU, BD, BE, BG, BN, CA, CH, CY, CZ, DE, DK, EE, EG, ES, FI, FR, GB, GI, GR, HK, HU, ID, IE, IL, IM, IN, IS, IT, JO, KW, LB, LI, LK, LT, LU, LV, MC, MT, MU, MV, MX, MY, NL, NO, NZ, OM, PH, PL, PT, QA, RO, SA, SE, SG, SI, SK, SM, TR, TT, UM, US, VA, VN, ZA
|
|
207
213
|
* [Stripe](https://stripe.com/) - AT, AU, BE, CA, CH, DE, DK, ES, FI, FR, GB, IE, IT, LU, NL, NO, SE, US
|
|
208
214
|
* [Swipe](https://www.swipehq.com/checkout) - CA, NZ
|
|
209
|
-
* [TransFirst](http://www.transfirst.com/) - US
|
|
210
215
|
* [TNS](http://www.tnsi.com/) - AR, AU, BR, FR, DE, HK, MX, NZ, SG, GB, US
|
|
211
|
-
* [
|
|
216
|
+
* [Transact Pro](https://www.transactpro.lv/business/online-payments-acceptance) - US
|
|
217
|
+
* [TransFirst](http://www.transfirst.com/) - US
|
|
212
218
|
* [Transnational](http://www.tnbci.com/) - US
|
|
213
219
|
* [TrustCommerce](http://www.trustcommerce.com/) - US
|
|
214
220
|
* [USA ePay](http://www.usaepay.com/) - US
|
|
@@ -1,32 +1,21 @@
|
|
|
1
1
|
module ActiveMerchant #:nodoc:
|
|
2
2
|
module Billing #:nodoc:
|
|
3
3
|
module Base
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
# ActiveMerchant::Billing::Base.gateway_mode = :test
|
|
7
|
-
mattr_accessor :gateway_mode
|
|
4
|
+
GATEWAY_MODE_DEPRECATION_MESSAGE = 'Base#gateway_mode is deprecated in favor of Base#mode and will be removed in a future version'
|
|
8
5
|
|
|
9
|
-
# Set ActiveMerchant
|
|
6
|
+
# Set ActiveMerchant gateways in test mode.
|
|
10
7
|
#
|
|
11
|
-
# ActiveMerchant::Billing::Base.
|
|
12
|
-
|
|
13
|
-
ActiveMerchant.deprecated(OFFSITE_PAYMENT_EXTRACTION_MESSAGE)
|
|
14
|
-
@@integration_mode = mode
|
|
15
|
-
end
|
|
8
|
+
# ActiveMerchant::Billing::Base.mode = :test
|
|
9
|
+
mattr_accessor :mode
|
|
16
10
|
|
|
17
|
-
def self.
|
|
18
|
-
ActiveMerchant.deprecated(
|
|
19
|
-
@@
|
|
11
|
+
def self.gateway_mode=(mode)
|
|
12
|
+
ActiveMerchant.deprecated(GATEWAY_MODE_DEPRECATION_MESSAGE)
|
|
13
|
+
@@mode = mode
|
|
20
14
|
end
|
|
21
15
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
def self.mode=(mode)
|
|
27
|
-
@@mode = mode
|
|
28
|
-
self.gateway_mode = mode
|
|
29
|
-
@@integration_mode = mode
|
|
16
|
+
def self.gateway_mode
|
|
17
|
+
ActiveMerchant.deprecated(GATEWAY_MODE_DEPRECATION_MESSAGE)
|
|
18
|
+
@@mode
|
|
30
19
|
end
|
|
31
20
|
|
|
32
21
|
self.mode = :production
|
|
@@ -65,7 +54,7 @@ module ActiveMerchant #:nodoc:
|
|
|
65
54
|
|
|
66
55
|
# A check to see if we're in test mode
|
|
67
56
|
def self.test?
|
|
68
|
-
|
|
57
|
+
mode == :test
|
|
69
58
|
end
|
|
70
59
|
end
|
|
71
60
|
end
|
|
@@ -134,6 +134,29 @@ module ActiveMerchant #:nodoc:
|
|
|
134
134
|
# @return [String] the verification value
|
|
135
135
|
attr_accessor :verification_value
|
|
136
136
|
|
|
137
|
+
# Sets if the credit card requires a verification value.
|
|
138
|
+
#
|
|
139
|
+
# @return [Boolean]
|
|
140
|
+
def require_verification_value=(value)
|
|
141
|
+
@require_verification_value_set = true
|
|
142
|
+
@require_verification_value = value
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# Returns if this credit card needs a verification value.
|
|
146
|
+
#
|
|
147
|
+
# By default this returns the configured value from `CreditCard.require_verification_value`,
|
|
148
|
+
# but one can set a per instance requirement with `credit_card.require_verification_value = false`.
|
|
149
|
+
#
|
|
150
|
+
# @return [Boolean]
|
|
151
|
+
def requires_verification_value?
|
|
152
|
+
@require_verification_value_set ||= false
|
|
153
|
+
if @require_verification_value_set
|
|
154
|
+
@require_verification_value
|
|
155
|
+
else
|
|
156
|
+
self.class.requires_verification_value?
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
137
160
|
# Returns or sets the track data for the card
|
|
138
161
|
#
|
|
139
162
|
# @return [String]
|
|
@@ -346,7 +369,7 @@ module ActiveMerchant #:nodoc:
|
|
|
346
369
|
unless valid_card_verification_value?(verification_value, brand)
|
|
347
370
|
errors << [:verification_value, "should be #{card_verification_value_length(brand)} digits"]
|
|
348
371
|
end
|
|
349
|
-
elsif
|
|
372
|
+
elsif requires_verification_value?
|
|
350
373
|
errors << [:verification_value, "is required"]
|
|
351
374
|
end
|
|
352
375
|
errors
|
|
@@ -48,7 +48,7 @@ module ActiveMerchant #:nodoc:
|
|
|
48
48
|
# * <tt>:zip</tt> - The zip or postal code of the customer.
|
|
49
49
|
# * <tt>:phone</tt> - The phone number of the customer.
|
|
50
50
|
#
|
|
51
|
-
# ==
|
|
51
|
+
# == Implementing new gateways
|
|
52
52
|
#
|
|
53
53
|
# See the {ActiveMerchant Guide to Contributing}[https://github.com/activemerchant/active_merchant/wiki/Contributing]
|
|
54
54
|
#
|
|
@@ -57,7 +57,7 @@ module ActiveMerchant #:nodoc:
|
|
|
57
57
|
include CreditCardFormatting
|
|
58
58
|
|
|
59
59
|
DEBIT_CARDS = [ :switch, :solo ]
|
|
60
|
-
CURRENCIES_WITHOUT_FRACTIONS =
|
|
60
|
+
CURRENCIES_WITHOUT_FRACTIONS = %w(BIF BYR CLP CVE DJF GNF HUF ISK JPY KMF KRW PYG RWF UGX VND VUV XAF XOF XPF)
|
|
61
61
|
|
|
62
62
|
CREDIT_DEPRECATION_MESSAGE = "Support for using credit to refund existing transactions is deprecated and will be removed from a future release of ActiveMerchant. Please use the refund method instead."
|
|
63
63
|
RECURRING_DEPRECATION_MESSAGE = "Recurring functionality in ActiveMerchant is deprecated and will be removed in a future version. Please contact the ActiveMerchant maintainers if you have an interest in taking ownership of a separate gem that continues support for it."
|
|
@@ -91,7 +91,8 @@ module ActiveMerchant #:nodoc:
|
|
|
91
91
|
:card_declined => 'card_declined',
|
|
92
92
|
:processing_error => 'processing_error',
|
|
93
93
|
:call_issuer => 'call_issuer',
|
|
94
|
-
:pickup_card => 'pick_up_card'
|
|
94
|
+
:pickup_card => 'pick_up_card',
|
|
95
|
+
:config_error => 'config_error'
|
|
95
96
|
}
|
|
96
97
|
|
|
97
98
|
cattr_reader :implementations
|
|
@@ -145,10 +146,6 @@ module ActiveMerchant #:nodoc:
|
|
|
145
146
|
result.to_s.downcase
|
|
146
147
|
end
|
|
147
148
|
|
|
148
|
-
def self.non_fractional_currency?(currency)
|
|
149
|
-
CURRENCIES_WITHOUT_FRACTIONS.include?(currency.to_s)
|
|
150
|
-
end
|
|
151
|
-
|
|
152
149
|
def self.supported_countries=(country_codes)
|
|
153
150
|
country_codes.each do |country_code|
|
|
154
151
|
unless ActiveMerchant::Country.find(country_code)
|
|
@@ -254,10 +251,14 @@ module ActiveMerchant #:nodoc:
|
|
|
254
251
|
end
|
|
255
252
|
end
|
|
256
253
|
|
|
254
|
+
def non_fractional_currency?(currency)
|
|
255
|
+
CURRENCIES_WITHOUT_FRACTIONS.include?(currency.to_s)
|
|
256
|
+
end
|
|
257
|
+
|
|
257
258
|
def localized_amount(money, currency)
|
|
258
259
|
amount = amount(money)
|
|
259
260
|
|
|
260
|
-
return amount unless
|
|
261
|
+
return amount unless non_fractional_currency?(currency)
|
|
261
262
|
|
|
262
263
|
if self.money_format == :cents
|
|
263
264
|
sprintf("%.0f", amount.to_f / 100)
|
|
@@ -275,6 +276,15 @@ module ActiveMerchant #:nodoc:
|
|
|
275
276
|
value.to_s[0, max_size]
|
|
276
277
|
end
|
|
277
278
|
|
|
279
|
+
def split_names(full_name)
|
|
280
|
+
names = (full_name || "").split
|
|
281
|
+
return [nil, nil] if names.size == 0
|
|
282
|
+
|
|
283
|
+
last_name = names.pop
|
|
284
|
+
first_name = names.join(" ")
|
|
285
|
+
[first_name, last_name]
|
|
286
|
+
end
|
|
287
|
+
|
|
278
288
|
def requires_start_date_or_issue_number?(credit_card)
|
|
279
289
|
return false if card_brand(credit_card).blank?
|
|
280
290
|
DEBIT_CARDS.include?(card_brand(credit_card).to_sym)
|
|
@@ -107,7 +107,7 @@ module ActiveMerchant #:nodoc:
|
|
|
107
107
|
post[:email] = options[:email] || "unspecified@example.com"
|
|
108
108
|
post[:iPAddress] = options[:ip]
|
|
109
109
|
if (billing_address = options[:billing_address])
|
|
110
|
-
post[:firstName], post[:lastName] = billing_address[:name]
|
|
110
|
+
post[:firstName], post[:lastName] = split_names(billing_address[:name])
|
|
111
111
|
post[:addressLine1] = billing_address[:address1]
|
|
112
112
|
post[:addressLine2] = billing_address[:address2]
|
|
113
113
|
post[:city] = billing_address[:city]
|
|
@@ -32,7 +32,9 @@ module ActiveMerchant #:nodoc:
|
|
|
32
32
|
'23' => STANDARD_ERROR_CODE[:card_declined],
|
|
33
33
|
'3153' => STANDARD_ERROR_CODE[:processing_error],
|
|
34
34
|
'235' => STANDARD_ERROR_CODE[:processing_error],
|
|
35
|
-
'24' => STANDARD_ERROR_CODE[:pickup_card]
|
|
35
|
+
'24' => STANDARD_ERROR_CODE[:pickup_card],
|
|
36
|
+
'300' => STANDARD_ERROR_CODE[:config_error],
|
|
37
|
+
'384' => STANDARD_ERROR_CODE[:config_error]
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
MARKET_TYPE = {
|
|
@@ -317,7 +319,6 @@ module ActiveMerchant #:nodoc:
|
|
|
317
319
|
xml.transactionRequest do
|
|
318
320
|
xml.transactionType('voidTransaction')
|
|
319
321
|
xml.refTransId(transaction_id_from(authorization))
|
|
320
|
-
add_user_fields(xml, nil, options)
|
|
321
322
|
end
|
|
322
323
|
end
|
|
323
324
|
end
|
|
@@ -433,14 +434,18 @@ module ActiveMerchant #:nodoc:
|
|
|
433
434
|
return if payment.is_a?(String) || card_brand(payment) == 'check' || card_brand(payment) == 'apple_pay'
|
|
434
435
|
if valid_track_data
|
|
435
436
|
xml.retail do
|
|
436
|
-
xml.marketType(MARKET_TYPE[:retail])
|
|
437
|
-
|
|
438
|
-
device_type = options[:device_type] || DEVICE_TYPE[:wireless_pos]
|
|
439
|
-
xml.deviceType(device_type)
|
|
437
|
+
xml.marketType(options[:market_type] || MARKET_TYPE[:retail])
|
|
438
|
+
xml.deviceType(options[:device_type] || DEVICE_TYPE[:wireless_pos])
|
|
440
439
|
end
|
|
441
440
|
elsif payment.manual_entry
|
|
442
441
|
xml.retail do
|
|
443
|
-
xml.marketType(MARKET_TYPE[:moto])
|
|
442
|
+
xml.marketType(options[:market_type] || MARKET_TYPE[:moto])
|
|
443
|
+
end
|
|
444
|
+
else
|
|
445
|
+
if options[:market_type]
|
|
446
|
+
xml.retail do
|
|
447
|
+
xml.marketType(options[:market_type])
|
|
448
|
+
end
|
|
444
449
|
end
|
|
445
450
|
end
|
|
446
451
|
end
|
|
@@ -542,13 +547,6 @@ module ActiveMerchant #:nodoc:
|
|
|
542
547
|
end
|
|
543
548
|
end
|
|
544
549
|
|
|
545
|
-
def split_names(full_name)
|
|
546
|
-
names = (full_name || "").split
|
|
547
|
-
last_name = names.pop
|
|
548
|
-
first_name = names.join(" ")
|
|
549
|
-
[first_name, last_name]
|
|
550
|
-
end
|
|
551
|
-
|
|
552
550
|
def headers
|
|
553
551
|
{ 'Content-Type' => 'text/xml' }
|
|
554
552
|
end
|
|
@@ -430,8 +430,9 @@ module ActiveMerchant #:nodoc:
|
|
|
430
430
|
end
|
|
431
431
|
|
|
432
432
|
def add_customer_data(post, options)
|
|
433
|
-
|
|
434
|
-
|
|
433
|
+
post[:EMAIL] = options[:email]
|
|
434
|
+
post[:CUSTOM_ID] = options[:customer]
|
|
435
|
+
post[:CUSTOM_ID2] = options[:custom_id2]
|
|
435
436
|
end
|
|
436
437
|
|
|
437
438
|
def add_duplicate_override(post, options)
|
|
@@ -4,9 +4,13 @@ module ActiveMerchant #:nodoc:
|
|
|
4
4
|
class BogusGateway < Gateway
|
|
5
5
|
AUTHORIZATION = '53433'
|
|
6
6
|
|
|
7
|
+
AUTHORIZATION_EMV_SUCCESS = '8A023030'
|
|
8
|
+
AUTHORIZATION_EMV_DECLINE = '8A023035'
|
|
9
|
+
|
|
7
10
|
SUCCESS_MESSAGE = "Bogus Gateway: Forced success"
|
|
8
11
|
FAILURE_MESSAGE = "Bogus Gateway: Forced failure"
|
|
9
|
-
|
|
12
|
+
NUMBER_ERROR_MESSAGE = "Bogus Gateway: Use CreditCard number ending in 1 for success, 2 for exception and anything else for error"
|
|
13
|
+
AMOUNT_ERROR_MESSAGE = "Bogus Gateway: Use amount ending in 00 for success, 05 for failure and anything else for exception"
|
|
10
14
|
UNSTORE_ERROR_MESSAGE = "Bogus Gateway: Use trans_id ending in 1 for success, 2 for exception and anything else for error"
|
|
11
15
|
CAPTURE_ERROR_MESSAGE = "Bogus Gateway: Use authorization number ending in 1 for exception, 2 for error and anything else for success"
|
|
12
16
|
VOID_ERROR_MESSAGE = "Bogus Gateway: Use authorization number ending in 1 for exception, 2 for error and anything else for success"
|
|
@@ -19,26 +23,18 @@ module ActiveMerchant #:nodoc:
|
|
|
19
23
|
self.display_name = 'Bogus'
|
|
20
24
|
|
|
21
25
|
def authorize(money, paysource, options = {})
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
when /1$/
|
|
25
|
-
Response.new(true, SUCCESS_MESSAGE, {:authorized_amount => money}, :test => true, :authorization => AUTHORIZATION )
|
|
26
|
-
when /2$/
|
|
27
|
-
Response.new(false, FAILURE_MESSAGE, {:authorized_amount => money, :error => FAILURE_MESSAGE }, :test => true, :error_code => STANDARD_ERROR_CODE[:processing_error])
|
|
26
|
+
if paysource.respond_to?(:emv?) && paysource.emv?
|
|
27
|
+
authorize_emv(money, paysource, options)
|
|
28
28
|
else
|
|
29
|
-
|
|
29
|
+
authorize_swipe(money, paysource, options)
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def purchase(money, paysource, options = {})
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
when /1$/, AUTHORIZATION
|
|
37
|
-
Response.new(true, SUCCESS_MESSAGE, {:paid_amount => money}, :test => true, :authorization => AUTHORIZATION)
|
|
38
|
-
when /2$/
|
|
39
|
-
Response.new(false, FAILURE_MESSAGE, {:paid_amount => money, :error => FAILURE_MESSAGE }, :test => true, :error_code => STANDARD_ERROR_CODE[:processing_error])
|
|
34
|
+
if paysource.respond_to?(:emv?) && paysource.emv?
|
|
35
|
+
purchase_emv(money, paysource, options)
|
|
40
36
|
else
|
|
41
|
-
|
|
37
|
+
purchase_swipe(money, paysource, options)
|
|
42
38
|
end
|
|
43
39
|
end
|
|
44
40
|
|
|
@@ -118,6 +114,54 @@ module ActiveMerchant #:nodoc:
|
|
|
118
114
|
|
|
119
115
|
private
|
|
120
116
|
|
|
117
|
+
def authorize_emv(money, paysource, options = {})
|
|
118
|
+
money = amount(money)
|
|
119
|
+
case money
|
|
120
|
+
when /00$/
|
|
121
|
+
Response.new(true, SUCCESS_MESSAGE, {:authorized_amount => money}, :test => true, :authorization => AUTHORIZATION, :emv_authorization => AUTHORIZATION_EMV_SUCCESS)
|
|
122
|
+
when /05$/
|
|
123
|
+
Response.new(false, FAILURE_MESSAGE, {:authorized_amount => money, :error => FAILURE_MESSAGE }, :test => true, :error_code => STANDARD_ERROR_CODE[:processing_error], :emv_authorization => AUTHORIZATION_EMV_DECLINE)
|
|
124
|
+
else
|
|
125
|
+
raise Error, error_message(paysource)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def authorize_swipe(money, paysource, options = {})
|
|
130
|
+
money = amount(money)
|
|
131
|
+
case normalize(paysource)
|
|
132
|
+
when /1$/
|
|
133
|
+
Response.new(true, SUCCESS_MESSAGE, {:authorized_amount => money}, :test => true, :authorization => AUTHORIZATION )
|
|
134
|
+
when /2$/
|
|
135
|
+
Response.new(false, FAILURE_MESSAGE, {:authorized_amount => money, :error => FAILURE_MESSAGE }, :test => true, :error_code => STANDARD_ERROR_CODE[:processing_error])
|
|
136
|
+
else
|
|
137
|
+
raise Error, error_message(paysource)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def purchase_emv(money, paysource, options = {})
|
|
142
|
+
money = amount(money)
|
|
143
|
+
case money
|
|
144
|
+
when /00$/
|
|
145
|
+
Response.new(true, SUCCESS_MESSAGE, {:paid_amount => money}, :test => true, :authorization => AUTHORIZATION, :emv_authorization => AUTHORIZATION_EMV_SUCCESS)
|
|
146
|
+
when /05$/
|
|
147
|
+
Response.new(false, FAILURE_MESSAGE, {:paid_amount => money, :error => FAILURE_MESSAGE }, :test => true, :error_code => STANDARD_ERROR_CODE[:processing_error], :emv_authorization => AUTHORIZATION_EMV_DECLINE)
|
|
148
|
+
else
|
|
149
|
+
raise Error, error_message(paysource)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def purchase_swipe(money, paysource, options = {})
|
|
154
|
+
money = amount(money)
|
|
155
|
+
case normalize(paysource)
|
|
156
|
+
when /1$/, AUTHORIZATION
|
|
157
|
+
Response.new(true, SUCCESS_MESSAGE, {:paid_amount => money}, :test => true, :authorization => AUTHORIZATION)
|
|
158
|
+
when /2$/
|
|
159
|
+
Response.new(false, FAILURE_MESSAGE, {:paid_amount => money, :error => FAILURE_MESSAGE }, :test => true, :error_code => STANDARD_ERROR_CODE[:processing_error])
|
|
160
|
+
else
|
|
161
|
+
raise Error, error_message(paysource)
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
121
165
|
def normalize(paysource)
|
|
122
166
|
if paysource.respond_to?(:account_number) && (paysource.try(:number).blank? || paysource.number.blank?)
|
|
123
167
|
paysource.account_number
|
|
@@ -129,10 +173,12 @@ module ActiveMerchant #:nodoc:
|
|
|
129
173
|
end
|
|
130
174
|
|
|
131
175
|
def error_message(paysource)
|
|
132
|
-
if paysource.respond_to?(:
|
|
176
|
+
if paysource.respond_to?(:emv?) && paysource.emv?
|
|
177
|
+
AMOUNT_ERROR_MESSAGE
|
|
178
|
+
elsif paysource.respond_to?(:account_number)
|
|
133
179
|
CHECK_ERROR_MESSAGE
|
|
134
180
|
elsif paysource.respond_to?(:number)
|
|
135
|
-
|
|
181
|
+
NUMBER_ERROR_MESSAGE
|
|
136
182
|
end
|
|
137
183
|
end
|
|
138
184
|
end
|