activemerchant 1.42.6 → 1.90.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.
Files changed (450) hide show
  1. checksums.yaml +5 -13
  2. data/CHANGELOG +1420 -2
  3. data/CONTRIBUTORS +106 -0
  4. data/README.md +107 -103
  5. data/lib/active_merchant/billing/apple_pay_payment_token.rb +22 -0
  6. data/lib/active_merchant/billing/avs_result.rb +12 -13
  7. data/lib/active_merchant/billing/base.rb +13 -16
  8. data/lib/active_merchant/billing/check.rb +35 -24
  9. data/lib/active_merchant/billing/compatibility.rb +117 -0
  10. data/lib/active_merchant/billing/credit_card.rb +196 -81
  11. data/lib/active_merchant/billing/credit_card_formatting.rb +6 -4
  12. data/lib/active_merchant/billing/credit_card_methods.rb +199 -75
  13. data/lib/active_merchant/billing/cvv_result.rb +15 -15
  14. data/lib/active_merchant/billing/gateway.rb +171 -39
  15. data/lib/active_merchant/billing/gateways/adyen.rb +380 -0
  16. data/lib/active_merchant/billing/gateways/allied_wallet.rb +205 -0
  17. data/lib/active_merchant/billing/gateways/authorize_net.rb +933 -604
  18. data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +417 -0
  19. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +74 -54
  20. data/lib/active_merchant/billing/gateways/axcessms.rb +181 -0
  21. data/lib/active_merchant/billing/gateways/balanced.rb +130 -370
  22. data/lib/active_merchant/billing/gateways/bank_frick.rb +225 -0
  23. data/lib/active_merchant/billing/gateways/banwire.rb +23 -12
  24. data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +351 -0
  25. data/lib/active_merchant/billing/gateways/barclays_epdq_extra_plus.rb +6 -6
  26. data/lib/active_merchant/billing/gateways/be2bill.rb +2 -2
  27. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +109 -32
  28. data/lib/active_merchant/billing/gateways/beanstream.rb +59 -13
  29. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +12 -9
  30. data/lib/active_merchant/billing/gateways/blue_pay.rb +520 -498
  31. data/lib/active_merchant/billing/gateways/blue_snap.rb +347 -0
  32. data/lib/active_merchant/billing/gateways/bogus.rb +80 -46
  33. data/lib/active_merchant/billing/gateways/borgun.rb +220 -0
  34. data/lib/active_merchant/billing/gateways/bpoint.rb +277 -0
  35. data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +15 -2
  36. data/lib/active_merchant/billing/gateways/braintree.rb +2 -2
  37. data/lib/active_merchant/billing/gateways/braintree_blue.rb +311 -121
  38. data/lib/active_merchant/billing/gateways/braintree_orange.rb +4 -4
  39. data/lib/active_merchant/billing/gateways/bridge_pay.rb +244 -0
  40. data/lib/active_merchant/billing/gateways/cams.rb +230 -0
  41. data/lib/active_merchant/billing/gateways/card_connect.rb +311 -0
  42. data/lib/active_merchant/billing/gateways/card_save.rb +6 -7
  43. data/lib/active_merchant/billing/gateways/card_stream.rb +235 -89
  44. data/lib/active_merchant/billing/gateways/cardknox.rb +327 -0
  45. data/lib/active_merchant/billing/gateways/cardprocess.rb +254 -0
  46. data/lib/active_merchant/billing/gateways/cashnet.rb +219 -0
  47. data/lib/active_merchant/billing/gateways/cc5.rb +50 -8
  48. data/lib/active_merchant/billing/gateways/cecabank.rb +27 -14
  49. data/lib/active_merchant/billing/gateways/cenpos.rb +327 -0
  50. data/lib/active_merchant/billing/gateways/checkout.rb +214 -0
  51. data/lib/active_merchant/billing/gateways/checkout_v2.rb +233 -0
  52. data/lib/active_merchant/billing/gateways/citrus_pay.rb +22 -0
  53. data/lib/active_merchant/billing/gateways/clearhaus.rb +220 -0
  54. data/lib/active_merchant/billing/gateways/commercegate.rb +142 -0
  55. data/lib/active_merchant/billing/gateways/conekta.rb +91 -97
  56. data/lib/active_merchant/billing/gateways/creditcall.rb +271 -0
  57. data/lib/active_merchant/billing/gateways/credorax.rb +356 -0
  58. data/lib/active_merchant/billing/gateways/ct_payment.rb +268 -0
  59. data/lib/active_merchant/billing/gateways/culqi.rb +277 -0
  60. data/lib/active_merchant/billing/gateways/cyber_source.rb +294 -158
  61. data/lib/active_merchant/billing/gateways/d_local.rb +226 -0
  62. data/lib/active_merchant/billing/gateways/data_cash.rb +59 -347
  63. data/lib/active_merchant/billing/gateways/dibs.rb +199 -0
  64. data/lib/active_merchant/billing/gateways/digitzs.rb +292 -0
  65. data/lib/active_merchant/billing/gateways/ebanx.rb +296 -0
  66. data/lib/active_merchant/billing/gateways/efsnet.rb +24 -39
  67. data/lib/active_merchant/billing/gateways/elavon.rb +146 -147
  68. data/lib/active_merchant/billing/gateways/element.rb +356 -0
  69. data/lib/active_merchant/billing/gateways/epay.rb +41 -31
  70. data/lib/active_merchant/billing/gateways/evo_ca.rb +1 -1
  71. data/lib/active_merchant/billing/gateways/eway.rb +79 -78
  72. data/lib/active_merchant/billing/gateways/eway_managed.rb +35 -36
  73. data/lib/active_merchant/billing/gateways/eway_rapid.rb +369 -228
  74. data/lib/active_merchant/billing/gateways/exact.rb +32 -26
  75. data/lib/active_merchant/billing/gateways/ezic.rb +195 -0
  76. data/lib/active_merchant/billing/gateways/fat_zebra.rb +90 -64
  77. data/lib/active_merchant/billing/gateways/federated_canada.rb +6 -14
  78. data/lib/active_merchant/billing/gateways/finansbank.rb +3 -3
  79. data/lib/active_merchant/billing/gateways/first_giving.rb +142 -0
  80. data/lib/active_merchant/billing/gateways/first_pay.rb +128 -122
  81. data/lib/active_merchant/billing/gateways/firstdata_e4.rb +190 -64
  82. data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +446 -0
  83. data/lib/active_merchant/billing/gateways/flo2cash.rb +215 -0
  84. data/lib/active_merchant/billing/gateways/flo2cash_simple.rb +20 -0
  85. data/lib/active_merchant/billing/gateways/forte.rb +270 -0
  86. data/lib/active_merchant/billing/gateways/garanti.rb +29 -27
  87. data/lib/active_merchant/billing/gateways/global_collect.rb +340 -0
  88. data/lib/active_merchant/billing/gateways/global_transport.rb +194 -0
  89. data/lib/active_merchant/billing/gateways/hdfc.rb +35 -36
  90. data/lib/active_merchant/billing/gateways/hps.rb +305 -0
  91. data/lib/active_merchant/billing/gateways/iats_payments.rb +271 -16
  92. data/lib/active_merchant/billing/gateways/in_context_paypal_express.rb +15 -0
  93. data/lib/active_merchant/billing/gateways/inspire.rb +29 -32
  94. data/lib/active_merchant/billing/gateways/instapay.rb +5 -6
  95. data/lib/active_merchant/billing/gateways/ipp.rb +175 -0
  96. data/lib/active_merchant/billing/gateways/iridium.rb +247 -41
  97. data/lib/active_merchant/billing/gateways/itransact.rb +4 -5
  98. data/lib/active_merchant/billing/gateways/iveri.rb +251 -0
  99. data/lib/active_merchant/billing/gateways/jetpay.rb +198 -71
  100. data/lib/active_merchant/billing/gateways/jetpay_v2.rb +437 -0
  101. data/lib/active_merchant/billing/gateways/komoju.rb +115 -0
  102. data/lib/active_merchant/billing/gateways/kushki.rb +219 -0
  103. data/lib/active_merchant/billing/gateways/latitude19.rb +411 -0
  104. data/lib/active_merchant/billing/gateways/linkpoint.rb +45 -43
  105. data/lib/active_merchant/billing/gateways/litle.rb +328 -444
  106. data/lib/active_merchant/billing/gateways/mastercard.rb +267 -0
  107. data/lib/active_merchant/billing/gateways/maxipago.rb +145 -115
  108. data/lib/active_merchant/billing/gateways/mercado_pago.rb +277 -0
  109. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +37 -19
  110. data/lib/active_merchant/billing/gateways/merchant_one.rb +13 -15
  111. data/lib/active_merchant/billing/gateways/merchant_partners.rb +245 -0
  112. data/lib/active_merchant/billing/gateways/merchant_ware.rb +57 -60
  113. data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +59 -48
  114. data/lib/active_merchant/billing/gateways/merchant_warrior.rb +38 -19
  115. data/lib/active_merchant/billing/gateways/mercury.rb +77 -54
  116. data/lib/active_merchant/billing/gateways/metrics_global.rb +11 -30
  117. data/lib/active_merchant/billing/gateways/micropayment.rb +183 -0
  118. data/lib/active_merchant/billing/gateways/migs.rb +81 -22
  119. data/lib/active_merchant/billing/gateways/modern_payments.rb +3 -3
  120. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +23 -25
  121. data/lib/active_merchant/billing/gateways/monei.rb +307 -0
  122. data/lib/active_merchant/billing/gateways/moneris.rb +146 -64
  123. data/lib/active_merchant/billing/gateways/moneris_us.rb +197 -53
  124. data/lib/active_merchant/billing/gateways/money_movers.rb +6 -15
  125. data/lib/active_merchant/billing/gateways/mundipagg.rb +292 -0
  126. data/lib/active_merchant/billing/gateways/nab_transact.rb +86 -64
  127. data/lib/active_merchant/billing/gateways/ncr_secure_pay.rb +165 -0
  128. data/lib/active_merchant/billing/gateways/net_registry.rb +11 -5
  129. data/lib/active_merchant/billing/gateways/netaxept.rb +21 -22
  130. data/lib/active_merchant/billing/gateways/netbanx.rb +290 -0
  131. data/lib/active_merchant/billing/gateways/netbilling.rb +70 -35
  132. data/lib/active_merchant/billing/gateways/netpay.rb +5 -6
  133. data/lib/active_merchant/billing/gateways/network_merchants.rb +241 -0
  134. data/lib/active_merchant/billing/gateways/nmi.rb +274 -10
  135. data/lib/active_merchant/billing/gateways/ogone.rb +90 -47
  136. data/lib/active_merchant/billing/gateways/omise.rb +324 -0
  137. data/lib/active_merchant/billing/gateways/openpay.rb +48 -20
  138. data/lib/active_merchant/billing/gateways/opp.rb +369 -0
  139. data/lib/active_merchant/billing/gateways/optimal_payment.rb +79 -44
  140. data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +22 -21
  141. data/lib/active_merchant/billing/gateways/orbital.rb +346 -102
  142. data/lib/active_merchant/billing/gateways/pac_net_raven.rb +48 -29
  143. data/lib/active_merchant/billing/gateways/pagarme.rb +246 -0
  144. data/lib/active_merchant/billing/gateways/pago_facil.rb +122 -0
  145. data/lib/active_merchant/billing/gateways/pay_conex.rb +245 -0
  146. data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +67 -48
  147. data/lib/active_merchant/billing/gateways/pay_hub.rb +213 -0
  148. data/lib/active_merchant/billing/gateways/pay_junction.rb +20 -26
  149. data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +188 -0
  150. data/lib/active_merchant/billing/gateways/pay_secure.rb +7 -15
  151. data/lib/active_merchant/billing/gateways/paybox_direct.rb +40 -36
  152. data/lib/active_merchant/billing/gateways/payeezy.rb +410 -0
  153. data/lib/active_merchant/billing/gateways/payex.rb +38 -30
  154. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +62 -36
  155. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +11 -7
  156. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +3 -3
  157. data/lib/active_merchant/billing/gateways/payflow.rb +74 -27
  158. data/lib/active_merchant/billing/gateways/payflow_express.rb +77 -81
  159. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +2 -3
  160. data/lib/active_merchant/billing/gateways/payflow_uk.rb +5 -6
  161. data/lib/active_merchant/billing/gateways/payment_express.rb +54 -45
  162. data/lib/active_merchant/billing/gateways/paymentez.rb +304 -0
  163. data/lib/active_merchant/billing/gateways/paymill.rb +160 -66
  164. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +54 -7
  165. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +4 -0
  166. data/lib/active_merchant/billing/gateways/paypal/paypal_recurring_api.rb +17 -3
  167. data/lib/active_merchant/billing/gateways/paypal.rb +36 -27
  168. data/lib/active_merchant/billing/gateways/paypal_ca.rb +1 -1
  169. data/lib/active_merchant/billing/gateways/paypal_digital_goods.rb +7 -6
  170. data/lib/active_merchant/billing/gateways/paypal_express.rb +32 -4
  171. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +3 -3
  172. data/lib/active_merchant/billing/gateways/payscout.rb +2 -13
  173. data/lib/active_merchant/billing/gateways/paystation.rb +96 -88
  174. data/lib/active_merchant/billing/gateways/payu_in.rb +248 -0
  175. data/lib/active_merchant/billing/gateways/payu_latam.rb +445 -0
  176. data/lib/active_merchant/billing/gateways/payway.rb +8 -8
  177. data/lib/active_merchant/billing/gateways/pin.rb +74 -18
  178. data/lib/active_merchant/billing/gateways/plugnpay.rb +66 -76
  179. data/lib/active_merchant/billing/gateways/pro_pay.rb +326 -0
  180. data/lib/active_merchant/billing/gateways/psigate.rb +30 -30
  181. data/lib/active_merchant/billing/gateways/psl_card.rb +27 -34
  182. data/lib/active_merchant/billing/gateways/qbms.rb +65 -54
  183. data/lib/active_merchant/billing/gateways/quantum.rb +18 -18
  184. data/lib/active_merchant/billing/gateways/quickbooks.rb +290 -0
  185. data/lib/active_merchant/billing/gateways/quickpay/quickpay_common.rb +184 -0
  186. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +295 -0
  187. data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +226 -0
  188. data/lib/active_merchant/billing/gateways/quickpay.rb +10 -350
  189. data/lib/active_merchant/billing/gateways/qvalent.rb +236 -0
  190. data/lib/active_merchant/billing/gateways/realex.rb +78 -48
  191. data/lib/active_merchant/billing/gateways/redsys.rb +310 -170
  192. data/lib/active_merchant/billing/gateways/s5.rb +246 -0
  193. data/lib/active_merchant/billing/gateways/safe_charge.rb +262 -0
  194. data/lib/active_merchant/billing/gateways/sage.rb +415 -119
  195. data/lib/active_merchant/billing/gateways/sage_pay.rb +195 -90
  196. data/lib/active_merchant/billing/gateways/sallie_mae.rb +11 -12
  197. data/lib/active_merchant/billing/gateways/secure_net.rb +51 -43
  198. data/lib/active_merchant/billing/gateways/secure_pay.rb +182 -10
  199. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +25 -14
  200. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +10 -18
  201. data/lib/active_merchant/billing/gateways/securion_pay.rb +264 -0
  202. data/lib/active_merchant/billing/gateways/skip_jack.rb +35 -38
  203. data/lib/active_merchant/billing/gateways/smart_ps.rb +50 -42
  204. data/lib/active_merchant/billing/gateways/so_easy_pay.rb +9 -9
  205. data/lib/active_merchant/billing/gateways/spreedly_core.rb +62 -12
  206. data/lib/active_merchant/billing/gateways/stripe.rb +536 -103
  207. data/lib/active_merchant/billing/gateways/swipe_checkout.rb +12 -18
  208. data/lib/active_merchant/billing/gateways/telr.rb +274 -0
  209. data/lib/active_merchant/billing/gateways/tns.rb +22 -0
  210. data/lib/active_merchant/billing/gateways/trans_first.rb +143 -30
  211. data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +608 -0
  212. data/lib/active_merchant/billing/gateways/transact_pro.rb +224 -0
  213. data/lib/active_merchant/billing/gateways/transax.rb +5 -6
  214. data/lib/active_merchant/billing/gateways/transnational.rb +2 -232
  215. data/lib/active_merchant/billing/gateways/trexle.rb +218 -0
  216. data/lib/active_merchant/billing/gateways/trust_commerce.rb +86 -57
  217. data/lib/active_merchant/billing/gateways/usa_epay.rb +4 -4
  218. data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +196 -89
  219. data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +157 -32
  220. data/lib/active_merchant/billing/gateways/vanco.rb +294 -0
  221. data/lib/active_merchant/billing/gateways/verifi.rb +42 -49
  222. data/lib/active_merchant/billing/gateways/viaklix.rb +11 -24
  223. data/lib/active_merchant/billing/gateways/visanet_peru.rb +233 -0
  224. data/lib/active_merchant/billing/gateways/webpay.rb +26 -28
  225. data/lib/active_merchant/billing/gateways/wepay.rb +237 -0
  226. data/lib/active_merchant/billing/gateways/wirecard.rb +153 -31
  227. data/lib/active_merchant/billing/gateways/world_net.rb +344 -0
  228. data/lib/active_merchant/billing/gateways/worldpay.rb +207 -63
  229. data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +215 -0
  230. data/lib/active_merchant/billing/gateways/worldpay_us.rb +221 -0
  231. data/lib/active_merchant/billing/gateways.rb +8 -11
  232. data/lib/active_merchant/billing/model.rb +30 -0
  233. data/lib/active_merchant/billing/network_tokenization_credit_card.rb +39 -0
  234. data/lib/active_merchant/billing/payment_token.rb +21 -0
  235. data/lib/active_merchant/billing/rails.rb +3 -0
  236. data/lib/active_merchant/billing/response.rb +31 -24
  237. data/lib/active_merchant/billing.rb +7 -1
  238. data/lib/active_merchant/connection.rb +195 -0
  239. data/lib/active_merchant/country.rb +335 -0
  240. data/lib/active_merchant/empty.rb +20 -0
  241. data/lib/active_merchant/errors.rb +35 -0
  242. data/lib/active_merchant/net_http_ssl_connection.rb +10 -0
  243. data/lib/active_merchant/network_connection_retries.rb +80 -0
  244. data/lib/active_merchant/post_data.rb +25 -0
  245. data/lib/active_merchant/posts_data.rb +92 -0
  246. data/lib/active_merchant/version.rb +1 -1
  247. data/lib/active_merchant.rb +23 -27
  248. data/lib/activemerchant.rb +1 -1
  249. data/lib/certs/cacert.pem +3988 -0
  250. data/lib/support/gateway_support.rb +7 -9
  251. data/lib/support/outbound_hosts.rb +13 -10
  252. data/lib/support/ssl_verify.rb +6 -7
  253. data/lib/support/ssl_version.rb +87 -0
  254. metadata +148 -323
  255. checksums.yaml.gz.sig +0 -0
  256. data/gem-public_cert.pem +0 -21
  257. data/lib/active_merchant/billing/expiry_date.rb +0 -34
  258. data/lib/active_merchant/billing/gateways/app55.rb +0 -185
  259. data/lib/active_merchant/billing/gateways/barclays_epdq.rb +0 -314
  260. data/lib/active_merchant/billing/gateways/certo_direct.rb +0 -277
  261. data/lib/active_merchant/billing/gateways/ideal/ideal_base.rb +0 -249
  262. data/lib/active_merchant/billing/gateways/ideal/ideal_rabobank.pem +0 -13
  263. data/lib/active_merchant/billing/gateways/ideal/ideal_response.rb +0 -29
  264. data/lib/active_merchant/billing/gateways/ideal_rabobank.rb +0 -66
  265. data/lib/active_merchant/billing/gateways/orbital/avs_result.rb +0 -93
  266. data/lib/active_merchant/billing/gateways/orbital/cvv_result.rb +0 -34
  267. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +0 -93
  268. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +0 -114
  269. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +0 -102
  270. data/lib/active_merchant/billing/gateways/samurai.rb +0 -118
  271. data/lib/active_merchant/billing/gateways/vindicia.rb +0 -361
  272. data/lib/active_merchant/billing/integrations/a1agregator/helper.rb +0 -31
  273. data/lib/active_merchant/billing/integrations/a1agregator/notification.rb +0 -186
  274. data/lib/active_merchant/billing/integrations/a1agregator/status.rb +0 -38
  275. data/lib/active_merchant/billing/integrations/a1agregator.rb +0 -26
  276. data/lib/active_merchant/billing/integrations/action_view_helper.rb +0 -74
  277. data/lib/active_merchant/billing/integrations/alipay/helper.rb +0 -34
  278. data/lib/active_merchant/billing/integrations/alipay/notification.rb +0 -101
  279. data/lib/active_merchant/billing/integrations/alipay.rb +0 -18
  280. data/lib/active_merchant/billing/integrations/authorize_net_sim/helper.rb +0 -229
  281. data/lib/active_merchant/billing/integrations/authorize_net_sim/notification.rb +0 -340
  282. data/lib/active_merchant/billing/integrations/authorize_net_sim.rb +0 -38
  283. data/lib/active_merchant/billing/integrations/bit_pay/helper.rb +0 -64
  284. data/lib/active_merchant/billing/integrations/bit_pay/notification.rb +0 -74
  285. data/lib/active_merchant/billing/integrations/bit_pay/return.rb +0 -10
  286. data/lib/active_merchant/billing/integrations/bit_pay.rb +0 -30
  287. data/lib/active_merchant/billing/integrations/bogus/helper.rb +0 -17
  288. data/lib/active_merchant/billing/integrations/bogus/notification.rb +0 -11
  289. data/lib/active_merchant/billing/integrations/bogus/return.rb +0 -10
  290. data/lib/active_merchant/billing/integrations/bogus.rb +0 -23
  291. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +0 -120
  292. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +0 -158
  293. data/lib/active_merchant/billing/integrations/chronopay/return.rb +0 -10
  294. data/lib/active_merchant/billing/integrations/chronopay.rb +0 -23
  295. data/lib/active_merchant/billing/integrations/citrus/helper.rb +0 -40
  296. data/lib/active_merchant/billing/integrations/citrus/notification.rb +0 -133
  297. data/lib/active_merchant/billing/integrations/citrus/return.rb +0 -40
  298. data/lib/active_merchant/billing/integrations/citrus.rb +0 -51
  299. data/lib/active_merchant/billing/integrations/direc_pay/helper.rb +0 -200
  300. data/lib/active_merchant/billing/integrations/direc_pay/notification.rb +0 -76
  301. data/lib/active_merchant/billing/integrations/direc_pay/return.rb +0 -32
  302. data/lib/active_merchant/billing/integrations/direc_pay/status.rb +0 -37
  303. data/lib/active_merchant/billing/integrations/direc_pay.rb +0 -41
  304. data/lib/active_merchant/billing/integrations/directebanking/helper.rb +0 -90
  305. data/lib/active_merchant/billing/integrations/directebanking/notification.rb +0 -120
  306. data/lib/active_merchant/billing/integrations/directebanking/return.rb +0 -11
  307. data/lib/active_merchant/billing/integrations/directebanking.rb +0 -47
  308. data/lib/active_merchant/billing/integrations/doku/helper.rb +0 -102
  309. data/lib/active_merchant/billing/integrations/doku/notification.rb +0 -69
  310. data/lib/active_merchant/billing/integrations/doku/return.rb +0 -10
  311. data/lib/active_merchant/billing/integrations/doku.rb +0 -24
  312. data/lib/active_merchant/billing/integrations/dotpay/helper.rb +0 -77
  313. data/lib/active_merchant/billing/integrations/dotpay/notification.rb +0 -86
  314. data/lib/active_merchant/billing/integrations/dotpay/return.rb +0 -11
  315. data/lib/active_merchant/billing/integrations/dotpay.rb +0 -22
  316. data/lib/active_merchant/billing/integrations/dwolla/common.rb +0 -23
  317. data/lib/active_merchant/billing/integrations/dwolla/helper.rb +0 -43
  318. data/lib/active_merchant/billing/integrations/dwolla/notification.rb +0 -64
  319. data/lib/active_merchant/billing/integrations/dwolla/return.rb +0 -49
  320. data/lib/active_merchant/billing/integrations/dwolla.rb +0 -23
  321. data/lib/active_merchant/billing/integrations/e_payment_plans/helper.rb +0 -34
  322. data/lib/active_merchant/billing/integrations/e_payment_plans/notification.rb +0 -84
  323. data/lib/active_merchant/billing/integrations/e_payment_plans.rb +0 -48
  324. data/lib/active_merchant/billing/integrations/easy_pay/common.rb +0 -40
  325. data/lib/active_merchant/billing/integrations/easy_pay/helper.rb +0 -36
  326. data/lib/active_merchant/billing/integrations/easy_pay/notification.rb +0 -59
  327. data/lib/active_merchant/billing/integrations/easy_pay.rb +0 -30
  328. data/lib/active_merchant/billing/integrations/epay/helper.rb +0 -55
  329. data/lib/active_merchant/billing/integrations/epay/notification.rb +0 -110
  330. data/lib/active_merchant/billing/integrations/epay.rb +0 -21
  331. data/lib/active_merchant/billing/integrations/first_data/helper.rb +0 -61
  332. data/lib/active_merchant/billing/integrations/first_data/notification.rb +0 -56
  333. data/lib/active_merchant/billing/integrations/first_data.rb +0 -38
  334. data/lib/active_merchant/billing/integrations/gestpay/common.rb +0 -42
  335. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +0 -70
  336. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +0 -85
  337. data/lib/active_merchant/billing/integrations/gestpay/return.rb +0 -10
  338. data/lib/active_merchant/billing/integrations/gestpay.rb +0 -25
  339. data/lib/active_merchant/billing/integrations/helper.rb +0 -117
  340. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +0 -58
  341. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +0 -59
  342. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +0 -68
  343. data/lib/active_merchant/billing/integrations/hi_trust.rb +0 -27
  344. data/lib/active_merchant/billing/integrations/ipay88/helper.rb +0 -118
  345. data/lib/active_merchant/billing/integrations/ipay88/notification.rb +0 -103
  346. data/lib/active_merchant/billing/integrations/ipay88/return.rb +0 -29
  347. data/lib/active_merchant/billing/integrations/ipay88.rb +0 -23
  348. data/lib/active_merchant/billing/integrations/liqpay/helper.rb +0 -43
  349. data/lib/active_merchant/billing/integrations/liqpay/notification.rb +0 -89
  350. data/lib/active_merchant/billing/integrations/liqpay/return.rb +0 -83
  351. data/lib/active_merchant/billing/integrations/liqpay.rb +0 -30
  352. data/lib/active_merchant/billing/integrations/maksuturva/helper.rb +0 -119
  353. data/lib/active_merchant/billing/integrations/maksuturva/notification.rb +0 -48
  354. data/lib/active_merchant/billing/integrations/maksuturva.rb +0 -86
  355. data/lib/active_merchant/billing/integrations/moneybookers/helper.rb +0 -75
  356. data/lib/active_merchant/billing/integrations/moneybookers/notification.rb +0 -123
  357. data/lib/active_merchant/billing/integrations/moneybookers.rb +0 -26
  358. data/lib/active_merchant/billing/integrations/nochex/helper.rb +0 -68
  359. data/lib/active_merchant/billing/integrations/nochex/notification.rb +0 -94
  360. data/lib/active_merchant/billing/integrations/nochex/return.rb +0 -10
  361. data/lib/active_merchant/billing/integrations/nochex.rb +0 -88
  362. data/lib/active_merchant/billing/integrations/notification.rb +0 -71
  363. data/lib/active_merchant/billing/integrations/paxum/common.rb +0 -24
  364. data/lib/active_merchant/billing/integrations/paxum/helper.rb +0 -42
  365. data/lib/active_merchant/billing/integrations/paxum/notification.rb +0 -33
  366. data/lib/active_merchant/billing/integrations/paxum.rb +0 -44
  367. data/lib/active_merchant/billing/integrations/pay_fast/common.rb +0 -42
  368. data/lib/active_merchant/billing/integrations/pay_fast/helper.rb +0 -50
  369. data/lib/active_merchant/billing/integrations/pay_fast/notification.rb +0 -134
  370. data/lib/active_merchant/billing/integrations/pay_fast/return.rb +0 -10
  371. data/lib/active_merchant/billing/integrations/pay_fast.rb +0 -70
  372. data/lib/active_merchant/billing/integrations/paydollar/helper.rb +0 -41
  373. data/lib/active_merchant/billing/integrations/paydollar/notification.rb +0 -60
  374. data/lib/active_merchant/billing/integrations/paydollar/return.rb +0 -15
  375. data/lib/active_merchant/billing/integrations/paydollar.rb +0 -59
  376. data/lib/active_merchant/billing/integrations/payflow_link/helper.rb +0 -116
  377. data/lib/active_merchant/billing/integrations/payflow_link/notification.rb +0 -78
  378. data/lib/active_merchant/billing/integrations/payflow_link.rb +0 -21
  379. data/lib/active_merchant/billing/integrations/paypal/helper.rb +0 -119
  380. data/lib/active_merchant/billing/integrations/paypal/notification.rb +0 -227
  381. data/lib/active_merchant/billing/integrations/paypal/return.rb +0 -10
  382. data/lib/active_merchant/billing/integrations/paypal.rb +0 -39
  383. data/lib/active_merchant/billing/integrations/paypal_payments_advanced/helper.rb +0 -15
  384. data/lib/active_merchant/billing/integrations/paypal_payments_advanced.rb +0 -20
  385. data/lib/active_merchant/billing/integrations/paysbuy/helper.rb +0 -15
  386. data/lib/active_merchant/billing/integrations/paysbuy/notification.rb +0 -39
  387. data/lib/active_merchant/billing/integrations/paysbuy.rb +0 -36
  388. data/lib/active_merchant/billing/integrations/payu_in/helper.rb +0 -76
  389. data/lib/active_merchant/billing/integrations/payu_in/notification.rb +0 -154
  390. data/lib/active_merchant/billing/integrations/payu_in/return.rb +0 -36
  391. data/lib/active_merchant/billing/integrations/payu_in.rb +0 -36
  392. data/lib/active_merchant/billing/integrations/payu_in_paisa/helper.rb +0 -19
  393. data/lib/active_merchant/billing/integrations/payu_in_paisa/notification.rb +0 -13
  394. data/lib/active_merchant/billing/integrations/payu_in_paisa/return.rb +0 -16
  395. data/lib/active_merchant/billing/integrations/payu_in_paisa.rb +0 -30
  396. data/lib/active_merchant/billing/integrations/platron/helper.rb +0 -32
  397. data/lib/active_merchant/billing/integrations/platron/notification.rb +0 -113
  398. data/lib/active_merchant/billing/integrations/platron.rb +0 -28
  399. data/lib/active_merchant/billing/integrations/pxpay/helper.rb +0 -112
  400. data/lib/active_merchant/billing/integrations/pxpay/notification.rb +0 -157
  401. data/lib/active_merchant/billing/integrations/pxpay/return.rb +0 -25
  402. data/lib/active_merchant/billing/integrations/pxpay.rb +0 -31
  403. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +0 -96
  404. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +0 -137
  405. data/lib/active_merchant/billing/integrations/quickpay.rb +0 -21
  406. data/lib/active_merchant/billing/integrations/rbkmoney/helper.rb +0 -23
  407. data/lib/active_merchant/billing/integrations/rbkmoney/notification.rb +0 -91
  408. data/lib/active_merchant/billing/integrations/rbkmoney.rb +0 -17
  409. data/lib/active_merchant/billing/integrations/return.rb +0 -42
  410. data/lib/active_merchant/billing/integrations/robokassa/common.rb +0 -19
  411. data/lib/active_merchant/billing/integrations/robokassa/helper.rb +0 -50
  412. data/lib/active_merchant/billing/integrations/robokassa/notification.rb +0 -55
  413. data/lib/active_merchant/billing/integrations/robokassa/return.rb +0 -17
  414. data/lib/active_merchant/billing/integrations/robokassa.rb +0 -49
  415. data/lib/active_merchant/billing/integrations/sage_pay_form/encryption.rb +0 -33
  416. data/lib/active_merchant/billing/integrations/sage_pay_form/helper.rb +0 -136
  417. data/lib/active_merchant/billing/integrations/sage_pay_form/notification.rb +0 -210
  418. data/lib/active_merchant/billing/integrations/sage_pay_form/return.rb +0 -31
  419. data/lib/active_merchant/billing/integrations/sage_pay_form.rb +0 -37
  420. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +0 -107
  421. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +0 -171
  422. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +0 -58
  423. data/lib/active_merchant/billing/integrations/two_checkout.rb +0 -44
  424. data/lib/active_merchant/billing/integrations/valitor/helper.rb +0 -86
  425. data/lib/active_merchant/billing/integrations/valitor/notification.rb +0 -13
  426. data/lib/active_merchant/billing/integrations/valitor/response_fields.rb +0 -97
  427. data/lib/active_merchant/billing/integrations/valitor/return.rb +0 -13
  428. data/lib/active_merchant/billing/integrations/valitor.rb +0 -33
  429. data/lib/active_merchant/billing/integrations/verkkomaksut/helper.rb +0 -88
  430. data/lib/active_merchant/billing/integrations/verkkomaksut/notification.rb +0 -59
  431. data/lib/active_merchant/billing/integrations/verkkomaksut.rb +0 -20
  432. data/lib/active_merchant/billing/integrations/web_pay/common.rb +0 -50
  433. data/lib/active_merchant/billing/integrations/web_pay/helper.rb +0 -68
  434. data/lib/active_merchant/billing/integrations/web_pay/notification.rb +0 -51
  435. data/lib/active_merchant/billing/integrations/web_pay.rb +0 -45
  436. data/lib/active_merchant/billing/integrations/webmoney/common.rb +0 -17
  437. data/lib/active_merchant/billing/integrations/webmoney/helper.rb +0 -40
  438. data/lib/active_merchant/billing/integrations/webmoney/notification.rb +0 -47
  439. data/lib/active_merchant/billing/integrations/webmoney.rb +0 -43
  440. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/common.rb +0 -104
  441. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/helper.rb +0 -145
  442. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/notification.rb +0 -101
  443. data/lib/active_merchant/billing/integrations/wirecard_checkout_page/return.rb +0 -35
  444. data/lib/active_merchant/billing/integrations/wirecard_checkout_page.rb +0 -39
  445. data/lib/active_merchant/billing/integrations/world_pay/helper.rb +0 -101
  446. data/lib/active_merchant/billing/integrations/world_pay/notification.rb +0 -160
  447. data/lib/active_merchant/billing/integrations/world_pay.rb +0 -34
  448. data/lib/active_merchant/billing/integrations.rb +0 -17
  449. data.tar.gz.sig +0 -0
  450. metadata.gz.sig +0 -1
