activemerchant 1.62.0 → 1.79.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +420 -2
  3. data/README.md +1 -2
  4. data/lib/active_merchant/billing/credit_card.rb +13 -14
  5. data/lib/active_merchant/billing/credit_card_methods.rb +3 -1
  6. data/lib/active_merchant/billing/gateway.rb +25 -9
  7. data/lib/active_merchant/billing/gateways/adyen.rb +299 -0
  8. data/lib/active_merchant/billing/gateways/authorize_net.rb +168 -56
  9. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +4 -2
  10. data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +65 -22
  11. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +87 -7
  12. data/lib/active_merchant/billing/gateways/beanstream.rb +2 -0
  13. data/lib/active_merchant/billing/gateways/blue_snap.rb +3 -8
  14. data/lib/active_merchant/billing/gateways/borgun.rb +10 -10
  15. data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +1 -0
  16. data/lib/active_merchant/billing/gateways/braintree_blue.rb +49 -15
  17. data/lib/active_merchant/billing/gateways/card_connect.rb +286 -0
  18. data/lib/active_merchant/billing/gateways/card_stream.rb +97 -2
  19. data/lib/active_merchant/billing/gateways/cardprocess.rb +254 -0
  20. data/lib/active_merchant/billing/gateways/cashnet.rb +14 -2
  21. data/lib/active_merchant/billing/gateways/cenpos.rb +1 -1
  22. data/lib/active_merchant/billing/gateways/checkout.rb +1 -1
  23. data/lib/active_merchant/billing/gateways/checkout_v2.rb +44 -14
  24. data/lib/active_merchant/billing/gateways/citrus_pay.rb +0 -1
  25. data/lib/active_merchant/billing/gateways/clearhaus.rb +0 -2
  26. data/lib/active_merchant/billing/gateways/conekta.rb +4 -4
  27. data/lib/active_merchant/billing/gateways/creditcall.rb +71 -9
  28. data/lib/active_merchant/billing/gateways/credorax.rb +117 -5
  29. data/lib/active_merchant/billing/gateways/culqi.rb +279 -0
  30. data/lib/active_merchant/billing/gateways/cyber_source.rb +54 -15
  31. data/lib/active_merchant/billing/gateways/data_cash.rb +12 -0
  32. data/lib/active_merchant/billing/gateways/dibs.rb +0 -1
  33. data/lib/active_merchant/billing/gateways/digitzs.rb +292 -0
  34. data/lib/active_merchant/billing/gateways/ebanx.rb +296 -0
  35. data/lib/active_merchant/billing/gateways/elavon.rb +37 -95
  36. data/lib/active_merchant/billing/gateways/element.rb +11 -1
  37. data/lib/active_merchant/billing/gateways/fat_zebra.rb +3 -29
  38. data/lib/active_merchant/billing/gateways/first_pay.rb +12 -10
  39. data/lib/active_merchant/billing/gateways/firstdata_e4.rb +37 -20
  40. data/lib/active_merchant/billing/gateways/forte.rb +0 -1
  41. data/lib/active_merchant/billing/gateways/global_collect.rb +55 -16
  42. data/lib/active_merchant/billing/gateways/global_transport.rb +16 -2
  43. data/lib/active_merchant/billing/gateways/hps.rb +12 -1
  44. data/lib/active_merchant/billing/gateways/iats_payments.rb +2 -2
  45. data/lib/active_merchant/billing/gateways/iveri.rb +251 -0
  46. data/lib/active_merchant/billing/gateways/jetpay.rb +12 -9
  47. data/lib/active_merchant/billing/gateways/jetpay_v2.rb +437 -0
  48. data/lib/active_merchant/billing/gateways/kushki.rb +227 -0
  49. data/lib/active_merchant/billing/gateways/linkpoint.rb +2 -2
  50. data/lib/active_merchant/billing/gateways/litle.rb +107 -30
  51. data/lib/active_merchant/billing/gateways/mercado_pago.rb +262 -0
  52. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +11 -0
  53. data/lib/active_merchant/billing/gateways/merchant_warrior.rb +16 -4
  54. data/lib/active_merchant/billing/gateways/mercury.rb +14 -1
  55. data/lib/active_merchant/billing/gateways/migs.rb +28 -6
  56. data/lib/active_merchant/billing/gateways/moneris.rb +20 -12
  57. data/lib/active_merchant/billing/gateways/moneris_us.rb +11 -0
  58. data/lib/active_merchant/billing/gateways/mundipagg.rb +292 -0
  59. data/lib/active_merchant/billing/gateways/nab_transact.rb +4 -4
  60. data/lib/active_merchant/billing/gateways/netbanx.rb +60 -16
  61. data/lib/active_merchant/billing/gateways/netbilling.rb +0 -1
  62. data/lib/active_merchant/billing/gateways/nmi.rb +12 -1
  63. data/lib/active_merchant/billing/gateways/ogone.rb +1 -1
  64. data/lib/active_merchant/billing/gateways/omise.rb +9 -5
  65. data/lib/active_merchant/billing/gateways/openpay.rb +13 -0
  66. data/lib/active_merchant/billing/gateways/opp.rb +124 -114
  67. data/lib/active_merchant/billing/gateways/optimal_payment.rb +14 -1
  68. data/lib/active_merchant/billing/gateways/orbital.rb +83 -14
  69. data/lib/active_merchant/billing/gateways/pay_hub.rb +2 -2
  70. data/lib/active_merchant/billing/gateways/payeezy.rb +152 -46
  71. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +12 -2
  72. data/lib/active_merchant/billing/gateways/payflow.rb +24 -2
  73. data/lib/active_merchant/billing/gateways/payment_express.rb +3 -2
  74. data/lib/active_merchant/billing/gateways/paymentez.rb +276 -0
  75. data/lib/active_merchant/billing/gateways/paymill.rb +18 -10
  76. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +14 -0
  77. data/lib/active_merchant/billing/gateways/paypal.rb +0 -12
  78. data/lib/active_merchant/billing/gateways/paystation.rb +14 -1
  79. data/lib/active_merchant/billing/gateways/payu_latam.rb +102 -62
  80. data/lib/active_merchant/billing/gateways/pin.rb +5 -0
  81. data/lib/active_merchant/billing/gateways/pro_pay.rb +326 -0
  82. data/lib/active_merchant/billing/gateways/psigate.rb +12 -1
  83. data/lib/active_merchant/billing/gateways/qbms.rb +11 -0
  84. data/lib/active_merchant/billing/gateways/quickbooks.rb +10 -0
  85. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +21 -17
  86. data/lib/active_merchant/billing/gateways/quickpay.rb +3 -3
  87. data/lib/active_merchant/billing/gateways/qvalent.rb +60 -3
  88. data/lib/active_merchant/billing/gateways/realex.rb +16 -6
  89. data/lib/active_merchant/billing/gateways/redsys.rb +8 -2
  90. data/lib/active_merchant/billing/gateways/safe_charge.rb +262 -0
  91. data/lib/active_merchant/billing/gateways/sage.rb +8 -3
  92. data/lib/active_merchant/billing/gateways/sage_pay.rb +29 -13
  93. data/lib/active_merchant/billing/gateways/secure_net.rb +11 -1
  94. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +12 -0
  95. data/lib/active_merchant/billing/gateways/smart_ps.rb +1 -1
  96. data/lib/active_merchant/billing/gateways/spreedly_core.rb +53 -7
  97. data/lib/active_merchant/billing/gateways/stripe.rb +84 -26
  98. data/lib/active_merchant/billing/gateways/tns.rb +0 -1
  99. data/lib/active_merchant/billing/gateways/trans_first.rb +3 -2
  100. data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +61 -26
  101. data/lib/active_merchant/billing/gateways/trexle.rb +217 -0
  102. data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +114 -9
  103. data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +45 -22
  104. data/lib/active_merchant/billing/gateways/vanco.rb +1 -1
  105. data/lib/active_merchant/billing/gateways/wepay.rb +79 -46
  106. data/lib/active_merchant/billing/gateways/wirecard.rb +5 -4
  107. data/lib/active_merchant/billing/gateways/worldpay.rb +85 -20
  108. data/lib/active_merchant/billing/gateways/worldpay_us.rb +27 -8
  109. data/lib/active_merchant/billing/network_tokenization_credit_card.rb +1 -1
  110. data/lib/active_merchant/connection.rb +48 -12
  111. data/lib/active_merchant/net_http_ssl_connection.rb +9 -0
  112. data/lib/active_merchant/network_connection_retries.rb +6 -4
  113. data/lib/active_merchant/posts_data.rb +11 -1
  114. data/lib/active_merchant/version.rb +1 -1
  115. data/lib/active_merchant.rb +2 -5
  116. data/lib/certs/cacert.pem +85 -0
  117. data/lib/support/ssl_version.rb +87 -0
  118. metadata +25 -9
  119. data/lib/active_merchant/billing/gateways/barclays_epdq.rb +0 -314
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7495e19fc84deca42bc3878d9463044899a33b2e
4
- data.tar.gz: bc44737020062ba81039dfc19956b7c5a128ee40
3
+ metadata.gz: e03115d421b0031a4c73b44ed64febbc0f3df381
4
+ data.tar.gz: d85fde5fb880eced27ce54395af62f37e9dbd7d3
5
5
  SHA512:
