onlinepayments-sdk-ruby 3.0.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 (269) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +2 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +140 -0
  5. data/Rakefile +34 -0
  6. data/lib/onlinepayments/sdk/api_exception.rb +42 -0
  7. data/lib/onlinepayments/sdk/api_resource.rb +115 -0
  8. data/lib/onlinepayments/sdk/authenticator.rb +16 -0
  9. data/lib/onlinepayments/sdk/authorization_exception.rb +13 -0
  10. data/lib/onlinepayments/sdk/call_context.rb +26 -0
  11. data/lib/onlinepayments/sdk/client.rb +82 -0
  12. data/lib/onlinepayments/sdk/communication_exception.rb +16 -0
  13. data/lib/onlinepayments/sdk/communicator.rb +300 -0
  14. data/lib/onlinepayments/sdk/communicator_configuration.rb +59 -0
  15. data/lib/onlinepayments/sdk/connection.rb +41 -0
  16. data/lib/onlinepayments/sdk/data_object.rb +31 -0
  17. data/lib/onlinepayments/sdk/declined_payment_exception.rb +30 -0
  18. data/lib/onlinepayments/sdk/declined_payout_exception.rb +32 -0
  19. data/lib/onlinepayments/sdk/declined_refund_exception.rb +32 -0
  20. data/lib/onlinepayments/sdk/declined_transaction_exception.rb +16 -0
  21. data/lib/onlinepayments/sdk/defaultimpl/authorization_type.rb +24 -0
  22. data/lib/onlinepayments/sdk/defaultimpl/default_authenticator.rb +108 -0
  23. data/lib/onlinepayments/sdk/defaultimpl/default_connection.rb +295 -0
  24. data/lib/onlinepayments/sdk/defaultimpl/default_marshaller.rb +32 -0
  25. data/lib/onlinepayments/sdk/defaultimpl.rb +6 -0
  26. data/lib/onlinepayments/sdk/domain/account_on_file.rb +49 -0
  27. data/lib/onlinepayments/sdk/domain/account_on_file_attribute.rb +38 -0
  28. data/lib/onlinepayments/sdk/domain/account_on_file_display_hints.rb +37 -0
  29. data/lib/onlinepayments/sdk/domain/additional_order_input.rb +54 -0
  30. data/lib/onlinepayments/sdk/domain/address.rb +50 -0
  31. data/lib/onlinepayments/sdk/domain/address_personal.rb +58 -0
  32. data/lib/onlinepayments/sdk/domain/airline_data.rb +128 -0
  33. data/lib/onlinepayments/sdk/domain/airline_flight_leg.rb +102 -0
  34. data/lib/onlinepayments/sdk/domain/airline_passenger.rb +38 -0
  35. data/lib/onlinepayments/sdk/domain/amount_breakdown.rb +30 -0
  36. data/lib/onlinepayments/sdk/domain/amount_of_money.rb +30 -0
  37. data/lib/onlinepayments/sdk/domain/api_error.rb +46 -0
  38. data/lib/onlinepayments/sdk/domain/bank_account_iban.rb +26 -0
  39. data/lib/onlinepayments/sdk/domain/browser_data.rb +42 -0
  40. data/lib/onlinepayments/sdk/domain/cancel_payment_response.rb +30 -0
  41. data/lib/onlinepayments/sdk/domain/capture.rb +46 -0
  42. data/lib/onlinepayments/sdk/domain/capture_output.rb +82 -0
  43. data/lib/onlinepayments/sdk/domain/capture_payment_request.rb +38 -0
  44. data/lib/onlinepayments/sdk/domain/capture_response.rb +46 -0
  45. data/lib/onlinepayments/sdk/domain/capture_status_output.rb +26 -0
  46. data/lib/onlinepayments/sdk/domain/captures_response.rb +33 -0
  47. data/lib/onlinepayments/sdk/domain/card.rb +38 -0
  48. data/lib/onlinepayments/sdk/domain/card_essentials.rb +34 -0
  49. data/lib/onlinepayments/sdk/domain/card_fraud_results.rb +34 -0
  50. data/lib/onlinepayments/sdk/domain/card_payment_method_specific_input.rb +98 -0
  51. data/lib/onlinepayments/sdk/domain/card_payment_method_specific_input_base.rb +86 -0
  52. data/lib/onlinepayments/sdk/domain/card_payment_method_specific_input_for_hosted_checkout.rb +26 -0
  53. data/lib/onlinepayments/sdk/domain/card_payment_method_specific_output.rb +78 -0
  54. data/lib/onlinepayments/sdk/domain/card_payout_method_specific_input.rb +38 -0
  55. data/lib/onlinepayments/sdk/domain/card_recurrence_details.rb +26 -0
  56. data/lib/onlinepayments/sdk/domain/card_without_cvv.rb +34 -0
  57. data/lib/onlinepayments/sdk/domain/company_information.rb +26 -0
  58. data/lib/onlinepayments/sdk/domain/complete_payment_card_payment_method_specific_input.rb +30 -0
  59. data/lib/onlinepayments/sdk/domain/complete_payment_request.rb +38 -0
  60. data/lib/onlinepayments/sdk/domain/complete_payment_response.rb +46 -0
  61. data/lib/onlinepayments/sdk/domain/contact_details.rb +42 -0
  62. data/lib/onlinepayments/sdk/domain/create_hosted_checkout_request.rb +78 -0
  63. data/lib/onlinepayments/sdk/domain/create_hosted_checkout_response.rb +48 -0
  64. data/lib/onlinepayments/sdk/domain/create_hosted_tokenization_request.rb +38 -0
  65. data/lib/onlinepayments/sdk/domain/create_hosted_tokenization_response.rb +50 -0
  66. data/lib/onlinepayments/sdk/domain/create_mandate_request.rb +58 -0
  67. data/lib/onlinepayments/sdk/domain/create_mandate_response.rb +38 -0
  68. data/lib/onlinepayments/sdk/domain/create_mandate_with_return_url.rb +58 -0
  69. data/lib/onlinepayments/sdk/domain/create_payment_request.rb +74 -0
  70. data/lib/onlinepayments/sdk/domain/create_payment_response.rb +46 -0
  71. data/lib/onlinepayments/sdk/domain/create_payout_request.rb +46 -0
  72. data/lib/onlinepayments/sdk/domain/create_token_request.rb +34 -0
  73. data/lib/onlinepayments/sdk/domain/created_payment_output.rb +34 -0
  74. data/lib/onlinepayments/sdk/domain/created_token_response.rb +50 -0
  75. data/lib/onlinepayments/sdk/domain/customer.rb +86 -0
  76. data/lib/onlinepayments/sdk/domain/customer_account.rb +70 -0
  77. data/lib/onlinepayments/sdk/domain/customer_account_authentication.rb +30 -0
  78. data/lib/onlinepayments/sdk/domain/customer_device.rb +50 -0
  79. data/lib/onlinepayments/sdk/domain/customer_payment_activity.rb +34 -0
  80. data/lib/onlinepayments/sdk/domain/customer_token.rb +46 -0
  81. data/lib/onlinepayments/sdk/domain/decrypted_payment_data.rb +42 -0
  82. data/lib/onlinepayments/sdk/domain/directory_entry.rb +34 -0
  83. data/lib/onlinepayments/sdk/domain/empty_validator.rb +12 -0
  84. data/lib/onlinepayments/sdk/domain/error_response.rb +37 -0
  85. data/lib/onlinepayments/sdk/domain/external_cardholder_authentication_data.rb +58 -0
  86. data/lib/onlinepayments/sdk/domain/external_token_linked.rb +34 -0
  87. data/lib/onlinepayments/sdk/domain/fixed_list_validator.rb +32 -0
  88. data/lib/onlinepayments/sdk/domain/fraud_fields.rb +30 -0
  89. data/lib/onlinepayments/sdk/domain/fraud_results.rb +26 -0
  90. data/lib/onlinepayments/sdk/domain/g_pay_three_d_secure.rb +46 -0
  91. data/lib/onlinepayments/sdk/domain/get_hosted_checkout_response.rb +34 -0
  92. data/lib/onlinepayments/sdk/domain/get_hosted_tokenization_response.rb +34 -0
  93. data/lib/onlinepayments/sdk/domain/get_iin_details_request.rb +34 -0
  94. data/lib/onlinepayments/sdk/domain/get_iin_details_response.rb +45 -0
  95. data/lib/onlinepayments/sdk/domain/get_mandate_response.rb +30 -0
  96. data/lib/onlinepayments/sdk/domain/get_payment_product_groups_response.rb +33 -0
  97. data/lib/onlinepayments/sdk/domain/get_payment_products_response.rb +33 -0
  98. data/lib/onlinepayments/sdk/domain/gift_card_purchase.rb +34 -0
  99. data/lib/onlinepayments/sdk/domain/hosted_checkout_specific_input.rb +66 -0
  100. data/lib/onlinepayments/sdk/domain/hosted_checkout_specific_output.rb +30 -0
  101. data/lib/onlinepayments/sdk/domain/iin_detail.rb +30 -0
  102. data/lib/onlinepayments/sdk/domain/label_template_element.rb +30 -0
  103. data/lib/onlinepayments/sdk/domain/length_validator.rb +30 -0
  104. data/lib/onlinepayments/sdk/domain/line_item.rb +46 -0
  105. data/lib/onlinepayments/sdk/domain/line_item_invoice_data.rb +26 -0
  106. data/lib/onlinepayments/sdk/domain/loan_recipient.rb +42 -0
  107. data/lib/onlinepayments/sdk/domain/lodging_data.rb +26 -0
  108. data/lib/onlinepayments/sdk/domain/mandate_address.rb +42 -0
  109. data/lib/onlinepayments/sdk/domain/mandate_contact_details.rb +26 -0
  110. data/lib/onlinepayments/sdk/domain/mandate_customer.rb +58 -0
  111. data/lib/onlinepayments/sdk/domain/mandate_merchant_action.rb +34 -0
  112. data/lib/onlinepayments/sdk/domain/mandate_personal_information.rb +34 -0
  113. data/lib/onlinepayments/sdk/domain/mandate_personal_name.rb +30 -0
  114. data/lib/onlinepayments/sdk/domain/mandate_redirect_data.rb +30 -0
  115. data/lib/onlinepayments/sdk/domain/mandate_response.rb +50 -0
  116. data/lib/onlinepayments/sdk/domain/merchant_action.rb +34 -0
  117. data/lib/onlinepayments/sdk/domain/mobile_payment_data.rb +30 -0
  118. data/lib/onlinepayments/sdk/domain/mobile_payment_method_hosted_checkout_specific_input.rb +30 -0
  119. data/lib/onlinepayments/sdk/domain/mobile_payment_method_specific_input.rb +62 -0
  120. data/lib/onlinepayments/sdk/domain/mobile_payment_method_specific_output.rb +58 -0
  121. data/lib/onlinepayments/sdk/domain/mobile_payment_product320_specific_input.rb +30 -0
  122. data/lib/onlinepayments/sdk/domain/operation_output.rb +58 -0
  123. data/lib/onlinepayments/sdk/domain/order.rb +70 -0
  124. data/lib/onlinepayments/sdk/domain/order_line_details.rb +54 -0
  125. data/lib/onlinepayments/sdk/domain/order_references.rb +34 -0
  126. data/lib/onlinepayments/sdk/domain/order_status_output.rb +49 -0
  127. data/lib/onlinepayments/sdk/domain/order_type_information.rb +30 -0
  128. data/lib/onlinepayments/sdk/domain/payment_account_on_file.rb +30 -0
  129. data/lib/onlinepayments/sdk/domain/payment_context.rb +38 -0
  130. data/lib/onlinepayments/sdk/domain/payment_creation_output.rb +38 -0
  131. data/lib/onlinepayments/sdk/domain/payment_details_response.rb +65 -0
  132. data/lib/onlinepayments/sdk/domain/payment_error_response.rb +45 -0
  133. data/lib/onlinepayments/sdk/domain/payment_output.rb +82 -0
  134. data/lib/onlinepayments/sdk/domain/payment_product.rb +102 -0
  135. data/lib/onlinepayments/sdk/domain/payment_product130_specific_input.rb +30 -0
  136. data/lib/onlinepayments/sdk/domain/payment_product130_specific_three_d_secure.rb +38 -0
  137. data/lib/onlinepayments/sdk/domain/payment_product302_specific_data.rb +32 -0
  138. data/lib/onlinepayments/sdk/domain/payment_product320_specific_data.rb +36 -0
  139. data/lib/onlinepayments/sdk/domain/payment_product5100_specific_input.rb +26 -0
  140. data/lib/onlinepayments/sdk/domain/payment_product5402_specific_output.rb +26 -0
  141. data/lib/onlinepayments/sdk/domain/payment_product5500_specific_output.rb +34 -0
  142. data/lib/onlinepayments/sdk/domain/payment_product771_specific_output.rb +26 -0
  143. data/lib/onlinepayments/sdk/domain/payment_product840_customer_account.rb +54 -0
  144. data/lib/onlinepayments/sdk/domain/payment_product840_specific_output.rb +53 -0
  145. data/lib/onlinepayments/sdk/domain/payment_product_display_hints.rb +34 -0
  146. data/lib/onlinepayments/sdk/domain/payment_product_field.rb +46 -0
  147. data/lib/onlinepayments/sdk/domain/payment_product_field_data_restrictions.rb +34 -0
  148. data/lib/onlinepayments/sdk/domain/payment_product_field_display_element.rb +38 -0
  149. data/lib/onlinepayments/sdk/domain/payment_product_field_display_hints.rb +70 -0
  150. data/lib/onlinepayments/sdk/domain/payment_product_field_form_element.rb +37 -0
  151. data/lib/onlinepayments/sdk/domain/payment_product_field_tooltip.rb +30 -0
  152. data/lib/onlinepayments/sdk/domain/payment_product_field_validators.rb +90 -0
  153. data/lib/onlinepayments/sdk/domain/payment_product_filter.rb +42 -0
  154. data/lib/onlinepayments/sdk/domain/payment_product_filters_hosted_checkout.rb +37 -0
  155. data/lib/onlinepayments/sdk/domain/payment_product_group.rb +52 -0
  156. data/lib/onlinepayments/sdk/domain/payment_product_networks_response.rb +32 -0
  157. data/lib/onlinepayments/sdk/domain/payment_references.rb +30 -0
  158. data/lib/onlinepayments/sdk/domain/payment_response.rb +54 -0
  159. data/lib/onlinepayments/sdk/domain/payment_status_output.rb +57 -0
  160. data/lib/onlinepayments/sdk/domain/payout_error_response.rb +45 -0
  161. data/lib/onlinepayments/sdk/domain/payout_output.rb +30 -0
  162. data/lib/onlinepayments/sdk/domain/payout_response.rb +46 -0
  163. data/lib/onlinepayments/sdk/domain/payout_result.rb +46 -0
  164. data/lib/onlinepayments/sdk/domain/payout_status_output.rb +34 -0
  165. data/lib/onlinepayments/sdk/domain/personal_information.rb +38 -0
  166. data/lib/onlinepayments/sdk/domain/personal_information_token.rb +30 -0
  167. data/lib/onlinepayments/sdk/domain/personal_name.rb +34 -0
  168. data/lib/onlinepayments/sdk/domain/personal_name_token.rb +30 -0
  169. data/lib/onlinepayments/sdk/domain/product_directory.rb +33 -0
  170. data/lib/onlinepayments/sdk/domain/protection_eligibility.rb +30 -0
  171. data/lib/onlinepayments/sdk/domain/range_validator.rb +30 -0
  172. data/lib/onlinepayments/sdk/domain/redirect_data.rb +30 -0
  173. data/lib/onlinepayments/sdk/domain/redirect_payment_method_specific_input.rb +66 -0
  174. data/lib/onlinepayments/sdk/domain/redirect_payment_method_specific_output.rb +66 -0
  175. data/lib/onlinepayments/sdk/domain/redirect_payment_product809_specific_input.rb +26 -0
  176. data/lib/onlinepayments/sdk/domain/redirect_payment_product840_specific_input.rb +26 -0
  177. data/lib/onlinepayments/sdk/domain/redirection_data.rb +26 -0
  178. data/lib/onlinepayments/sdk/domain/refund_card_method_specific_output.rb +30 -0
  179. data/lib/onlinepayments/sdk/domain/refund_e_wallet_method_specific_output.rb +38 -0
  180. data/lib/onlinepayments/sdk/domain/refund_error_response.rb +45 -0
  181. data/lib/onlinepayments/sdk/domain/refund_mobile_method_specific_output.rb +34 -0
  182. data/lib/onlinepayments/sdk/domain/refund_output.rb +82 -0
  183. data/lib/onlinepayments/sdk/domain/refund_payment_product840_customer_account.rb +34 -0
  184. data/lib/onlinepayments/sdk/domain/refund_payment_product840_specific_output.rb +30 -0
  185. data/lib/onlinepayments/sdk/domain/refund_redirect_method_specific_output.rb +30 -0
  186. data/lib/onlinepayments/sdk/domain/refund_request.rb +38 -0
  187. data/lib/onlinepayments/sdk/domain/refund_response.rb +46 -0
  188. data/lib/onlinepayments/sdk/domain/refunds_response.rb +33 -0
  189. data/lib/onlinepayments/sdk/domain/regular_expression_validator.rb +26 -0
  190. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_input.rb +34 -0
  191. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_input_base.rb +34 -0
  192. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_output.rb +42 -0
  193. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_product771_specific_input.rb +34 -0
  194. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_product771_specific_input_base.rb +34 -0
  195. data/lib/onlinepayments/sdk/domain/session_request.rb +32 -0
  196. data/lib/onlinepayments/sdk/domain/session_response.rb +48 -0
  197. data/lib/onlinepayments/sdk/domain/shipping.rb +58 -0
  198. data/lib/onlinepayments/sdk/domain/shopping_cart.rb +64 -0
  199. data/lib/onlinepayments/sdk/domain/shopping_cart_extension.rb +52 -0
  200. data/lib/onlinepayments/sdk/domain/test_connection.rb +26 -0
  201. data/lib/onlinepayments/sdk/domain/three_d_secure.rb +78 -0
  202. data/lib/onlinepayments/sdk/domain/three_d_secure_base.rb +58 -0
  203. data/lib/onlinepayments/sdk/domain/three_d_secure_data.rb +34 -0
  204. data/lib/onlinepayments/sdk/domain/three_d_secure_results.rb +30 -0
  205. data/lib/onlinepayments/sdk/domain/token_card.rb +34 -0
  206. data/lib/onlinepayments/sdk/domain/token_card_data.rb +30 -0
  207. data/lib/onlinepayments/sdk/domain/token_card_specific_input.rb +30 -0
  208. data/lib/onlinepayments/sdk/domain/token_data.rb +30 -0
  209. data/lib/onlinepayments/sdk/domain/token_e_wallet.rb +34 -0
  210. data/lib/onlinepayments/sdk/domain/token_response.rb +58 -0
  211. data/lib/onlinepayments/sdk/domain/value_mapping_element.rb +37 -0
  212. data/lib/onlinepayments/sdk/endpoint_configuration.rb +127 -0
  213. data/lib/onlinepayments/sdk/exceptions.rb +8 -0
  214. data/lib/onlinepayments/sdk/factory.rb +136 -0
  215. data/lib/onlinepayments/sdk/idempotence_exception.rb +24 -0
  216. data/lib/onlinepayments/sdk/logging/communicator_logger.rb +22 -0
  217. data/lib/onlinepayments/sdk/logging/log_message_builder.rb +56 -0
  218. data/lib/onlinepayments/sdk/logging/logging_capable.rb +17 -0
  219. data/lib/onlinepayments/sdk/logging/logging_util.rb +286 -0
  220. data/lib/onlinepayments/sdk/logging/request_log_message_builder.rb +39 -0
  221. data/lib/onlinepayments/sdk/logging/response_log_message_builder.rb +34 -0
  222. data/lib/onlinepayments/sdk/logging/ruby_communicator_logger.rb +57 -0
  223. data/lib/onlinepayments/sdk/logging/stdout_communicator_logger.rb +34 -0
  224. data/lib/onlinepayments/sdk/logging.rb +10 -0
  225. data/lib/onlinepayments/sdk/marshaller.rb +24 -0
  226. data/lib/onlinepayments/sdk/marshaller_syntax_exception.rb +6 -0
  227. data/lib/onlinepayments/sdk/merchant/hostedcheckout/hosted_checkout_client.rb +86 -0
  228. data/lib/onlinepayments/sdk/merchant/hostedtokenization/hosted_tokenization_client.rb +86 -0
  229. data/lib/onlinepayments/sdk/merchant/mandates/mandates_client.rb +182 -0
  230. data/lib/onlinepayments/sdk/merchant/merchant_client.rb +89 -0
  231. data/lib/onlinepayments/sdk/merchant/payments/payments_client.rb +322 -0
  232. data/lib/onlinepayments/sdk/merchant/payouts/payouts_client.rb +86 -0
  233. data/lib/onlinepayments/sdk/merchant/productgroups/get_product_group_params.rb +57 -0
  234. data/lib/onlinepayments/sdk/merchant/productgroups/get_product_groups_params.rb +57 -0
  235. data/lib/onlinepayments/sdk/merchant/productgroups/product_groups_client.rb +87 -0
  236. data/lib/onlinepayments/sdk/merchant/products/get_payment_product_networks_params.rb +38 -0
  237. data/lib/onlinepayments/sdk/merchant/products/get_payment_product_params.rb +57 -0
  238. data/lib/onlinepayments/sdk/merchant/products/get_payment_products_params.rb +57 -0
  239. data/lib/onlinepayments/sdk/merchant/products/get_product_directory_params.rb +30 -0
  240. data/lib/onlinepayments/sdk/merchant/products/products_client.rb +155 -0
  241. data/lib/onlinepayments/sdk/merchant/services/services_client.rb +82 -0
  242. data/lib/onlinepayments/sdk/merchant/sessions/sessions_client.rb +54 -0
  243. data/lib/onlinepayments/sdk/merchant/tokens/tokens_client.rb +116 -0
  244. data/lib/onlinepayments/sdk/meta_data_provider.rb +150 -0
  245. data/lib/onlinepayments/sdk/modules.rb +62 -0
  246. data/lib/onlinepayments/sdk/not_found_exception.rb +16 -0
  247. data/lib/onlinepayments/sdk/param_request.rb +11 -0
  248. data/lib/onlinepayments/sdk/payment_platform_exception.rb +15 -0
  249. data/lib/onlinepayments/sdk/pooled_connection.rb +21 -0
  250. data/lib/onlinepayments/sdk/proxy_configuration.rb +74 -0
  251. data/lib/onlinepayments/sdk/reference_exception.rb +14 -0
  252. data/lib/onlinepayments/sdk/request_header.rb +50 -0
  253. data/lib/onlinepayments/sdk/request_param.rb +23 -0
  254. data/lib/onlinepayments/sdk/response_exception.rb +47 -0
  255. data/lib/onlinepayments/sdk/response_header.rb +42 -0
  256. data/lib/onlinepayments/sdk/validation_exception.rb +14 -0
  257. data/lib/onlinepayments/sdk/webhooks/api_version_mismatch_exception.rb +20 -0
  258. data/lib/onlinepayments/sdk/webhooks/in_memory_secret_key_store.rb +56 -0
  259. data/lib/onlinepayments/sdk/webhooks/secret_key_not_available_exception.rb +17 -0
  260. data/lib/onlinepayments/sdk/webhooks/secret_key_store.rb +16 -0
  261. data/lib/onlinepayments/sdk/webhooks/signature_validation_exception.rb +19 -0
  262. data/lib/onlinepayments/sdk/webhooks/webhooks.rb +22 -0
  263. data/lib/onlinepayments/sdk/webhooks/webhooks_event.rb +58 -0
  264. data/lib/onlinepayments/sdk/webhooks/webhooks_helper.rb +100 -0
  265. data/lib/onlinepayments/sdk/webhooks/webhooks_helper_builder.rb +25 -0
  266. data/lib/onlinepayments/sdk/webhooks.rb +11 -0
  267. data/lib/onlinepayments/sdk.rb +26 -0
  268. data/onlinepayments-sdk-ruby.gemspec +28 -0
  269. metadata +416 -0