@@ -2,7 +2,6 @@ require 'json'
2
2
 
3
3
  module ActiveMerchant #:nodoc:
4
4
  module Billing #:nodoc:
5
-
6
5
  # For more information on Balanced visit https://www.balancedpayments.com
7
6
  # or visit #balanced on irc.freenode.net
8
7
  #
@@ -17,447 +16,207 @@ module ActiveMerchant #:nodoc:
17
16
  # 4. When you're ready to generate a production API key click the "Go
18
17
  # live" button on the Balanced dashboard and fill in your marketplace
19
18
  # details.
20
- #
21
- # ==== Overview
22
- #
23
- # Balanced provides a RESTful API, all entities within Balanced are
24
- # represented by their respective URIs, these are returned in the
25
- # `authorization` parameter of the Active Merchant Response object.
26
- #
27
- # All Response objects will contain a hash property called `params` which
28
- # holds the raw JSON dictionary returned by Balanced. You can find
29
- # properties about the operation performed and the object that represents
30
- # it within this hash.
31
- #
32
- # All operations within Balanced are tied to an account, as such, when you
33
- # perform an `authorization` or a `capture` with a new credit card you
34
- # must ensure you also pass the `:email` property within the `options`
35
- # parameter.
36
- #
37
- # For more details about Balanced's API visit:
38
- # https://www.balancedpayments.com/docs
39
- #
40
- # ==== Terminology & Transaction Flow
41
- #
42
- # * An `authorization` operation will return a Hold URI. An `authorization`
43
- # within Balanced is valid until the `expires_at` property. You can see the
44
- # exact date of the expiry on the Response object by inspecting the
45
- # property `response.params['expires_at']`. The resulting Hold may be
46
- # `capture`d or `void`ed at any time before the `expires_at` date for
47
- # any amount up to the full amount of the original `authorization`.
48
- # * A `capture` operation will return a Debit URI. You must pass the URI of
49
- # the previously performed `authorization`
50
- # * A `purchase` will create a Hold and Debit in a single operation and
51
- # return the URI of the resulting Debit.
52
- # * A `void` operation must be performed on an existing `authorization`
53
- # and will result in releasing the funds reserved by the
54
- # `authorization`.
55
- # * The `refund` operation must be performed on a previously captured
56
- # Debit URI. You may refund any fraction of the original amount of the
57
- # debit up to the original total.
58
- #
59
19
  class BalancedGateway < Gateway