6
- metadata.gz: 3fb5132fdfd23c6f1d772755285638231bef754099790c47c69f963133b7c1057c0d3c3f19b82c8b72226f5b61a294c7d2d30e283c570d2a5f81701886db491a
7
- data.tar.gz: be95c7d4600244ab3f2607f2a67ff1f4a325db60da1deb57834b5ea11eead17392a4d5d758d5595fcd76710c2a3e141a51e61e0de67191db8b2be58b1b07e867
6
+ metadata.gz: cd18cb5c3152ba192c43ae33c764b778e288a98395f66f2a95950ea34832aded9ad77925dda23eedba356f9ef23c47dde7c7a357c18cf923fca2cef125a50a6a
7
+ data.tar.gz: 1d68b1b83141f74a72fa17e0ebb4cfddd476116fb1af1b3014351ff88d2041927b47c0146c9c25b97223268f55902b70ca50aabb26fda0293713f3c71b27506c
data/CHANGELOG CHANGED
@@ -2,6 +2,424 @@
2
2
 
3
3
  == HEAD
4
4
 
5
+ == Version 1.79.2 (June 2, 2018)
6
+ * Fix Gateway#max_version= overwriting min_version [bdewater]
7
+
8
+ == Version 1.79.1 (May 31, 2018)
9
+ * Fix Net::HTTP connections defaulting to connection: keep-alive instead of close since #2862 [bpollack] #2868
10
+ * Mundipagg: allow passing holder_document for credit card purchases [bpollack] #2864
11
+ * Conekta: support monthly_installments [bpollack] #2866
12
+ * Authorize.net: allow sending email_customer set to false [bpollack] #2867
13
+
14
+ == Version 1.79.0 (May 30, 2018)
15
+ * Allow setting min/max SSL version for a connection on Ruby 2.5 [bdewater] #2775
16
+ * Add `gateways:ssl:min_version` rake task to test upcoming TLS 1.0 deprecation deadline [bdewater] #2775
17
+ * Log negotiated SSL version and cipher [bdewater + methodmissing] #2862
18
+ * Remove support for Rails < 4.2, add support for Rails 5.2 and Ruby 2.5 [bdewater]
19
+ * Spreedly: Support verify and find transactions [abarrak] #2798
20
+ * Adyen: Support merchant-specific subdomains [curiousepic] #2799
21
+ * Fix ENV based configuration of Net::Http for proxies [bbergstrom] #2800
22
+ * ANET: Withhold cryptogram for credit [curiousepic] #2804
23
+ * Borgun: Remove batch from request parameters [deedeelavinder] #2805
24
+ * WorldPay: Remove Inquiry requests in verify transactions [nfarve] #2802
25
+ * Credorax: Update tests [curiousepic] #2809
26
+ * Braintree: Remove decimal for non-fractional currencies [nfarve] #2806
27
+ * Realex: Add documented country support for US and CA [a-salty-strudel] #2810
28
+ * Paymentez: Add `tax_percentage` optional parameter [deedeelavinder] #2814
29
+ * Braintree: Add `skip_advanced_fraud_checking` optional parameter [deedeelavinder] #2811
30
+ * SafeCharge: Additional gateway options [dtykocki] #2816
31
+ * FirstPay: Handle missing billing addresses [dtykocki] #2822
32
+ * Realex: Add ApplePay Support [nfarve] #2820
33
+ * Checkout V2: Additional gateway options [dtykocki] #2821
34
+ * CyberSource: Support 3ds validate request [curiousepic] #2823
35
+ * Paymentez: Remove card tokenization step from authorize [dtykocki] #2825
36
+ * WorldPay: Add 3DS [nfarve] #2819
37
+ * EBANX: Interpolate authorization string [curiousepic] #2830
38
+ * CyberSource: Support 3DS validation for authorize [curiousepic] #2832
39
+ * Redsys: Fix ISO code for PLN [chopenhauer] #2831
40
+ * Merchant E Solutions: Support transcript scrubbing [curiousepic] #2836
41
+ * Paystation: Support transcript scrubbing [curiousepic] #2837
42
+ * Psigate: Support transcript scrubbing [curiousepic] #2835
43
+ * Braintree: Adding 3D Secure pass thru capabilities [filipebarcos] #2843
44
+ * Authorize.net: Add flexibility for 3D Secure Parameters [filipebarcos] #2844
45
+ * Elavon: Update Country List [nfarve] #2840
46
+ * WorldPay: Update Country List [nfarve] #2841
47
+ * Merchant Warrior: Support transcript scrubbing [curiousepic] #2845
48
+ * NAB Transact: Pass nonfractional amounts correctly [curiousepic] #2843
49
+ * Realex: Update Country List [nfarve] #2842
50
+ * QBMS: Support transcript scrubbing [curiousepic] #2849
51
+ * Adyen: Add support for installments [nfarve] #2839
52
+ * Paymentez: Read messages on Failure with no error [nfarve] #2850
53
+ * Paymentez: Fix response message conditional [curiousepic] #2851
54
+ * Add ability to send email receipt [nfarve] #2852
55
+ * Barclaycard Smartpay: Pass shopper_interaction [curiousepic] #2853
56
+ * Stripe: Treat UGX as a zero-decimal currency [bpollack] #2857
57
+ * Mundipagg: Remove Billing Address if no Address Sent [nfarve] #2855
58
+ * Paypal: Support more robust scrubbing [curiousepic] #2858
59
+ * Stripe: Report internal Stripe errors as failures [bpollack] #2859
60
+ * Authorize.net: Add ability to pass `customer_payment_profile_id` [nfarve] #2854
61
+
62
+ == Version 1.78.0 (March 29, 2018)
63
+ * Litle: Add store for echecks [nfarve] #2779
64
+ * Litle: Add Support for Echeck [nfarve] #2776
65
+ * Orbital: Correct level 2 tax handling [deedeelavinder] #2729
66
+ * Payeezy: Change determination method of endpoint for store request [deedeelavinder] #2731
67
+ * Adyen: Return refusal_reason_raw when present [curiousepic] #2728
68
+ * Payeezy: Update Store method [nfarve] #2733
69
+ * CenPOS: Remove gzip encoding header [curiousepic] #2735
70
+ * Mercado Pago: Allow binary_mode to be changed [nfarve] #2736
71
+ * Stripe: Accept strings for refund_fee_amount [curiousepic] #2738
72
+ * Orbital: Complete scrub test coverage [curiousepic] #2739
73
+ * MIGS: Scrub sensitive data [curiousepic] #2740
74
+ * Worldpay US: Scrub sensitive data [curiousepic] #2742
75
+ * WorldPay: Remove Israel from supported country list [dtykocki] #2746
76
+ * Optimal Payments: Scrub sensitive data [curiousepic] #2743
77
+ * USA Epay Transaction: Scrub sensitive data [curiousepic] #2745
78
+ * MIGS: Add unit test for scrub [curiousepic] #2747
79
+ * Worldpay US: Fix bank account scrub [curiousepic] #2748
80
+ * Litle: Add support for merchantData elements [dtykocki] #2751
81
+ * Paymentez: Add support for purchasing and authorizatin with tokens [bpollack] #2753
82
+ * Ingenico: Remove Trinidad and Tobego from supported country list [bpollack] #2754
83
+ * Barclaycard Smartpay: Remove Georgia from supported country list [bpollack] #2755
84
+ * Merchant Warrior: Remove requirement for state field [joshnuss] #2638
85
+ * Wirecard: Adding missing DigiCert Global Root G2 Cert [filipebarcos] #2759
86
+ * Redsys: Add support for CNY, IDR, INR, KRW and TWD [chopenhauer] #2761
87
+ * Optimal Payments: Fix scrub for double escaping [curiousepic] #2763
88
+ * Orbital: Scrub profile transactions [curiousepic] #2762
89
+ * BlueSnap: Fix currency passing [curiousepic] #2765
90
+ * Stripe: Support pickup_card decline code [dtykocki] #2764
91
+ * Improve scrub testing for five gateways [curiousepic] #2767
92
+ * Payflow: Support scrub [curiousepic] #2768
93
+ * SecureNet: Support scrub [curiousepic] #2769
94
+ * Payeezy: Update transaction method when using stored cards [dtykocki] #2770
95
+ * Citrus Pay, DIBS, 1stPayGateway, Global Transport, NETbilling, Ogone, TNS: remove TLS 1.0 requirement [bdewater] #2774
96
+ * CardStream: Default IP and customer country [dtykocki] #2773
97
+ * Stripe: Support destination amount [dtykocki] #2777
98
+ * GlobalCollect: Update supported country list [dtykocki] #2783
99
+ * Adyen: Support store action [curiousepic] #2784
100
+ * Psigate: Update Test URL and Card [nfarve] #2785
101
+ * USA ePay Transaction: Support ACH/eChecks [curiousepic] #2786
102
+ * PayU Latam: Support language parameter [dtykocki] #2787
103
+ * Payflow: Pass OrderDesc field [curiousepic] #2789
104
+ * Global Collect: Add arbitrary fraudField params [curiousepic] #2790
105
+ * Paystation: Support verify action [curiousepic] #2793
106
+ * Checkout V2: Return error codes in response [curiousepic] #2791
107
+ * CardStream: Change refund to use REFUND_SALE [dtykocki] #2795
108
+ * Spreedly: Scrub sensitive transaction data [abarrak] #2781
109
+ * Stripe: Add `exchange_rate` parameter [WilsonChiang] #2796
110
+ * Mundipagg: New Gateway Implementation [nfarve] #2791
111
+
112
+ == Version 1.77.0 (January 31, 2018)
113
+ * Authorize.net: Allow Transaction Id to be passed for refuds [nfarve] #2698
114
+ * Forte: ensure unit tests are local-only [bpollack] #2696
115
+ * Moneris US: ensure unit tests are local-only [bpollack] #2696
116
+ * Payflow: Change Verify Method for Amex Cards [nfarve] #2693
117
+ * Safe Charge: fix an issue with variable shadowing in the adapter [bpollack] #2697
118
+ * Crashnet: add scrubbing support [bpollack] #2695
119
+ * Barclays EPDQ: add scrubbing support [bpollack] #2695
120
+ * Fat Zebra: add remote scrubbing test [bpollack] #2695
121
+ * Clearhaus: add remote scrubbing test [bpollack] #2695
122
+ * Borgun: add remote scrubbing test [bpollack] #2695
123
+ * Stripe: Added support for the quickchip entry mode option [rbalsdon]
124
+ * Ogone: Add tests for scrubbing [bpollack] #2700
125
+ * Global Transport: Add scrubbing support [bpollack] #2700
126
+ * HPS: Add scrubbing support [bpollack] #2700
127
+ * FirstData E4: Improve scrubbing and add remote scrubbing test [bpollack] #2700
128
+ * Elavon: Add scrubbing support [bpollack] #2700
129
+ * Data Cash: Add scrubbing support [bpollack] #2700
130
+ * Litle: Fix testing URL [wsmoak] #2673
131
+ * Barclays ePDQ Extra Plus: Add missing Entrust root certificates [pacso] #2614
132
+ * Moneris US: Add scrubbing support [bpollack] #2702
133
+ * Mercury: Add scrubbing support [bpollack] #2702
134
+ * Fat Zebra: Tweak remote scrubbing test [bpollack] #2704
135
+ * Card Connect: Add new gateway [nfarve] #2706
136
+ * Payeezy: Ensure store calls are properly scrubbed [dtykocki] #2709
137
+ * Payeezy: Add unit test for scrubbing store call [dtykocki] #2710
138
+ * Element: Correct URL used by store transactions [dtykocki] #2711
139
+ * Borgun: Add support for specifying TerminalID [bpollack] #2712
140
+ * Barclaycard Smartpay: 3DS Implementation [nfarve] #2714
141
+ * Payeezy: Surface gateway_message on failure [curiousepic] #2717
142
+ * Payment Express: Scrub merchant password [curiousepic] #2723
143
+ * Stripe: Fix Partial Application Fee Refunds [curiousepic] #2713
144
+ * GooglePay: Support network tokenized cards [joshnuss] #2725
145
+
146
+ == Version 1.76.0 (January 3, 2018)
147
+ * PayU Latam: Change default text for description [nfarve] #2669
148
+ * Checkout V2: Allows AVS and CVV result details to come through on authorizations [deedeelavinder] #2650
149
+ * Global Collect: Adds boolean option for pre_authorization [deeedeelavinder] #2651
150
+ * Credorax: Pass Transaction Type field [curiousepic] #2653
151
+ * Add CardProcess Gateway [bpollack] #2659
152
+ * Safe Charge: Provision 3DS option for approved merchants [deedeelavinder] #2661
153
+ * PayU Latam: Require payment_country on initialize [curiousepic] #2663
154
+ * Adyen: Remove CVV as Required Field and Determines shopperInteraction [nfarve] #2665
155
+ * SafeCharge: add support for VendorID, WebsiteID, and IP logging [bpollack] #2667
156
+ * Safe Charge: Adds 3DS flag [deedeelavinder] #2668
157
+ * CardProcess: Fix success? to always return true or false [bpollack] #2674
158
+ * SagePay: Correct CVV, AVS codes for Sagepay [singhai0] #2670
159
+ * PayU Latam: Count pending Voids as successful [curiousepic] #2677
160
+ * Mercado Pago: Ensure acess tokens are URL escaped [bpollack] #2675
161
+ * MiGS: Update hash format to SHA256 and restore remote tests [bpollack] #2676
162
+ * MiGS: Support verify calls [bpollack] #2664
163
+ * iATS: Fix Messages with Failure on iATS Server [nfarve] #2680
164
+ * Barclaycard Smartpay: Correct repsonse for fraud rejects #2683
165
+ * Adyen: Allow incomplete addresses in some situations [bpollack] #2684
166
+ * Paymentez: Add new gateway [bpollack] #2685
167
+ * PayU Latam: Provide a mechanism to override the amount in verify [dtykocki] #2688
168
+ * Mercado Pago: Support X-Device-Session-ID Header [bpollack] #2689
169
+ * Mercado Pago: Support arbitrary additional_info JSON [bpollack] #2691
170
+ * FirstData E4: Override ECI value for Apple Pay transactions with Discover [jasonwebster] #2671
171
+ * Quickbooks: Add payment context to Quickbooks charges and refunds [bdewater] #2694
172
+
173
+ == Version 1.75.0 (November 9, 2017)
174
+ * Barclaycard Smartpay: Clean up test options hashes [bpollack] #2632
175
+ * Barclaycard Smartpay: Extra data fields for credits [bpollack] #2631
176
+ * Cyber Source: Correctly passes subscriptionID for store [deedeelavinder] #2633
177
+ * Ebanx: Pass fields for business person responsible [curiousepic] #2635
178
+ * Ebanx: Support Colombian transactions [bpollack] #2636
179
+ * FirstData E4 (Payeezy): Ensure numeric ECI values are zero padded [jasonwebster] #2630
180
+ * Netbanx: Only send currency and billing_details for auths and sales [anotherjosmith] #2643
181
+ * Netbanx: Revert "Fixes basic auth for netbanx by sending the account_number and api_key" [anotherjosmith] #2644
182
+ * PayU Latam: Adds `partnerID`, adjusts phone preferences, allows empty `ip_address`, and adjusts for no `cvv` [deedeelavinder] #2634
183
+ * Sage Payment Solutions: Scrub check info [curiousepic] #2639
184
+ * Worldbank US: Allow using the backup URL [bpollack] #2641
185
+ * Worldbank US: Allow using the backup URL per-request [bpollack] #2645
186
+
187
+ == Version 1.74.0 (October 24, 2017)
188
+ * Adyen: Update list of supported countries [dtykocki] #2600
189
+ * Authorize.net CIM: Handle multiple error messages [amandapuff] #2537
190
+ * Barclaycard Smartpay: Pass street and house_number fields, in addition to standard address [deedeelavinder] #2603
191
+ * Barclaycard Smartpay: Use authorization pspReference for refunds [davidsantoso] #2599
192
+ * Beanstream: Pass email fields without address [curiousepic] #2615
193
+ * Beanstream: Support recurringPayment for auth, capture, and purchase transactions [dtykocki] #2617
194
+ * Borgun: Add support for USD transactions [dtykocki] #2602
195
+ * Borgun: Include currency code from split authorization for voids [dtykocki] #2605
196
+ * Checkout V2: Expose AVS and CVV results for purchases [dtykocki] #2619
197
+ * Credorax: Update response codes [curiousepic] #2595
198
+ * CyberSource: Support 3DSecure requests [curiousepic] #2624
199
+ * Ebanx: Pass person_type and name for stored cards [curiousepic] #2621
200
+ * Ebanx: Support Store and person_type option [curiousepic] #2604
201
+ * Elavon: Update endpoint URLs [curiousepic] #2608
202
+ * Netbanx: Fix basic auth by sending the account_number and api_key [anotherjosmith] #2616
203
+ * Payeezy: Adds support for store [deedeelavinder] #2591
204
+ * PayU Latam: Set payment_country gateway attribute [curiousepic] #2611
205
+ * Redsys: Support the DKK currency type [bpollack] #2618
206
+ * WePay: Only send ip and device for non-recurring transactions [dtykocki] #2597
207
+
208
+ == Version 1.73.0 (September 28, 2017)
209
+ * Adyen: Use original authorization pspReference on Refunds [lyverovski] #2589
210
+ * Braintree Blue: Explicitly require braintree-ruby version 2.78 [anotherjosmith]
211
+ * FirstData E4: Scrub 3DS cryptogram [jasonwebster] #2596
212
+ * PayHub: Replace single quotes with double quotes in error message [matthewheath] #2572
213
+ * Wirecard: Format non-fractional currency amounts correctly [bdewater] #2594
214
+
215
+ == Version 1.72.0 (September 20, 2017)
216
+ * Adyen: Fix failing remote tests [dtykocki] #2584
217
+ * Authorize.net: Remove numeric restriction on customer ID [dtykocki] #2579
218
+ * Authorize.net: Restore default state value for non-US addresses [jasonwebster] #2563
219
+ * Beanstream: Do not default state and zip with empty country [dtykocki] #2582
220
+ * Braintree Blue: Add eci_indicator field for Apple Pay [davidsantoso] #2565
221
+ * Conekta: Add guard clause for details fallbacks [curiousepic] #2573
222
+ * Conekta: Pull required details from billing address [nfarve] #2568
223
+ * DataCash: Enable refunding recurring transactions [davidsantoso] #2560
224
+ * Ebanx: Adds Brazil Specific Parameters [nfarve] #2559
225
+ * Kushki: Add support for refunds [dtykocki] #2575
226
+ * MercadoPago: Additional tweaks for transaction requests [davidsantoso]
227
+ * MercadoPago: Default to alphanumeric order_id [davidsantoso]
228
+ * MercadoPago: Send diners_club cards as diners [davidsantoso] #2585
229
+ * PayU Latam: Correctly condition buyer element fields [curiousepic] #2578
230
+ * PayU Latam: Pass unique buyer fields and country requirements [curiousepic] #2570
231
+ * Qvalent: Support general credit [curiousepic] #2558
232
+ * SafeCharge: Update to Version 4.1.0 [nfarve] #2556
233
+ * WePay: Don't default API version header [curiousepic] #2567
234
+ * WePay: Don't require email for Store [curiousepic] #2588
235
+
236
+ == Version 1.71.0 (August 22, 2017)
237
+ * Bambora formerly Beanstream: Change casing on customerIp variable [aengusbates] #2551
238
+ * Checkout V2: Add localized_amount support to add_invoice function [nicolas-maalouf-cko] #2452
239
+ * Checkout V2: Add UAE to country list [shasum] #2548
240
+ * Checkout V2: Fix success response code validation [nicolas-maalouf-cko] #2452
241
+ * CreditCall: Only allow AVS when specified [curiousepic] #2549
242
+ * CreditCall: Parse additional params from responses [nfarve] #2552
243
+ * CreditCall: Parse more response params [nfavre] #2543
244
+ * MercadoPago: Small tweaks to building requests [davidsantoso] #2555
245
+ * Orbital: Support Network Tokenization Credit Cards [curiousepic] #2553
246
+ * Orbital: Updgrade schema version to 7.1 [curiousepic] #2546
247
+ * Remove HUF from default non-fractional currencies [curiousepic] #2538
248
+ * Stripe: Add support for statement_address parameters for EMV transactions [malcolm-mergulhao] #2524
249
+ * TransFirst Express: Don't send address2 without value [nfarve] #2545
250
+ * TransFirst Express: Fix Optional Fields Being Passed Blank [nfarve] #2550
251
+ * TransFirst: Fix partial refund [nfarve] #2541
252
+ * Vantiv (Litle): Pass 3DS fields [curiousepic] #2536
253
+ * Braintree Blue: Add phone to options [deedeelavinder] #2564
254
+
255
+ == Version 1.70.0 (August 4, 2017)
256
+ * Barclaycard Smartpay: Provider a default billing address house number [nfarve] #2520
257
+ * FirstData E4: Fix duplicate XID and CAVV values in tokenized transactions [jasonwebster] #2529
258
+ * FirstData E4: Loose XSD validation for Payeezy (FirstData E4) [jasonwebster] #2529
259
+ * GlobalTransport: Support partial authorizations [dtykocki] #2511
260
+ * Litle: Update schema and certification tests to v9.12 [curiousepic] #2522
261
+ * Litle: Update urls and name to Vantiv [curiousepic] #2531
262
+ * Mercado Pago: Add gateway support [davidsantoso] #2518
263
+ * Orbital: Add support for level 2 data [dtykocki] #2515
264
+ * PayU Latam: Pass DNI Number [curiousepic] #2517
265
+ * Qvalent: Pass 3dSecure fields [curiousepic] #2508
266
+ * SafeCharge: Correct UserID field name [curiousepic]
267
+ * SafeCharge: Pass UserID field [curiousepic] #2507
268
+ * AuthorizeNet: Allow Response Code 4 to be returned as successful [nfarve] #2530
269
+ * Forte: Remove order number from captures in Forte Gateway [nfarve] #2532
270
+ * PayU Latam: Add additional mandatory fields [deedeelavinder] #2528
271
+
272
+ == Version 1.69.0 (July 12, 2017)
273
+ * WePay: Add payer_rbits and transaction_rbits optional fields [davidsantoso]
274
+ * Adyen: Use Active Merchant standard order_id option for reference [jasonwebster] #2483
275
+ * Correct calculation for three-exponent currencies [curiousepic] #2486
276
+ * SagePay: Use VPSTxId from authorization for refunds [dtykocki] #2489
277
+ * Payflow: Move PAYPAL-NVP header option to a class attribute on the payment gateway [deuxpi] #2492
278
+ * Optimal Payments: Pass CVD indicator accurately [curiousepic] #2491
279
+ * SagePay: Make Repeat purchase if payment is a past authorization [curiousepic] #2495
280
+ * Netbanx: map response errorCodes onto standard error code [iirving] #2456
281
+ * Netbanx: Update supported countries and cardtypes [iirving] #2456
282
+ * Barclaycard Smartpay: Support 0- and 3-exponent currencies [curiousepic] #2498
283
+ * CyberSource: Fix XSD schema validation issues [jasonwebster] #2497
284
+ * WorldPay: Support three-decimal currencies [curiousepic] #2501
285
+ * NMI: Add first and lastname to echeck transactions [dtykocki] #2499
286
+ * PayFlow: Add optional email field [davidsantoso] #2505
287
+ * Worldpay: Support Credit on CFT-enabled merchant IDs [curiousepic] #2503
288
+ * FirstPay: Add processor_id field [davidsantoso] #2506
289
+ * Authorize.Net: Use two character default for billing state [dtykocki] #2496
290
+
291
+ == Version 1.68.0 (June 27, 2017)
292
+ * Authorize.Net: Return failed response if forced refund settlement fails [bizla] #2476
293
+ * Authorize.net: Concatenate address1 and address2 [dtykocki] #2479
294
+ * Braintree Blue: Braintree Blue: Add ECI indicator to Android Pay transactions [davidsantoso] #2474
295
+ * Credorax: Support 0- and 3-exponent currencies [curiousepic]
296
+ * Cybersource: update supported card types [bdewater] #2477
297
+ * FirstData: Add a default network tokenization strategy for FirstData E4 [krystosterone] #2473
298
+ * FirstPay: FirstPay: Update hostname and force TLSv1 minimum [davidsantoso] #2478
299
+ * JetPay V2: Support store transactions and token based payments [shasum] #2475
300
+ * Moneris: Add 3DS fields for decrypted Apple and Android Pay data [davidsantoso] #2457
301
+ * Openpay: Send customer name and email in authorize and purchase [dtykocki] #2468
302
+ * Payflow: Moved to name value pair (NVP) with payflow [jusleg] #2462
303
+ * Payflow: Set PAYPAL_NVP header as optional [davidsantoso] #2480
304
+ * QuickPay V10: Return last response for purchase and authorize [curiousepic] #2461
305
+ * SafeCharge: Map billing address fields [davidsantoso] #2464
306
+ * SafeCharge: Track currency from original transaction [davidsantoso] #2470
307
+ * Support three-decimal currencies [curiousepic] #2466
308
+ * Trexle: Add gateway support [hossamhossny] #2351
309
+
310
+ == Version 1.67.0 (June 8, 2017)
311
+ * Acapture: Pass 3D Secure fields [davidsantoso] #2451
312
+ * Authorize.net: Pass Level 2 Data Fields [curiousepic] #2444
313
+ * Credorax: Add 3D Secure authentication fields [davidsantoso] #2446
314
+ * Ebanx: Add gateway support [davidsantoso] #2447
315
+ * Ebanx: Reduce supported countries to Brazil and Mexico [davidsantoso]
316
+ * FirstData Payeezy: Set default ECI value for auth/purchase transactions [jasonwebster] #2448
317
+ * JetPay V2: Add new gateway [shasum] #2442
318
+ * JetPay V2: Add optional tax data to capture calls [shasum] #2445
319
+ * NMI: Add Network Tokenization support [shasum] #2431
320
+ * Orbital: Pass soft descriptors from options hash [curiousepic]
321
+ * Orbital: Update test and production urls [jcowhigjr] #2436
322
+ * Payeezy: Add client_email field for telecheck [davidsantoso] #2455
323
+ * Payeezy: Add customer_id_type and customer_id_number fields [davidsantoso] #2454
324
+ * Quickpay V10: Fix store and token use for recurring payments [wsmoak] #2180
325
+ * Elavon: Support custom fields [curiousepic] #2416
326
+ * WePay: Support risk headers [shasum] #2419
327
+ * WePay: Add Canada as supported country [shasum] #2419
328
+ * Fat Zebra: Fix xid 3D Secure field [curiousepic]
329
+ * SafeCharge: Mark support for European countries [curiousepic]
330
+ * Checkout V2: Pass customer ip option [curiousepic]
331
+ * Realex: Map AVS and CVV response codes [davidsantoso] #2424
332
+ * Opp: Send disable3DSecure custom parameter if present [davidsantoso] #2432
333
+ * SafeCharge: Map standard Active Merchant order_id field [davidsantoso] #2434
334
+ * Payeezy: Default check number to 001 if not present [davidsantoso] #2439
335
+ * Opp: Fix incorrect customParameter key to disable 3DS [davidsantoso]
336
+
337
+ == Version 1.66.0 (May 4, 2017)
338
+ * Support Rails 5.1 [jhawthorn] #2407
339
+ * ProPay: Add Canada as supported country [davidsantoso]
340
+ * ProPay: Add gateway support [davidsantoso] #2405
341
+ * SafeCharge: Support credit transactions [shasum] #2404
342
+ * WePay: Add scrub method [shasum] #2406
343
+ * iVeri: Add gateway support [curiousepic] #2400
344
+ * iVeri: Support 3DSecure data fields [davidsantoso] #2412
345
+ * Opp: Fix transaction success criteria and clean up options [shasum] #2414
346
+
347
+ == Version 1.65.0 (April 26, 2017)
348
+ * Adyen: Add Adyen v18 gateway [adyenpayments] #2272
349
+ * Authorize.Net: Force refund of unsettled payments via void [bizla] #2399
350
+ * Barclays ePDQ: removed because it has been replaced by a new API [bdewater] #2331
351
+ * Beanstream: Map ISO province codes for US and CA [shasum] #2396
352
+ * Braintree Blue: Change :full_refund option to :force_full_refund_if_unsettled [bizla] #2403
353
+ * Braintree Blue: Force refund of unsettled payments via void [bizla] #2398
354
+ * Checkout V2: Fix sandbox URL [nicolas-maalouf-cko] #2391
355
+ * Checkout V2: Fix success_from not properly checking two possible success codes [davidsantoso]
356
+ * Cybersource: Rescue XML parse exception [shasum] #2380
357
+ * GlobalCollect: Make message and error reporting more robust [curiousepic] #2370
358
+ * GlobalCollect: Set REJECTED refunds as unsuccessful transactions [davidsantoso] #2365
359
+ * GlobalCollect: Truncate firstName field to 15 characters [davidsantoso]
360
+ * JetPay: Pass down authorization payment method token to refund a capture [davidsantoso]
361
+ * Openpay: Support card points [shasum] #2401
362
+ * Orbital: Don't send CVV indicator if CVV is not present [curiousepic] #2368
363
+ * PayU LATAM: Fix incorrect capture method definition [davidsantoso]
364
+ * Payeezy: Support dynamic soft descriptors [shasum] #2384
365
+ * Pin: Add metadata optional field [shasum] #2363
366
+ * Qvalent: Add soft descriptor fields. Add authorize, capture, and void [davidsantoso]
367
+ * SafeCharge: Add gateway [davidsantoso]
368
+ * SagePay: Support Repeat transactions [curiousepic] #2395
369
+ * Stripe: Support custom application in X-Stripe-Client-User-Agent header [davidsantoso]
370
+ * TransFirst Transaction Express: Support ACH [curiousepic] #2389
371
+ * WePay: Support unique_id for idempotent transactions [shasum] #2367
372
+ * Worldpay: Force refund of unsettled payments via void [bizla] #2402
373
+
374
+ == Version 1.64.0 (March 6, 2017)
375
+ * Authorize.net: Allow settings to be passed for CIM purchases [fwilkins] #2300
376
+ * Authorize.net: Use new `unsupported_feature` standard error code [jasonwebster] #2322
377
+ * Base Gateway: Add new `unsupported_feature` standard error code [jasonwebster] #2322
378
+ * Braintree Blue: Pass cardholder_name with card [curiousepic] #2324
379
+ * Braintree: Add Android Pay meta data fields [jknipp] #2347
380
+ * CardStream: Add additional of currencies [shasum] #2337
381
+ * Credorax: Return failure response reason [shasum] #2341
382
+ * Digitzs: Add gateway [davidsantoso]
383
+ * Digitzs: Remove merchant_id from gateway credentials [davidsantoso]
384
+ * GlobalCollect: Pass options to Refund [curiousepic] #2330
385
+ * Kushki: Add new gateway [shasum] #2326
386
+ * Kushki: Remove body from void call [shasum] #2348
387
+ * Linkpoint: Raise ArgumentError when trying to instantiate without `:pem` [jasonwebster] #2329
388
+ * Omise: Enable Japan, JPY and JCB support [zdk] #2284
389
+ * PayU LATAM: Count pending refunds as succeeded [curiousepic] #2336
390
+ * PayU LATAM: Let Refund take amount value [curiousepic] #2334
391
+ * Paymill: Send new required fields on tokenization requests [tschelabaumann] #2279
392
+ * Revert "Authorize.net: Allow settings to be passed for CIM purchases" [curiousepic] #2339
393
+ * Sage: Default billing state when outside US [shasum] #2340
394
+ * Stripe: Remove idempotency key from verify [shasum] #2335
395
+ * TransFirst Transaction Express: Don't send order_id with refunds [curiousepic] #2350
396
+ * TransFirst Transaction Express: Fix improper AVS and CVV response code mapping [shasum] #2342
397
+ * WePay: Update API version [shasum] #2349
398
+ * USA ePay Advanced: Add quick_update_customer action [joshreeves] #2229
399
+
400
+ == Version 1.63.0 (February 2, 2017)
401
+ * Authorize.net: Add #unstore support [jimryan] #2293
402
+ * AuthorizeNet: Fix line items quirk [shasum]
403
+ * CardStream: Add dynamic descriptor option fields [curiousepic]
404
+ * CardStream: Support PEN currency [shasum]
405
+ * Culqi: Add new gateway [shasum]
406
+ * CyberSource: Add Lebanon to supported countries [shasum]
407
+ * Element: Add AVS and CVV codes to response [shasum]
408
+ * Firstdata E4 (Payeezy): Set correct ECI value for card present swipes [jasonwebster] #2318
409
+ * GlobalCollect: On purchase skip capture if not required [davidsantoso]
410
+ * PaymentExpress: Update supported countries [shasum]
411
+ * Remove leading or trailing whitespace from credit card name [davidsantoso]
412
+ * Remove support for Ruby 2.0 [jasonwebster]
413
+ * Secure Pay AU: Add scrubbing support to Secure Pay AU [bruno] #2253
414
+ * Stripe: Fix error in handling of track-only contactless EMV data [jasonwebster]
415
+ * Vanco: Update test URL [davidsantoso]
416
+ * WePay: Build fee structure correctly [curiousepic]
417
+ * WePay: Remove null address fields from request [davidsantoso]
418
+ * WePay: Update WePay to API version 2016-12-07 [davidsantoso]
419
+ * Wirecard: Send customer data in requests [davidsantoso]
420
+ * Worldpay: Add session id attribute [shasum]
421
+ * Worldpay: Do not default address when not provided [shasum]
422
+
5
423
  == Version 1.62.0 (December 5, 2016)