@@ -0,0 +1,300 @@
1
+ require 'uri'
2
+
3
+ module OnlinePayments::SDK
4
+ # Class responsible for facilitating communication with the Online Payments platform.
5
+ # It combines the following classes to provide communication functionality:
6
+ #
7
+ # api_endpoint:: The base URI ({URI::HTTP}) to the Online Payments platform
8
+ # connection:: {OnlinePayments::SDK::Connection} used to communicate with the Online Payments platform
9
+ # authenticator:: {OnlinePayments::SDK::Authenticator} used for authenticating messages sent
10
+ # meta_data_provider:: {OnlinePayments::SDK::MetaDataProvider} object containing information relevant for sending requests
11
+ # marshaller:: {OnlinePayments::SDK::Marshaller} that is used to marshal and unmarshal data to and from JSON format
12
+ #
13
+ # @attr_reader [OnlinePayments::SDK::Marshaller] marshaller A Marshaller instance used by the communicator for serializing/deserializing to/from JSON
14
+ #
15
+ class Communicator
16
+ include Logging::LoggingCapable
17
+
18
+ # Creates a new Communicator based on the given arguments.
19
+ #
20
+ # @param api_endpoint [String] the base URL to the Online Payments platform
21
+ # @param connection [OnlinePayments::SDK::Connection] used to communicate with the Online Payments platform
22
+ # @param authenticator [OnlinePayments::SDK::Authenticator] used for authenticating messages sent
23
+ # @param meta_data_provider [OnlinePayments::SDK::MetaDataProvider] object containing information relevant for sending requests
24
+ # @param marshaller [OnlinePayments::SDK::Marshaller] used to marshal and unmarshal data to and from JSON format
25
+ #
26
+ def initialize(api_endpoint, connection, authenticator, meta_data_provider, marshaller)
27
+ raise ArgumentError, 'api_endpoint is required' unless api_endpoint
28
+ raise ArgumentError, 'connection is required' unless connection
29
+ raise ArgumentError, 'authenticator is required' unless authenticator
30
+ raise ArgumentError, 'meta_data_provider is required' unless meta_data_provider
31
+ raise ArgumentError('marshaller is required') unless marshaller
32
+
33
+ @api_endpoint = URI(api_endpoint)
34
+ if @api_endpoint.path.length.positive? || @api_endpoint.query || @api_endpoint.fragment
35
+ raise ArgumentError, "Base URL should not contain a path, query or fragment #{@api_endpoint}"
36
+ end
37
+ @connection = connection
38
+ @authenticator = authenticator
39
+ @meta_data_provider = meta_data_provider
40
+ @marshaller = marshaller
41
+ end
42
+
43
+ # Performs a GET request to the Online Payments platform and returns the response as the given response type.
44
+ #
45
+ # @param relative_path [String] path relative to the API endpoint
46
+ # @param request_headers [Array<OnlinePayments::SDK::RequestHeader>, nil] optional array of request headers
47
+ # @param request_parameters [OnlinePayments::SDK::ParamRequest, nil] optional request parameters
48
+ # @param response_type [Type] the response type.
49
+ # @param context [OnlinePayments::SDK::CallContext, nil] optional call context.
50
+ # @return the response of the GET request as the given response type
51
+ # @raise [OnlinePayments::SDK::ResponseException] if the request could not be fulfilled successfully.
52
+ # This occurs for example if the request is not authenticated correctly
53
+ # @raise [OnlinePayments::SDK::NotFoundException] if the requested resource is not found
54
+ # @raise [OnlinePayments::SDK::CommunicationException] if there is an error in communicating with the Online Payments platform.
55
+ # This occurs for example if a timeout occurs.
56
+ def get(relative_path, request_headers, request_parameters, response_type, context)
57
+ connection = @connection
58
+ request_parameter_list = request_parameters&.to_request_parameters
59
+ uri = to_absolute_uri(relative_path, request_parameter_list)
60
+
61
+ request_headers ||= []
62
+ add_generic_headers('GET', uri, request_headers, context)
63
+
64
+ response_status_code, response_headers, response_body = nil
65
+ connection.get(uri, request_headers) do |status_code, headers, content|
66
+ response_status_code = status_code
67
+ response_headers = headers
68
+ response_body = content.read.force_encoding('UTF-8')
69
+ end
70
+ process_response(response_body, response_status_code, response_headers, response_type, relative_path, context)
71
+ end
72
+
73
+ # Performs a DELETE request to the Online Payments platform and returns the response as the given response type.
74
+ #
75
+ # @param relative_path [String] Path relative to the API endpoint
76
+ # @param request_headers [Array<OnlinePayments::SDK::RequestHeader>, nil] Optional array of request headers
77
+ # @param request_parameters [OnlinePayments::SDK::ParamRequest, nil] Optional request parameters
78
+ # @param response_type [Type] The response type.
79
+ # @param context [OnlinePayments::SDK::CallContext, nil] Optional call context.
80
+ # @return The response of the DELETE request as the given response type
81
+ # @raise [OnlinePayments::SDK::ResponseException] if the request could not be fulfilled successfully.
82
+ # This occurs for example if the request is not authenticated correctly
83
+ # @raise [OnlinePayments::SDK::NotFoundException] if the requested resource is not found
84
+ # @raise [OnlinePayments::SDK::CommunicationException] if there is an error in communicating with the Online Payments platform.
85
+ # This occurs for example if a timeout occurs.
86
+ def delete(relative_path, request_headers, request_parameters, response_type, context)
87
+ connection = @connection
88
+ request_parameter_list = request_parameters&.to_request_parameters
89
+ uri = to_absolute_uri(relative_path, request_parameter_list)
90
+ request_headers ||= []
91
+ add_generic_headers('DELETE', uri, request_headers, context)
92
+
93
+ response_status_code, response_headers, response_body = nil
94
+ connection.delete(uri, request_headers) do |status_code, headers, content|
95
+ response_status_code = status_code
96
+ response_headers = headers
97
+ response_body = content.read.force_encoding('UTF-8')
98
+ end
99
+ process_response(response_body, response_status_code, response_headers, response_type, relative_path, context)
100
+ end
101
+
102
+ # Performs a POST request to the Online Payments platform and returns the response as the given response type.
103
+ #
104
+ # @param relative_path [String] Path relative to the API endpoint
105
+ # @param request_headers [Array<OnlinePayments::SDK::RequestHeader>, nil] Optional array of request headers
106
+ # @param request_parameters [OnlinePayments::SDK::ParamRequest, nil] Optional request parameters
107
+ # @param request_body [OnlinePayments::SDK::DataObject] The optional request body
108
+ # @param response_type [Type] The response type.
109
+ # @param context [OnlinePayments::SDK::CallContext, nil] Optional call context.
110
+ # @return The response of the POST request as the given response type
111
+ # @raise [OnlinePayments::SDK::ResponseException] if the request could not be fulfilled successfully.
112
+ # This occurs for example if the request is not authenticated correctly
113
+ # @raise [OnlinePayments::SDK::NotFoundException] if the requested resource is not found
114
+ # @raise [OnlinePayments::SDK::CommunicationException] if there is an error in communicating with the Online Payments platform.
115
+ # This occurs for example if a timeout occurs.
116
+ def post(relative_path, request_headers, request_parameters, request_body, response_type, context)
117
+ request_parameter_list = request_parameters&.to_request_parameters
118
+ uri = to_absolute_uri(relative_path, request_parameter_list)
119
+ request_headers ||= []
120
+
121
+ body = nil
122
+ if request_body
123
+ request_headers.push(RequestHeader.new('Content-Type', 'application/json'))
124
+ body = @marshaller.marshal(request_body)
125
+ else
126
+ # Set the content-type, even though there is no body, to prevent the httpClient from
127
+ # adding a content-type header after authentication has been generated.
128
+ request_headers.push(RequestHeader.new('Content-Type', 'text/plain'))
129
+ end
130
+
131
+ add_generic_headers('POST', uri, request_headers, context)
132
+
133
+ response_status_code, response_headers, response_body = nil
134
+ @connection.post(uri, request_headers, body) do |status_code, headers, content|
135
+ response_status_code = status_code
136
+ response_headers = headers
137
+ response_body = content.read.force_encoding('UTF-8')
138
+ end
139
+ process_response(response_body, response_status_code, response_headers, response_type, relative_path, context)
140
+ end
141
+
142
+ # Performs a PUT request to the Online Payments platform and returns the response as the given response type.
143
+ #
144
+ # @param relative_path [String] Path relative to the API endpoint
145
+ # @param request_headers [Array<OnlinePayments::SDK::RequestHeader>, nil] Optional array of request headers
146
+ # @param request_parameters [OnlinePayments::SDK::ParamRequest, nil] Optional request parameters
147
+ # @param request_body [OnlinePayments::SDK::DataObject]
148
+ # The optional request body
149
+ # @param response_type [Type] The response type.
150
+ # @param context [OnlinePayments::SDK::CallContext, nil] Optional call context.
151
+ # @return The response of the PUT request as the given response type
152
+ # @raise [OnlinePayments::SDK::ResponseException] if the request could not be fulfilled successfully.
153
+ # This occurs for example if the request is not authenticated correctly
154
+ # @raise [OnlinePayments::SDK::NotFoundException] if the requested resource is not found
155
+ # @raise [OnlinePayments::SDK::CommunicationException] if there is an error in communicating with the Online Payments platform.
156
+ # This occurs for example if a timeout occurs.
157
+ def put(relative_path, request_headers, request_parameters, request_body, response_type, context)
158
+ request_parameter_list = request_parameters&.to_request_parameters
159
+ uri = to_absolute_uri(relative_path, request_parameter_list)
160
+ request_headers ||= []
161
+
162
+ body = nil
163
+ if request_body
164
+ request_headers.push(RequestHeader.new('Content-Type', 'application/json'))
165
+ body = @marshaller.marshal(request_body)
166
+ else
167
+ # Set the content-type, even though there is no body, to prevent the httpClient from
168
+ # adding a content-type header after authentication has been generated.
169
+ request_headers.push(RequestHeader.new('Content-Type', 'text/plain'))
170
+ end
171
+ add_generic_headers('PUT', uri, request_headers, context)
172
+
173
+ response_status_code, response_headers, response_body = nil
174
+ @connection.put(uri, request_headers, body) do |status_code, headers, content|
175
+ response_status_code = status_code
176
+ response_headers = headers
177
+ response_body = content.read.force_encoding('UTF-8')
178
+ end
179
+ process_response(response_body, response_status_code, response_headers, response_type, relative_path, context)
180
+ end
181
+
182
+ # Closes any connections idle for more than _idle_time_ seconds.
183
+ # Will not have any effect if the connection is not a pooled connection (an instance of {OnlinePayments::SDK::PooledConnection}).
184
+ def close_idle_connections(idle_time)
185
+ @connection.close_idle_connections(idle_time) if connection.is_a? PooledConnection
186
+ end
187
+
188
+ # Closes any connections that have expired.
189
+ # Will not have any effect if the connection is not a pooled connection (an instance of {OnlinePayments::SDK::PooledConnection}).
190
+ def close_expired_connections
191
+ @connection.close_expired_connections if connection.is_a? PooledConnection
192
+ end
193
+
194
+ # Enables logging outgoing requests and incoming responses by registering the _communicator_logger_.
195
+ # Note that only one logger can be registered at a time and calling _enable_logging_
196
+ # a second time will override the old logger instance with the new one.
197
+ #
198
+ # @param communicator_logger [OnlinePayments::SDK::Logging::CommunicatorLogger] The communicator logger the requests and responses are logged to
199
+ def enable_logging(communicator_logger)
200
+ @connection.enable_logging(communicator_logger)
201
+ end
202
+
203
+ # Disables logging by unregistering any previous logger that might be registered.
204
+ def disable_logging
205
+ @connection.disable_logging
206
+ end
207
+
208
+ # Frees networking resources by closing the underlying network connections.
209
+ # After calling _close_, any use of the _get_, _delete_, _post_ and _put_ methods will not function
210
+ # and likely result in an error.
211
+ def close
212
+ @connection.close
213
+ end
214
+
215
+ attr_reader :api_endpoint
216
+ attr_reader :connection
217
+ attr_reader :authenticator
218
+ attr_reader :meta_data_provider
219
+ attr_reader :marshaller
220
+
221
+ protected
222
+
223
+ # Constructs a full URL using the base URL and the given relative path and request_parameters.
224
+ # The returned URL is a *URI* object.
225
+ #
226
+ # @param relative_path [String] The relative path of the URL.
227
+ # @param request_parameters [Array<OnlinePayments::SDK::RequestParam>, nil] A list of request parameters that each have #name and #value
228
+ # which represent the parameter name and value respectively.
229
+ def to_absolute_uri(relative_path, request_parameters)
230
+ raise RuntimeError('api_endpoint should not contain a path') unless @api_endpoint.path.nil? || @api_endpoint.path.empty?
231
+
232
+ if @api_endpoint.userinfo || @api_endpoint.query || @api_endpoint.fragment
233
+ raise RuntimeError, 'api_endpoint should not contain user info, query or fragment'
234
+ end
235
+ absolute_path = relative_path.start_with?('/') ? relative_path : "/#{relative_path}"
236
+ uri = URI::HTTP.new(@api_endpoint.scheme, nil, @api_endpoint.host,
237
+ @api_endpoint.port, nil, absolute_path, nil, nil, nil)
238
+ request_parameters&.each do |nvp|
239
+ parameters = URI.decode_www_form(uri.query || '') << [nvp.name, nvp.value]
240
+ uri.query = URI.encode_www_form(parameters)
241
+ end
242
+ uri
243
+ end
244
+
245
+ # Adds several standard headers to the http headers.
246
+ # This method will add the 'Date' and 'Authorization' header;
247
+ # the 'X-GCS-Idempotence-Key' header will also be added if an idempotence context is given
248
+ #
249
+ # @param http_method [String] 'GET', 'DELETE', 'POST' or 'PUT' depending on the HTTP method being used
250
+ # @param uri [URI::HTTP] The full URI to the Online Payments platform,
251
+ # including the relative path and request parameters.
252
+ # @param request_headers [Array<OnlinePayments::SDK::RequestHeader>] List of request headers in which which new headers will be added
253
+ # @param context [OnlinePayments::SDK::CallContext, nil] object that will be used to produce
254
+ # an Idempotence header to prevent accidental request duplication.
255
+ def add_generic_headers(http_method, uri, request_headers, context = nil)
256
+ request_headers.concat(meta_data_provider.meta_data_headers)
257
+ request_headers.push(RequestHeader.new('Date', get_header_date_string))
258
+ if context&.idempotence_key
259
+ request_headers.push(RequestHeader.new('X-GCS-Idempotence-Key', context.idempotence_key))
260
+ end
261
+ authentication_signature = @authenticator.create_simple_authentication_signature(http_method, uri, request_headers)
262
+ request_headers.push(RequestHeader.new('Authorization', authentication_signature))
263
+ end
264
+
265
+ def get_header_date_string
266
+ Time.now.utc.strftime('%a, %d %b %Y %H:%M:%S GMT')
267
+ end
268
+
269
+ def process_response(body, status, headers, response_type, request_path, context)
270
+ update_context(headers, context) if context
271
+
272
+ throw_exception_if_necessary(body, status, headers, request_path)
273
+ @marshaller.unmarshal(body, response_type)
274
+ end
275
+
276
+ def update_context(headers, context)
277
+ context.idempotence_request_timestamp = ResponseHeader.get_header_value(headers, 'X-GCS-Idempotence-Request-Timestamp')
278
+ end
279
+
280
+ def throw_exception_if_necessary(body, status_code, headers, request_path)
281
+ return if status_code >= 200 && status_code < 300
282
+ raise ResponseException.new status_code, headers, body unless body && !is_json(headers)
283
+
284
+ cause = ResponseException.new(status_code, headers, body)
285
+ if status_code == 404
286
+ raise NotFoundException, cause, "The requested resource was not found; invalid path: #{request_path}"
287
+ end
288
+
289
+ raise CommunicationException, cause
290
+ end
291
+
292
+ private
293
+
294
+ def is_json(headers)
295
+ content_type = ResponseHeader.get_header_value(headers, 'Content-Type')
296
+ content_type.nil? || 'application/json'.casecmp(content_type).zero? ||
297
+ content_type.downcase.start_with?('application/json')
298
+ end
299
+ end
300
+ end
@@ -0,0 +1,59 @@
1
+ module OnlinePayments::SDK
2
+
3
+ # A CommunicatorConfiguration stores all data used to initialize an {OnlinePayments::SDK::Communicator}.
4
+ #
5
+ # @attr [String] api_endpoint Base URL to the Online Payments platform
6
+ # @attr [String] api_key_id Identifier of the _secret_api_key_ used in authentication.
7
+ # @attr [String] secret_api_key Secret key used in authentication
8
+ # @attr [String] authorization_type String representing the authentication algorithm used
9
+ class CommunicatorConfiguration < EndpointConfiguration
10
+
11
+ # Creates a new CommunicatorConfiguration instance.
12
+ #
13
+ # If a _properties_ object is given, it will be parsed like a hash in order to read these attributes.
14
+ # If a value is given in both the _properties_ hash and as a separate parameter,
15
+ # the separate parameter will take precedence over the value in the properties.
16
+ #
17
+ # @param properties [Hash] hash that may contain any of the other parameters.
18
+ # @param api_endpoint [String] the base URL to the Online Payments platform.
19
+ # @param api_key_id [String] the identifier of the _secret_api_key_ used to authenticate requests.
20
+ # @param secret_api_key [String] the key used to authenticate requests sent to the Online Payments platform.
21
+ # @param authorization_type [String] string describing the authorization protocol to follow.
22
+ # @param connect_timeout [Integer] the number of seconds before a connection attempt with the Online Payments platform times out.
23
+ # @param socket_timeout [Integer] the number of seconds before a timeout occurs when transmitting data to or from the Online Payments platform.
24
+ # @param max_connections [Integer] the number of connections with the Online Payments platform that are kept alive in the connection pool.
25
+ # These connections will be reused when possible.
26
+ # @param proxy_configuration [OnlinePayments::SDK::ProxyConfiguration] stores the URL to a proxy to be used in all communication,
27
+ # or nil if no proxy should be used.
28
+ # @param integrator [String] name of the integrator
29
+ # @param shopping_cart_extension [OnlinePayments::SDK::Domain::ShoppingCartExtension] stores shopping cart-related metadata.
30
+ # @see EndpointConfiguration#initialize
31
+ def initialize(properties: nil, api_endpoint: nil, api_key_id: nil,
32
+ secret_api_key: nil, authorization_type: nil,
33
+ connect_timeout: nil, socket_timeout: nil,
34
+ max_connections: nil, proxy_configuration: nil,
35
+ integrator: nil, shopping_cart_extension: nil)
36
+ if properties
37
+ super(properties, 'onlinePayments.api')
38
+ @authorization_type = properties['onlinePayments.api.authorizationType'] ?
39
+ DefaultImpl::AuthorizationType.get_authorization(properties['onlinePayments.api.authorizationType']) :
40
+ DefaultImpl::AuthorizationType::V1HMAC
41
+ end
42
+ @api_endpoint = api_endpoint if api_endpoint
43
+ @api_key_id = api_key_id if api_key_id
44
+ @secret_api_key = secret_api_key if secret_api_key
45
+ @authorization_type = DefaultImpl::AuthorizationType.get_authorization(authorization_type) if authorization_type
46
+ @connect_timeout = connect_timeout if connect_timeout
47
+ @socket_timeout = socket_timeout if socket_timeout
48
+ @max_connections = max_connections if max_connections
49
+ @proxy_configuration = proxy_configuration if proxy_configuration
50
+ @integrator = integrator if integrator
51
+ @shopping_cart_extension = shopping_cart_extension if shopping_cart_extension
52
+ end
53
+
54
+ attr_accessor :api_endpoint
55
+ attr_accessor :api_key_id
56
+ attr_accessor :secret_api_key
57
+ attr_accessor :authorization_type
58
+ end
59
+ end
@@ -0,0 +1,41 @@
1
+ module OnlinePayments::SDK
2
+
3
+ # Class used to communicate using the HTTP (or HTTPS) protocol.
4
+ # Performs GET, DELETE, POST and PUT requests given a target uri and request headers.
5
+ # @see OnlinePayments::SDK::DefaultImpl::DefaultConnection
6
+ class Connection
7
+ include OnlinePayments::SDK::Logging::LoggingCapable
8
+
9
+ # Performs a GET request to _uri_ using _request_headers_,
10
+ # and yields the response as the status code, headers and body.
11
+ #
12
+ # @yield (Integer, Array<OnlinePayments::SDK::ResponseHeader>, IO) The status code, headers and body of the response.
13
+ def get(uri, request_headers)
14
+ raise NotImplementedError
15
+ end
16
+
17
+ # Performs a DELETE request to _uri_ using _request_headers_,
18
+ # and yields the response as the status code, headers and body.
19
+ #
20
+ # @yield (Integer, Array<OnlinePayments::SDK::ResponseHeader>, IO) The status code, headers and body of the response.
21
+ def delete(uri, request_headers)
22
+ raise NotImplementedError
23
+ end
24
+
25
+ # Performs a POST request to _uri_ using _request_headers_ and _body_,
26
+ # and yields the response as the status code, headers and body.
27
+ #
28
+ # @yield (Integer, Array<OnlinePayments::SDK::ResponseHeader>, IO) The status code, headers and body of the response.
29
+ def post(uri, request_headers, body)
30
+ raise NotImplementedError
31
+ end
32
+
33
+ # Performs a PUT request to _uri_ using _request_headers_ and _body_,
34
+ # and yields the response as the status code, headers and body.
35
+ #
36
+ # @yield (Integer, Array<OnlinePayments::SDK::ResponseHeader>, IO) The status code, headers and body of the response.
37
+ def put(uri, request_headers, body)
38
+ raise NotImplementedError
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,31 @@
1
+ require 'json'
2
+
3
+ module OnlinePayments::SDK
4
+
5
+ # Base class for all SDK data objects, supports marshalling and unmarshalling the data object to and from JSON.
6
+ class DataObject
7
+
8
+ # Returns a hash representation of the DataObject.
9
+ # The hash contains camelCase representations of the variables, and their values.
10
+ # Should be overridden to add all instance variables of the object.
11
+ #
12
+ # @return [Hash]
13
+ def to_h
14
+ {}
15
+ end
16
+
17
+ # Create a new instance of this object (DataObject or descendant)
18
+ # from a hash containing attribute values in camelCase.
19
+ # Note that the hash contains Strings as keys instead of more commonly used tokens.
20
+ def self.new_from_hash(hash)
21
+ obj = self.new
22
+ obj.from_hash(hash)
23
+ obj
24
+ end
25
+
26
+ # Set attributes from values in parameter hash.
27
+ # Should be overridden by descendants in order to properly restore their attributes from the hash.
28
+ # Note that the hash contains Strings as keys instead of more commonly used tokens.
29
+ def from_hash(hash) end
30
+ end
31
+ end
@@ -0,0 +1,30 @@
1
+ module OnlinePayments::SDK
2
+
3
+ # Indicates that a payment is declined by the Online Payments platform or one of its downstream partners/acquirers.
4
+ class DeclinedPaymentException < DeclinedTransactionException
5
+
6
+ # Create a new DeclinedPaymentException.
7
+ # @see ApiException#initialize
8
+ def initialize(status_code, response_body, errors)
9
+ super(status_code, response_body, errors&.error_id, errors&.errors, build_message(errors))
10
+ @errors = errors
11
+ end
12
+
13
+ # The declined payment result returned by the Online Payments platform.
14
+ # @return [OnlinePayments::SDK::Domain::CreatePaymentResult, nil]
15
+ def payment_result
16
+ @errors&.payment_result
17
+ end
18
+
19
+ private
20
+
21
+ def build_message(errors)
22
+ payment = errors&.payment_result&.payment
23
+ if payment
24
+ "declined payment '#{payment.id}' with status '#{payment.status}'"
25
+ else
26
+ 'the Online Payments platform returned a declined payment response'
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,32 @@
1
+ require 'onlinepayments/sdk/declined_transaction_exception'
2
+
3
+ module OnlinePayments::SDK
4
+
5
+ # Indicates that a payout is declined by the Online Payments platform or one of its downstream partners/acquirers.
6
+ class DeclinedPayoutException < DeclinedTransactionException
7
+
8
+ # Create a new DeclinedPayoutException
9
+ # @see ApiException#initialize
10
+ def initialize(status_code, response_body, errors)
11
+ super(status_code, response_body, errors&.error_id, errors&.errors, build_message(errors))
12
+ @errors = errors
13
+ end
14
+
15
+ # The declined payout result as returned by the Online Payments platform.
16
+ # @return [OnlinePayments::SDK::Domain::PayoutResult, nil]
17
+ def payout_result
18
+ @errors&.payout_result
19
+ end
20
+
21
+ private
22
+
23
+ def build_message(errors)
24
+ payout = errors&.payout_result
25
+ if payout
26
+ "declined payout '#{payout.id}' with status '#{payout.status}'"
27
+ else
28
+ 'the Online Payments platform returned a declined payout response'
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ require 'onlinepayments/sdk/declined_transaction_exception'
2
+
3
+ module OnlinePayments::SDK
4
+
5
+ # Indicates that a refund is declined by the Online Payments platform or one of its downstream partners/acquirers.
6
+ class DeclinedRefundException < DeclinedTransactionException
7
+
8
+ # Create a new DeclinedRefundException
9
+ # @see ApiException#initialize
10
+ def initialize(status_code, response_body, errors)
11
+ super(status_code, response_body, errors&.error_id, errors&.errors, build_message(errors))
12
+ @errors = errors
13
+ end
14
+
15
+ # The declined refund result as returned by the Online Payments platform.
16
+ # @return [OnlinePayments::SDK::Domain::RefundResult, nil]
17
+ def refund_result
18
+ @errors&.refund_result
19
+ end
20
+
21
+ private
22
+
23
+ def build_message(errors)
24
+ refund = errors&.refund_result
25
+ if refund
26
+ "declined refund '#{refund.id}' with status '#{refund.status}'"
27
+ else
28
+ 'the Online Payments platform returned a declined refund response'
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,16 @@
1
+ module OnlinePayments::SDK
2
+
3
+ # Indicates that a transaction is declined by the Online Payments platform or one of its downstream partners/acquirers.
4
+ class DeclinedTransactionException < ApiException
5
+
6
+ # Create a new DeclinedTransactionException.
7
+ # @see ApiException#initialize
8
+ def initialize(status_code, response_body, error_id, errors, message = nil)
9
+ if message
10
+ super(status_code, response_body, error_id, errors, message)
11
+ else
12
+ super(status_code, response_body, error_id, errors)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ module OnlinePayments::SDK
2
+ module DefaultImpl
3
+
4
+ # Contains all authentication schemes supported by the GlobabCollect platform.
5
+ class AuthorizationType
6
+ V1HMAC = 'v1HMAC'
7
+
8
+ # @return [String] the authorization string that belongs to the parameter _authorization_, or _nil_ if not found.
9
+ def self.get_authorization(authorization)
10
+ case authorization.downcase
11
+ when V1HMAC.downcase
12
+ return V1HMAC
13
+ else
14
+ raise ArgumentError "Unknown authorization type '#{authorization}'"
15
+ end
16
+ end
17
+
18
+ # @return [String]
19
+ def self.get_signature_string
20
+ V1HMAC
21
+ end
22
+ end
23
+ end
24
+ end