60
- VERSION = '1.0.0'
20
+ VERSION = '2.0.0'
61
21
 
62
- TEST_URL = LIVE_URL = 'https://api.balancedpayments.com'
22
+ self.live_url = 'https://api.balancedpayments.com'
63
23
 
64
- # The countries the gateway supports merchants from as 2 digit ISO
65
- # country codes
66
24
  self.supported_countries = ['US']
67
25
  self.supported_cardtypes = [:visa, :master, :american_express, :discover]
68
26
  self.homepage_url = 'https://www.balancedpayments.com/'
69
27
  self.display_name = 'Balanced'
70
28
  self.money_format = :cents
71
29
 
72
- class Error < ActiveMerchant::ActiveMerchantError
73
- attr_reader :response
74
-
75
- def initialize(response, msg=nil)
76
- @response = response
77
- super(msg || response['description'])
78
- end
79
- end
80
-
81
- class CardDeclined < Error
82
- end
83
-
84
30
  # Creates a new BalancedGateway
85
31
  #
86
- # The gateway requires that a valid api_key be passed in the +options+
87
- # hash.
88
- #
89
32
  # ==== Options
90
33
  #
91
34
  # * <tt>:login</tt> -- The Balanced API Secret (REQUIRED)
92
35
  def initialize(options = {})