6
424
  * AuthorizeNet: Map to standard AVSResult codes [shasum]
7
425
  * CitrusPay: Add 3DSecureId field [davidsantoso]
@@ -1562,7 +1980,7 @@ value [jduff]
1562
1980
  * Support default Return class for all Integrations that don't use returns [Soleone]
1563
1981
  * Add support for passing additional options when creating a Notification to all Integrations [Soleone]
1564
1982
  * Update BraintreeBlue#refund to have consistent method signature [Jonathan Rudenberg]
1565
- * Add rails/init.rb for gem campatability in Rails [Rūdolfs Ošiņš]
1983
+ * Add rails/init.rb for gem campatability in Rails [R?dolfs O?i??]
1566
1984
  * Fix Paypal Express response parser [Jonathan Rudenberg]
1567
1985
  * Braintree/Transax: Add tax field [wisq]
1568
1986
 
@@ -1878,7 +2296,7 @@ value [jduff]
1878
2296
  * Update Secure Pay Au to meet specs for MessageInfo elements [cody]
1879
2297
  * Add support for the Australian Secure Pay payment gateway [cody]
1880
2298
  * Allow LinkPoint cancellations for recurring billing. [yanagimoto.shin]
1881
- * Add support for Åland Islands to the country list [cody]
2299
+ * Add support for ?land Islands to the country list [cody]
1882
2300
 