93
36
  requires!(options, :login)
94
37
  super
95
- initialize_marketplace(options[:marketplace] || load_marketplace)
96
38
  end
97
39
 
98
- # Performs an authorization (Hold in Balanced nonclementure), which
99
- # reserves the funds on the customer's credit card, but does not charge
100
- # the card. An authorization is valid until the `expires_at` field in
101
- # the params Hash passes. See `response.params['expires_at']`. The exact
102
- # amount of time until an authorization expires depends on the card
103
- # issuer.
104
- #
105
- # If you pass a previously tokenized `credit_card` URI the only other
106
- # parameter required is `money`. If you pass `credit_card` as a hash of
107
- # credit card information you must also pass `options` with a `:email`
108
- # entry.
109
- #
110
- # ==== Parameters
111
- #
112
- # * <tt>money</tt> -- The amount to be authorized as an Integer value in cents.
113
- # * <tt>credit_card</tt> -- A hash of credit card details for this
114
- # transaction or the URI of a card previously stored in Balanced.
115
- # * <tt>options</tt> -- A hash of optional parameters.
116
- #
117
- # ==== Options
118
- #
119
- # If you are passing a new credit card you must pass one of these two
120
- # parameters
121
- #
122
- # * <tt>email</tt> -- the email address of user associated with this
123
- # purchase.
124
- # * <tt>account_uri</tt> -- `account_uri` is the URI of an existing
125
- # Balanced account.
126
- def authorize(money, credit_card, options = {})
127
- if credit_card.respond_to?(:number)
128
- requires!(options, :email) unless options[:account_uri]
129
- end
130
-
40
+ def purchase(money, payment_method, options = {})
131
41
  post = {}
132
- post[:amount] = money
42
+ add_amount(post, money)
133
43
  post[:description] = options[:description]
134
44
  add_common_params(post, options)
135
45
 
136
- create_or_find_account(post, options)
137
- add_credit_card(post, credit_card, options)
138
- add_address(credit_card, options)
139
-
140
- create_transaction(:post, @holds_uri, post)
141
- rescue Error => ex
142
- failed_response(ex.response)
143
- end
144
-
145
- # Perform a purchase, which is an authorization and capture in a single
146
- # operation.
147
- #
148
- # ==== Parameters
149
- #
150
- # * <tt>money</tt> -- The amount to be purchased as an Integer value in cents.
151
- # * <tt>credit_card</tt> -- A hash of credit card details for this
152
- # transaction or the URI of a card previously stored in Balanced.
153
- # * <tt>options</tt> -- A hash of optional parameters.
154
- #
155
- # ==== Options
156
- #
157
- # If you are passing a new credit card you must pass one of these two
158
- # parameters
159
- #
160
- # * <tt>email</tt> -- the email address of user associated with this
161
- # purchase.
162
- # * <tt>account_uri</tt> -- `account_uri` is the URI of an existing
163
- # Balanced account.
164
- #
165
- # If you are passing a new card URI from balanced.js, you should pass
166
- # the customer's name
167
- #
168
- # * <tt>name</tt> -- the customer's name, to appear on the Account
169
- # on Balanced.
170
- def purchase(money, credit_card, options = {})
171
- if credit_card.respond_to?('number')
172
- requires!(options, :email) unless options[:account_uri]
46
+ MultiResponse.run do |r|
47
+ identifier = if(payment_method.respond_to?(:number))
48
+ r.process { store(payment_method, options) }
49
+ r.authorization
50
+ else
51
+ payment_method
52
+ end
53
+ r.process { commit('debits', "cards/#{card_identifier_from(identifier)}/debits", post) }
173
54
  end