1883
2301
  == Version 1.3.1 (January 28, 2008)
1884
2302
 
data/README.md CHANGED
@@ -91,7 +91,6 @@ The [ActiveMerchant Wiki](http://github.com/activemerchant/active_merchant/wikis
91
91
  * [Bank Frick](http://www.bankfrickacquiring.com/) - LI, US
92
92
  * [Banwire](http://www.banwire.com/) - MX
93
93
  * [Barclays ePDQ Extra Plus](http://www.barclaycard.co.uk/business/accepting-payments/epdq-ecomm/) - GB
94
- * [Barclays ePDQ MPI](http://www.barclaycard.co.uk/business/accepting-payments/epdq-mpi/) - GB
95
94
  * [Be2Bill](http://www.be2bill.com/) - FR
96
95
  * [Beanstream.com](http://www.beanstream.com/) - CA, US
97
96
  * [BluePay](http://www.bluepay.com/) - US
@@ -162,7 +161,7 @@ The [ActiveMerchant Wiki](http://github.com/activemerchant/active_merchant/wikis
162
161
  * [NETPAY Gateway](http://www.netpay.com.mx) - MX
163
162
  * [NMI](http://nmi.com/) - US
164
163
  * [Ogone](http://www.ogone.com/) - BE, DE, FR, NL, AT, CH
165
- * [Omise](https://www.omise.co/) - TH
164
+ * [Omise](https://www.omise.co/) - TH, JP
166
165
  * [Openpay](Openpay) - MX
167
166
  * [Optimal Payments](http://www.optimalpayments.com/) - CA, US, GB
168
167
  * [Orbital Paymentech](http://chasepaymentech.com/) - US, CA
@@ -176,21 +176,20 @@ module ActiveMerchant #:nodoc:
176
176
  # @return [String]
177
177
  attr_accessor :icc_data
178
178
 
179
- # Returns or sets a fallback reason for a EMV transaction whereby the customer's card entered a fallback scenario.
180
- # This can be an arbitrary string.
179
+ # Returns or sets information about the source of the card data.
181
180
  #
182
181
  # @return [String]
183
- attr_accessor :fallback_reason
184
-
185
- # Returns or sets whether card-present EMV data has been read contactlessly.
186
- #
187
- # @return [true, false]
188
- attr_accessor :contactless_emv
189
-
190
- # Returns or sets whether card-present magstripe data has been read contactlessly.
191
- #
192
- # @return [true, false]
193
- attr_accessor :contactless_magstripe
182
+ attr_accessor :read_method
183
+
184
+ READ_METHOD_DESCRIPTIONS = {
185
+ nil => 'A card reader was not used.',
186
+ 'fallback_no_chip' => 'Magstripe was read because the card has no chip.',
187
+ 'fallback_chip_error' => "Magstripe was read because the card's chip failed.",
188
+ 'contactless' => 'Data was read by a Contactless EMV kernel. Issuer script results are not available.',
189
+ 'contactless_magstripe' => 'Contactless data was read with a non-EMV protocol.',
190
+ 'contact' => 'Data was read using the EMV protocol. Issuer script results may follow.',
191
+ 'contact_quickchip' => 'Data was read by the Quickchip EMV kernel. Issuer script results are not available.',
192
+ }
194
193
 
195
194
  # Returns the ciphertext of the card's encrypted PIN.
196
195
  #
@@ -245,7 +244,7 @@ module ActiveMerchant #:nodoc:
245
244
  #
246
245
  # @return [String] the full name of the card holder
247
246
  def name
248
- [first_name, last_name].compact.join(' ')
247
+ "#{first_name} #{last_name}".strip
249
248
  end
250
249
 
251
250
  def name=(full_name)
@@ -14,7 +14,9 @@ module ActiveMerchant #:nodoc:
14
14
  'dankort' => /^5019\d{12}$/,
15
15
  'maestro' => /^(5[06-8]|6\d)\d{10,17}$/,
16
16
  'forbrugsforeningen' => /^600722\d{10}$/,
17
- 'laser' => /^(6304|6706|6709|6771(?!89))\d{8}(\d{4}|\d{6,7})?$/
17
+ 'laser' => /^(6304|6706|6709|6771(?!89))\d{8}(\d{4}|\d{6,7})?$/,
18
+ 'sodexo' => /^(606071|603389|606070|606069|606068|600818)\d{8}$/,
19
+ 'vr' => /^(627416|637036)\d{8}$/
18
20
  }
19
21
 
20
22
  # http://www.barclaycard.co.uk/business/files/bin_rules.pdf
@@ -77,6 +77,9 @@ module ActiveMerchant #:nodoc:
77
77
  # :call_issuer - Transaction requires voice authentication, call issuer
78
78
  # :pickup_card - Issuer requests that you pickup the card from merchant
79
79
  # :test_mode_live_card - Card was declined. Request was in test mode, but used a non test card.
80
+ # :unsupported_feature - Transaction failed due to gateway or merchant
81
+ # configuration not supporting a feature used, such
82
+ # as network tokenization.
80
83
 
81
84
  STANDARD_ERROR_CODE = {
82
85
  :incorrect_number => 'incorrect_number',
@@ -93,7 +96,8 @@ module ActiveMerchant #:nodoc:
93
96
  :call_issuer => 'call_issuer',
94
97
  :pickup_card => 'pick_up_card',
95
98
  :config_error => 'config_error',
96
- :test_mode_live_card => 'test_mode_live_card'
99
+ :test_mode_live_card => 'test_mode_live_card',
100
+ :unsupported_feature => 'unsupported_feature',
97
101
  }
98
102
 
99
103
  cattr_reader :implementations
@@ -121,8 +125,9 @@ module ActiveMerchant #:nodoc:
121
125
  class_attribute :supported_cardtypes
122
126
  self.supported_cardtypes = []
123
127
 
124
- class_attribute :currencies_without_fractions
125
- self.currencies_without_fractions = %w(BIF BYR CLP CVE DJF GNF HUF ISK JPY KMF KRW PYG RWF UGX VND VUV XAF XOF XPF)
128
+ class_attribute :currencies_without_fractions, :currencies_with_three_decimal_places
129
+ self.currencies_without_fractions = %w(BIF BYR CLP CVE DJF GNF ISK JPY KMF KRW PYG RWF UGX VND VUV XAF XOF XPF)
130
+ self.currencies_with_three_decimal_places = %w()
126
131
 
127
132
  class_attribute :homepage_url
128
133
  class_attribute :display_name
@@ -259,15 +264,26 @@ module ActiveMerchant #:nodoc:
259
264
  self.currencies_without_fractions.include?(currency.to_s)
260
265
  end
261
266
 
267
+ def three_decimal_currency?(currency)
268
+ self.currencies_with_three_decimal_places.include?(currency.to_s)
269
+ end
270
+
262
271
  def localized_amount(money, currency)
263
272
  amount = amount(money)
264
273
 
265
- return amount unless non_fractional_currency?(currency)
266
-
267
- if self.money_format == :cents
268
- sprintf("%.0f", amount.to_f / 100)
269
- else
270
- amount.split('.').first
274
+ return amount unless non_fractional_currency?(currency) || three_decimal_currency?(currency)
275
+ if non_fractional_currency?(currency)
276
+ if self.money_format == :cents
277
+ sprintf("%.0f", amount.to_f / 100)
278
+ else
279
+ amount.split('.').first
280
+ end
281
+ elsif three_decimal_currency?(currency)
282
+ if self.money_format == :cents
283
+ amount.to_s
284
+ else
285
+ sprintf("%.3f", (amount.to_f / 10))
286
+ end
271
287
  end
272
288
  end
273
289