55
+ end
174
56
 
57
+ def authorize(money, payment_method, options = {})
175
58
  post = {}
176
- post[:amount] = money
59
+ add_amount(post, money)
177
60
  post[:description] = options[:description]
178
61
  add_common_params(post, options)
179
62
 
180
- create_or_find_account(post, options)
181
- add_credit_card(post, credit_card, options)
182
- add_address(credit_card, options)
183
-
184
- create_transaction(:post, @debits_uri, post)
185
- rescue Error => ex
186
- failed_response(ex.response)
63
+ MultiResponse.run do |r|
64
+ identifier = if(payment_method.respond_to?(:number))
65
+ r.process { store(payment_method, options) }
66
+ r.authorization
67
+ else
68
+ payment_method
69
+ end
70
+ r.process { commit('card_holds', "cards/#{card_identifier_from(identifier)}/card_holds", post) }
71
+ end
187
72
  end
188
73
 
189
- # Captures the funds from an authorized transaction (Hold).
190
- #
191
- # ==== Parameters
192
- #
193
- # * <tt>money</tt> -- The amount to be captured as an Integer value in
194
- # cents. If omitted the full amount of the original authorization
195
- # transaction will be captured.
196
- # * <tt>authorization</tt> -- The uri of an authorization returned from
197
- # an authorize request.
198
- #
199
- # ==== Options
200
- #
201
- # * <tt>description</tt> -- A string that will be displayed on the
202
- # Balanced dashboard
203
- def capture(money, authorization, options = {})
74
+ def capture(money, identifier, options = {})
204
75
  post = {}
205
- post[:hold_uri] = authorization
206
- post[:amount] = money if money
76
+ add_amount(post, money)
207
77
  post[:description] = options[:description] if options[:description]
208
78
  add_common_params(post, options)
209
79
 
210
- create_transaction(:post, @debits_uri, post)
211
- rescue Error => ex
212
- failed_response(ex.response)
80
+ commit('debits', "card_holds/#{reference_identifier_from(identifier)}/debits", post)
213
81
  end
214
82
 
215
- # Void a previous authorization (Hold)
216
- #
217
- # ==== Parameters
218
- #
219
- # * <tt>authorization</tt> -- The uri of the authorization returned from
220
- # an `authorize` request.
221
- def void(authorization, options = {})
83
+ def void(identifier, options = {})
222
84
  post = {}
223
85
  post[:is_void] = true
224
86
  add_common_params(post, options)
225
87
 
226
- create_transaction(:put, authorization, post)
227
- rescue Error => ex
228
- failed_response(ex.response)
88
+ commit('card_holds', "card_holds/#{reference_identifier_from(identifier)}", post, :put)
229
89
  end
230
90
 
231
- # Refund a transaction.
232
- #
233
- # Returns the money debited from a card to the card from the
234
- # marketplace's escrow balance.
235
- #
236
- # ==== Parameters
237
- #
238
- # * <tt>debit_uri</tt> -- The uri of the original transaction against
239
- # which the refund is being issued.
240
- # * <tt>options</tt> -- A hash of parameters.
241
- #
242
- # ==== Options
243
- #
244
- # * <tt>`:amount`<tt> -- specify an amount if you want to perform a
245
- # partial refund. This value will default to the total amount of the
246
- # debit that has not been refunded so far.
247
- def refund(amount, debit_uri = "deprecated", options = {})
248
- if(debit_uri == "deprecated" || debit_uri.kind_of?(Hash))
249
- deprecated "Calling the refund method without an amount parameter is deprecated and will be removed in a future version."
250
- return refund(options[:amount], amount, options)
251
- end
252
-
253
- requires!(debit_uri)
91
+ def refund(money, identifier, options = {})
254
92
  post = {}
255
- post[:debit_uri] = debit_uri
256
- post[:amount] = amount
93
+ add_amount(post, money)
257
94
  post[:description] = options[:description]
258
95
  add_common_params(post, options)
259
- create_transaction(:post, @refunds_uri, post)
260
- rescue Error => ex
261
- failed_response(ex.response)
96
+
97
+ commit('refunds', "debits/#{reference_identifier_from(identifier)}/refunds", post)
262
98
  end
263
99
 
264
- # Stores a card and email address
265
- #
266
- # ==== Parameters
267
- #
268
- # * <tt>credit_card</tt> --
269
- def store(credit_card, options = {})
270
- requires!(options, :email)
100
+ def store(credit_card, options={})
271
101
  post = {}
272
- account_uri = create_or_find_account(post, options)
273
- if credit_card.respond_to? :number
274
- card_uri = add_credit_card(post, credit_card, options)
275
- else
276
- card_uri = associate_card_to_account(account_uri, credit_card)
277
- end
278
102
 
279
- is_test = false
280
- if @marketplace_uri
281
- is_test = (@marketplace_uri.index("TEST") ? true : false)
282
- end
103
+ post[:number] = credit_card.number
104
+ post[:expiration_month] = credit_card.month
105
+ post[:expiration_year] = credit_card.year
106
+ post[:cvv] = credit_card.verification_value if credit_card.verification_value?
107
+ post[:name] = credit_card.name if credit_card.name
108
+
109
+ add_address(post, options)
283
110
 
284
- Response.new(true, "Card stored", {}, :test => is_test, :authorization => [card_uri, account_uri].compact.join(';'))
285
- rescue Error => ex
286
- failed_response(ex.response)
111
+ commit('cards', 'cards', post)
287
112
  end
288
113
 
289
114
  private
290
115
 
291
- # Load URIs for this marketplace by inspecting the marketplace object
292
- # returned from the uri. http://en.wikipedia.org/wiki/HATEOAS
293
- def load_marketplace
294
- response = http_request(:get, '/v1/marketplaces')
295
- if error?(response)
296
- raise Error.new(response, 'Invalid login credentials supplied')
116
+ def reference_identifier_from(identifier)
117
+ case identifier
118
+ when %r{\|}
119
+ uri = identifier.
120
+ split('|').
121
+ detect { |part| part.size > 0 }
122
+ uri.split('/')[2]
123
+ when %r{\/}
124
+ identifier.split('/')[5]
125
+ else
126
+ identifier
297
127
  end
298
- response['items'][0]
299
128
  end
300
129
 
301
- def initialize_marketplace(marketplace)
302
- @marketplace_uri = marketplace['uri']
303
- @holds_uri = marketplace['holds_uri']
304
- @debits_uri = marketplace['debits_uri']
305
- @cards_uri = marketplace['cards_uri']
306
- @accounts_uri = marketplace['accounts_uri']
307
- @refunds_uri = marketplace['refunds_uri']
130
+ def card_identifier_from(identifier)
131
+ identifier.split('/').last
308
132
  end
309
133
 
310
- def create_or_find_account(post, options)
311
- account_uri = nil
312
-
313
- if options.has_key? :account_uri
314
- account_uri = options[:account_uri]
315
- end
316
-
317
- if account_uri == nil
318
- post[:name] = options[:name] if options[:name]
319
- post[:email_address] = options[:email]
320
- post[:meta] = options[:meta] if options[:meta]
321
-
322
- # create an account
323
- response = http_request(:post, @accounts_uri, post)
324
-
325
- if response.has_key? 'uri'
326
- account_uri = response['uri']
327
- elsif error?(response)
328
- # lookup account from Balanced, account_uri should be in the
329
- # exception in a dictionary called extras
330
- account_uri = response['extras']['account_uri']
331
- raise Error.new(response) unless account_uri
332
- end
333
- end
334
-
335
- post[:account_uri] = account_uri
336
-
337
- account_uri
134
+ def add_amount(post, money)
135
+ post[:amount] = amount(money) if money
338
136
  end
339
137
 
340
- def add_address(credit_card, options)
341
- return unless credit_card.kind_of?(Hash)
342
- if address = options[:billing_address] || options[:address]
343
- credit_card[:street_address] = address[:address1] if address[:address1]
344
- credit_card[:street_address] += ' ' + address[:address2] if address[:address2]
345
- credit_card[:postal_code] = address[:zip] if address[:zip]
346
- credit_card[:country] = address[:country] if address[:country]
138
+ def add_address(post, options)
139
+ address = (options[:billing_address] || options[:address])
140
+ if(address && address[:zip].present?)
141
+ post[:address] = {}
142
+ post[:address][:line1] = address[:address1] if address[:address1]
143
+ post[:address][:line2] = address[:address2] if address[:address2]
144
+ post[:address][:city] = address[:city] if address[:city]
145
+ post[:address][:state] = address[:state] if address[:state]
146
+ post[:address][:postal_code] = address[:zip] if address[:zip]
147
+ post[:address][:country_code] = address[:country] if address[:country]
347
148
  end
348
149
  end
349
150
 
350
151
  def add_common_params(post, options)
351
- common_params = [
352
- :appears_on_statement_as,
353
- :on_behalf_of_uri,
354
- :meta
355
- ]
356
- post.update(options.select{|key, _| common_params.include?(key)})
152
+ post[:appears_on_statement_as] = options[:appears_on_statement_as]
153
+ post[:on_behalf_of_uri] = options[:on_behalf_of_uri]
154
+ post[:meta] = options[:meta]
357
155
  end
358
156
 
359
- def add_credit_card(post, credit_card, options)
360
- if credit_card.respond_to? :number
361
- card = {}
362
- card[:card_number] = credit_card.number
363
- card[:expiration_month] = credit_card.month
364
- card[:expiration_year] = credit_card.year
365
- card[:security_code] = credit_card.verification_value if credit_card.verification_value?
366
- card[:name] = credit_card.name if credit_card.name
367
-
368
- add_address(card, options)
369
-
370
- response = http_request(:post, @cards_uri, card)
371
- if error?(response)
372
- raise CardDeclined, response
373
- end
374
- card_uri = response['uri']
375
-
376
- associate_card_to_account(post[:account_uri], card_uri)
377
-
378
- post[:card_uri] = card_uri
379
- elsif credit_card.kind_of?(String)
380
- associate_card_to_account(post[:account_uri], credit_card) unless options[:account_uri]
381
- post[:card_uri] = credit_card
382
- end
383
-
384
- post[:card_uri]
385
- end
386
-
387
- def associate_card_to_account(account_uri, card_uri)
388
- http_request(:put, account_uri, :card_uri => card_uri)
389
- end
390
-
391
- def http_request(method, url, parameters={}, meta={})
392
- begin
393
- if method == :get
394
- raw_response = ssl_get(LIVE_URL + url, headers(meta))
395
- else
396
- raw_response = ssl_request(method,
397
- LIVE_URL + url,
398
- post_data(parameters),
399
- headers(meta))
400
- end
401
- parse(raw_response)
157
+ def commit(entity_name, path, post, method=:post)
158
+ raw_response = begin
159
+ parse(ssl_request(
160
+ method,
161
+ live_url + "/#{path}",
162
+ post_data(post),
163
+ headers
164
+ ))
402
165
  rescue ResponseError => e
403
- raw_response = e.response.body
404
- response_error(raw_response)
405
- rescue JSON::ParserError
406
- json_error(raw_response)
166
+ raise unless(e.response.code.to_s =~ /4\d\d/)
167
+ parse(e.response.body)
407
168
  end
408
- end
409
-
410
- def create_transaction(method, url, parameters, meta={})
411
- response = http_request(method, url, parameters, meta)
412
- success = !error?(response)
413
169
 
414
- Response.new(success,
415
- (success ? "Transaction approved" : response["description"]),
416
- response,
417
- :test => (@marketplace_uri.index("TEST") ? true : false),
418
- :authorization => response["uri"]
170
+ Response.new(
171
+ success_from(entity_name, raw_response),
172
+ message_from(raw_response),
173
+ raw_response,
174
+ authorization: authorization_from(entity_name, raw_response),
175
+ test: test?
419
176
  )
420
177
  end
421
178
 
422
- def failed_response(response)
423
- is_test = false
424
- if @marketplace_uri
425
- is_test = (@marketplace_uri.index("TEST") ? true : false)
179
+ def success_from(entity_name, raw_response)
180
+ entity = (raw_response[entity_name] || []).first
181
+ if(!entity)
182
+ false
183
+ elsif((entity_name == 'refunds') && entity.include?('status'))
184
+ %w(succeeded pending).include?(entity['status'])
185
+ elsif(entity.include?('status'))
186
+ (entity['status'] == 'succeeded')
187
+ elsif(entity_name == 'cards')
188
+ !!entity['id']
189
+ else
190
+ false
426
191
  end
427
-
428
- Response.new(false,
429
- response["description"],
430
- response,
431
- :test => is_test
432
- )
433
192
  end
434
193
 
435
- def parse(body)
436
- JSON.parse(body)
194
+ def message_from(raw_response)
195
+ if(raw_response['errors'])
196
+ error = raw_response['errors'].first
197
+ (error['additional'] || error['message'] || error['description'])
198
+ else
199
+ 'Success'
200
+ end
437
201
  end
438
202
 
439
- def response_error(raw_response)
440
- begin
441
- parse(raw_response)
442
- rescue JSON::ParserError
443
- json_error(raw_response)
444
- end
203
+ def authorization_from(entity_name, raw_response)
204
+ entity = (raw_response[entity_name] || []).first
205
+ (entity && entity['id'])
445
206
  end
446
207
 
447
- def json_error(raw_response)
448
- msg = 'Invalid response received from the Balanced API. Please contact support@balancedpayments.com if you continue to receive this message.'
449
- msg += " (The raw response returned by the API was #{raw_response.inspect})"
208
+ def parse(body)
209
+ JSON.parse(body)
210
+ rescue JSON::ParserError
211
+ message = 'Invalid response received from the Balanced API. Please contact support@balancedpayments.com if you continue to receive this message.'
212
+ message += " (The raw response returned by the API was #{raw_response.inspect})"
450
213
  {
451
- "error" => {
452
- "message" => msg
453
- }
214
+ 'errors' => [{
215
+ 'message' => message
216
+ }]
454
217
  }
455
218
  end
456
219
 
457
- def error?(response)
458
- response.key?('status_code')
459
- end
460
-
461
220
  def post_data(params)
462
221
  return nil unless params
463
222
 
@@ -472,23 +231,24 @@ module ActiveMerchant #:nodoc:
472
231
  else
473
232
  "#{key}=#{CGI.escape(value.to_s)}"
474
233
  end
475
- end.compact.join("&")
234
+ end.compact.join('&')
476
235
  end
477
236
 
478
- def headers(meta={})
479
- @@ua ||= JSON.dump({
480
- :bindings_version => ActiveMerchant::VERSION,
481
- :lang => 'ruby',
482
- :lang_version => "#{RUBY_VERSION} p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE})",
483
- :lib_version => BalancedGateway::VERSION,
484
- :platform => RUBY_PLATFORM,
485
- :publisher => 'active_merchant'
486
- })
237
+ def headers
238
+ @@ua ||= JSON.dump(
239
+ bindings_version: ActiveMerchant::VERSION,
240
+ lang: 'ruby',
241
+ lang_version: "#{RUBY_VERSION} p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE})",
242
+ lib_version: BalancedGateway::VERSION,
243
+ platform: RUBY_PLATFORM,
244
+ publisher: 'active_merchant'
245
+ )
487
246
 
488
247
  {
489
- "Authorization" => "Basic " + Base64.encode64(@options[:login].to_s + ":").strip,
490
- "User-Agent" => "Balanced/v1 ActiveMerchantBindings/#{ActiveMerchant::VERSION}",
491
- "X-Balanced-User-Agent" => @@ua,
248
+ 'Authorization' => 'Basic ' + Base64.encode64(@options[:login].to_s + ':').strip,
249
+ 'User-Agent' => "Balanced/v1.1 ActiveMerchantBindings/#{ActiveMerchant::VERSION}",
250
+ 'Accept' => 'application/vnd.api+json;revision=1.1',
251
+ 'X-Balanced-User-Agent' => @@ua,
492
252
  }
493
253
  end
494
254
  end