connect-sdk-ruby 1.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.
- checksums.yaml +7 -0
- data/Gemfile +2 -0
- data/LICENSE.txt +22 -0
- data/README.md +140 -0
- data/Rakefile +34 -0
- data/connect-sdk-ruby.gemspec +28 -0
- data/examples/merchant/example_configuration.yml +6 -0
- data/examples/merchant/hostedcheckouts/create_hosted_checkout_example.rb +53 -0
- data/examples/merchant/hostedcheckouts/get_hosted_checkout_example.rb +22 -0
- data/examples/merchant/payments/approve_payment_example.rb +42 -0
- data/examples/merchant/payments/cancel_approval_payment_example.rb +22 -0
- data/examples/merchant/payments/cancel_payment_example.rb +22 -0
- data/examples/merchant/payments/create_payment_example.rb +177 -0
- data/examples/merchant/payments/get_payment_example.rb +22 -0
- data/examples/merchant/payments/process_challenged_payment_example.rb +22 -0
- data/examples/merchant/payments/refund_payment_example.rb +85 -0
- data/examples/merchant/payments/tokenize_payment_example.rb +27 -0
- data/examples/merchant/payouts/approve_payout_example.rb +27 -0
- data/examples/merchant/payouts/cancel_approval_payout_example.rb +22 -0
- data/examples/merchant/payouts/cancel_payout_example.rb +22 -0
- data/examples/merchant/payouts/create_payout_example.rb +96 -0
- data/examples/merchant/payouts/get_payout_example.rb +22 -0
- data/examples/merchant/productgroups/get_payment_product_group_example.rb +32 -0
- data/examples/merchant/productgroups/get_payment_product_groups_example.rb +32 -0
- data/examples/merchant/products/get_directory_example.rb +28 -0
- data/examples/merchant/products/get_payment_product_example.rb +32 -0
- data/examples/merchant/products/get_payment_products_example.rb +32 -0
- data/examples/merchant/refunds/approve_refund_example.rb +27 -0
- data/examples/merchant/refunds/cancel_approval_refund_example.rb +22 -0
- data/examples/merchant/refunds/cancel_refund_example.rb +22 -0
- data/examples/merchant/refunds/get_refund_example.rb +22 -0
- data/examples/merchant/riskassessments/risk_assessment_bank_account_example.rb +54 -0
- data/examples/merchant/riskassessments/risk_assessment_cards_example.rb +114 -0
- data/examples/merchant/services/convert_amount_example.rb +29 -0
- data/examples/merchant/services/convert_bank_account_example.rb +34 -0
- data/examples/merchant/services/iin_details_example.rb +27 -0
- data/examples/merchant/services/test_connection_example.rb +22 -0
- data/examples/merchant/sessions/create_session_example.rb +34 -0
- data/examples/merchant/tokens/approve_sepa_direct_debit_token_example.rb +29 -0
- data/examples/merchant/tokens/create_token_example.rb +82 -0
- data/examples/merchant/tokens/delete_token_example.rb +27 -0
- data/examples/merchant/tokens/get_token_example.rb +22 -0
- data/examples/merchant/tokens/update_token_example.rb +76 -0
- data/lib/ingenico/connect/sdk.rb +27 -0
- data/lib/ingenico/connect/sdk/api_exception.rb +52 -0
- data/lib/ingenico/connect/sdk/api_resource.rb +126 -0
- data/lib/ingenico/connect/sdk/authenticator.rb +15 -0
- data/lib/ingenico/connect/sdk/authorization_exception.rb +13 -0
- data/lib/ingenico/connect/sdk/call_context.rb +26 -0
- data/lib/ingenico/connect/sdk/client.rb +92 -0
- data/lib/ingenico/connect/sdk/communication_exception.rb +15 -0
- data/lib/ingenico/connect/sdk/communicator.rb +277 -0
- data/lib/ingenico/connect/sdk/communicator_configuration.rb +98 -0
- data/lib/ingenico/connect/sdk/connection.rb +31 -0
- data/lib/ingenico/connect/sdk/data_object.rb +43 -0
- data/lib/ingenico/connect/sdk/declined_payment_exception.rb +44 -0
- data/lib/ingenico/connect/sdk/declined_payout_exception.rb +44 -0
- data/lib/ingenico/connect/sdk/declined_refund_exception.rb +46 -0
- data/lib/ingenico/connect/sdk/declined_transaction_exception.rb +16 -0
- data/lib/ingenico/connect/sdk/defaultimpl.rb +6 -0
- data/lib/ingenico/connect/sdk/defaultimpl/authorization_type.rb +18 -0
- data/lib/ingenico/connect/sdk/defaultimpl/default_authenticator.rb +106 -0
- data/lib/ingenico/connect/sdk/defaultimpl/default_connection.rb +242 -0
- data/lib/ingenico/connect/sdk/defaultimpl/default_marshaller.rb +35 -0
- data/lib/ingenico/connect/sdk/domain/definitions/abstract_order_status.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/definitions/abstract_payment_method_specific_input.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/definitions/additional_order_input_airline_data.rb +36 -0
- data/lib/ingenico/connect/sdk/domain/definitions/address.rb +81 -0
- data/lib/ingenico/connect/sdk/domain/definitions/airline_data.rb +165 -0
- data/lib/ingenico/connect/sdk/domain/definitions/airline_flight_leg.rb +102 -0
- data/lib/ingenico/connect/sdk/domain/definitions/amount_of_money.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/definitions/bank_account.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/definitions/bank_account_bban.rb +67 -0
- data/lib/ingenico/connect/sdk/domain/definitions/bank_account_iban.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/definitions/card.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/definitions/card_essentials.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/definitions/card_fraud_results.rb +50 -0
- data/lib/ingenico/connect/sdk/domain/definitions/card_without_cvv.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/definitions/company_information.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/definitions/contact_details_base.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/definitions/customer_base.rb +50 -0
- data/lib/ingenico/connect/sdk/domain/definitions/fraud_fields.rb +115 -0
- data/lib/ingenico/connect/sdk/domain/definitions/fraud_results.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/definitions/fraud_results_retail_decisions.rb +46 -0
- data/lib/ingenico/connect/sdk/domain/definitions/key_value_pair.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/definitions/order_status_output.rb +67 -0
- data/lib/ingenico/connect/sdk/domain/definitions/payment_product_filter.rb +51 -0
- data/lib/ingenico/connect/sdk/domain/definitions/personal_name_base.rb +46 -0
- data/lib/ingenico/connect/sdk/domain/definitions/result_do_risk_assessment.rb +61 -0
- data/lib/ingenico/connect/sdk/domain/definitions/retail_decisions_cc_fraud_check_output.rb +46 -0
- data/lib/ingenico/connect/sdk/domain/definitions/validation_bank_account_check.rb +46 -0
- data/lib/ingenico/connect/sdk/domain/definitions/validation_bank_account_output.rb +67 -0
- data/lib/ingenico/connect/sdk/domain/errors/api_error.rb +60 -0
- data/lib/ingenico/connect/sdk/domain/errors/error_response.rb +46 -0
- data/lib/ingenico/connect/sdk/domain/hostedcheckout/create_hosted_checkout_request.rb +102 -0
- data/lib/ingenico/connect/sdk/domain/hostedcheckout/create_hosted_checkout_response.rb +59 -0
- data/lib/ingenico/connect/sdk/domain/hostedcheckout/created_payment_output.rb +72 -0
- data/lib/ingenico/connect/sdk/domain/hostedcheckout/displayed_data.rb +53 -0
- data/lib/ingenico/connect/sdk/domain/hostedcheckout/get_hosted_checkout_response.rb +43 -0
- data/lib/ingenico/connect/sdk/domain/hostedcheckout/hosted_checkout_specific_input.rb +78 -0
- data/lib/ingenico/connect/sdk/domain/hostedcheckout/payment_product_filters_hosted_checkout.rb +53 -0
- data/lib/ingenico/connect/sdk/domain/metadata/shopping_cart_extension.rb +48 -0
- data/lib/ingenico/connect/sdk/domain/payment/abstract_payment_method_specific_output.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/payment/additional_order_input.rb +72 -0
- data/lib/ingenico/connect/sdk/domain/payment/address_personal.rb +36 -0
- data/lib/ingenico/connect/sdk/domain/payment/approve_payment_card_payment_method_specific_output.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/payment/approve_payment_non_sepa_direct_debit_payment_method_specific_input.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/payment/approve_payment_payment_method_specific_input.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/payment/approve_payment_request.rb +65 -0
- data/lib/ingenico/connect/sdk/domain/payment/approve_payment_sepa_direct_debit_payment_method_specific_input.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/payment/bank_transfer_payment_method_specific_input.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/payment/bank_transfer_payment_method_specific_input_base.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/payment/bank_transfer_payment_method_specific_output.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/payment/cancel_approval_payment_response.rb +36 -0
- data/lib/ingenico/connect/sdk/domain/payment/cancel_payment_card_payment_method_specific_output.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/payment/cancel_payment_response.rb +47 -0
- data/lib/ingenico/connect/sdk/domain/payment/card_payment_method_specific_input.rb +61 -0
- data/lib/ingenico/connect/sdk/domain/payment/card_payment_method_specific_input_base.rb +60 -0
- data/lib/ingenico/connect/sdk/domain/payment/card_payment_method_specific_output.rb +65 -0
- data/lib/ingenico/connect/sdk/domain/payment/cash_payment_method_specific_input.rb +47 -0
- data/lib/ingenico/connect/sdk/domain/payment/cash_payment_method_specific_input_base.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/payment/cash_payment_method_specific_output.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1503_specific_input.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1504_specific_input.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/payment/contact_details.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/payment/create_payment_request.rb +131 -0
- data/lib/ingenico/connect/sdk/domain/payment/create_payment_response.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/payment/create_payment_result.rb +58 -0
- data/lib/ingenico/connect/sdk/domain/payment/customer.rb +83 -0
- data/lib/ingenico/connect/sdk/domain/payment/external_cardholder_authentication_data.rb +60 -0
- data/lib/ingenico/connect/sdk/domain/payment/invoice_payment_method_specific_input.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/payment/invoice_payment_method_specific_output.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/payment/level3_summary_data.rb +46 -0
- data/lib/ingenico/connect/sdk/domain/payment/line_item.rb +58 -0
- data/lib/ingenico/connect/sdk/domain/payment/line_item_invoice_data.rb +60 -0
- data/lib/ingenico/connect/sdk/domain/payment/line_item_level3_interchange_information.rb +81 -0
- data/lib/ingenico/connect/sdk/domain/payment/merchant_action.rb +64 -0
- data/lib/ingenico/connect/sdk/domain/payment/non_sepa_direct_debit_payment_method_specific_input.rb +71 -0
- data/lib/ingenico/connect/sdk/domain/payment/non_sepa_direct_debit_payment_method_specific_output.rb +36 -0
- data/lib/ingenico/connect/sdk/domain/payment/non_sepa_direct_debit_payment_product705_specific_input.rb +50 -0
- data/lib/ingenico/connect/sdk/domain/payment/order.rb +83 -0
- data/lib/ingenico/connect/sdk/domain/payment/order_approve_payment.rb +47 -0
- data/lib/ingenico/connect/sdk/domain/payment/order_invoice_data.rb +59 -0
- data/lib/ingenico/connect/sdk/domain/payment/order_output.rb +47 -0
- data/lib/ingenico/connect/sdk/domain/payment/order_references.rb +57 -0
- data/lib/ingenico/connect/sdk/domain/payment/order_references_approve_payment.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/payment/order_type_information.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/payment/payment.rb +54 -0
- data/lib/ingenico/connect/sdk/domain/payment/payment_approval_response.rb +47 -0
- data/lib/ingenico/connect/sdk/domain/payment/payment_creation_output.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/payment/payment_creation_references.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/payment/payment_error_response.rb +57 -0
- data/lib/ingenico/connect/sdk/domain/payment/payment_output.rb +116 -0
- data/lib/ingenico/connect/sdk/domain/payment/payment_product836_specific_output.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/payment/payment_product840_customer_account.rb +88 -0
- data/lib/ingenico/connect/sdk/domain/payment/payment_product840_specific_output.rb +47 -0
- data/lib/ingenico/connect/sdk/domain/payment/payment_references.rb +67 -0
- data/lib/ingenico/connect/sdk/domain/payment/payment_response.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/payment/payment_status_output.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/payment/personal_information.rb +50 -0
- data/lib/ingenico/connect/sdk/domain/payment/personal_name.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/payment/redirect_data.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_method_specific_input.rb +72 -0
- data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_method_specific_input_base.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_method_specific_output.rb +58 -0
- data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product809_specific_input.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product816_specific_input.rb +36 -0
- data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product882_specific_input.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/payment/refund_bank_method_specific_output.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/payment/refund_card_method_specific_output.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/payment/refund_e_wallet_method_specific_output.rb +36 -0
- data/lib/ingenico/connect/sdk/domain/payment/refund_method_specific_output.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/payment/refund_output.rb +72 -0
- data/lib/ingenico/connect/sdk/domain/payment/refund_payment_product840_customer_account.rb +46 -0
- data/lib/ingenico/connect/sdk/domain/payment/refund_payment_product840_specific_output.rb +36 -0
- data/lib/ingenico/connect/sdk/domain/payment/sepa_direct_debit_payment_method_specific_input.rb +60 -0
- data/lib/ingenico/connect/sdk/domain/payment/sepa_direct_debit_payment_method_specific_output.rb +36 -0
- data/lib/ingenico/connect/sdk/domain/payment/three_d_secure_results.rb +46 -0
- data/lib/ingenico/connect/sdk/domain/payment/tokenize_payment_request.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/payout/approve_payout_request.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/payout/create_payout_request.rb +101 -0
- data/lib/ingenico/connect/sdk/domain/payout/payout_customer.rb +76 -0
- data/lib/ingenico/connect/sdk/domain/payout/payout_error_response.rb +57 -0
- data/lib/ingenico/connect/sdk/domain/payout/payout_references.rb +46 -0
- data/lib/ingenico/connect/sdk/domain/payout/payout_response.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/payout/payout_result.rb +54 -0
- data/lib/ingenico/connect/sdk/domain/product/account_on_file.rb +64 -0
- data/lib/ingenico/connect/sdk/domain/product/account_on_file_attribute.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/product/account_on_file_display_hints.rb +46 -0
- data/lib/ingenico/connect/sdk/domain/product/directory.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/product/directory_entry.rb +59 -0
- data/lib/ingenico/connect/sdk/domain/product/empty_validator.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/product/fixed_list_validator.rb +38 -0
- data/lib/ingenico/connect/sdk/domain/product/label_template_element.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/product/length_validator.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/product/payment_product.rb +134 -0
- data/lib/ingenico/connect/sdk/domain/product/payment_product_display_hints.rb +46 -0
- data/lib/ingenico/connect/sdk/domain/product/payment_product_field.rb +61 -0
- data/lib/ingenico/connect/sdk/domain/product/payment_product_field_data_restrictions.rb +43 -0
- data/lib/ingenico/connect/sdk/domain/product/payment_product_field_display_hints.rb +96 -0
- data/lib/ingenico/connect/sdk/domain/product/payment_product_field_form_element.rb +46 -0
- data/lib/ingenico/connect/sdk/domain/product/payment_product_field_tooltip.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/product/payment_product_field_validators.rb +100 -0
- data/lib/ingenico/connect/sdk/domain/product/payment_product_group.rb +71 -0
- data/lib/ingenico/connect/sdk/domain/product/payment_product_group_response.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/product/payment_product_groups.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/product/payment_product_response.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/product/payment_products.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/product/range_validator.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/product/regular_expression_validator.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/product/value_mapping_element.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/refund/approve_refund_request.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/refund/bank_account_bban_refund.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/refund/bank_refund_method_specific_input.rb +54 -0
- data/lib/ingenico/connect/sdk/domain/refund/refund_customer.rb +58 -0
- data/lib/ingenico/connect/sdk/domain/refund/refund_error_response.rb +57 -0
- data/lib/ingenico/connect/sdk/domain/refund/refund_references.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/refund/refund_request.rb +76 -0
- data/lib/ingenico/connect/sdk/domain/refund/refund_response.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/refund/refund_result.rb +54 -0
- data/lib/ingenico/connect/sdk/domain/riskassessments/customer_risk_assessment.rb +65 -0
- data/lib/ingenico/connect/sdk/domain/riskassessments/order_risk_assessment.rb +58 -0
- data/lib/ingenico/connect/sdk/domain/riskassessments/personal_information_risk_assessment.rb +36 -0
- data/lib/ingenico/connect/sdk/domain/riskassessments/personal_name_risk_assessment.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/riskassessments/risk_assessment.rb +54 -0
- data/lib/ingenico/connect/sdk/domain/riskassessments/risk_assessment_bank_account.rb +47 -0
- data/lib/ingenico/connect/sdk/domain/riskassessments/risk_assessment_card.rb +36 -0
- data/lib/ingenico/connect/sdk/domain/riskassessments/risk_assessment_response.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/services/bank_data.rb +53 -0
- data/lib/ingenico/connect/sdk/domain/services/bank_details.rb +47 -0
- data/lib/ingenico/connect/sdk/domain/services/bank_details_request.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/services/bank_details_response.rb +69 -0
- data/lib/ingenico/connect/sdk/domain/services/convert_amount.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/services/get_iin_details_request.rb +43 -0
- data/lib/ingenico/connect/sdk/domain/services/get_iin_details_response.rb +60 -0
- data/lib/ingenico/connect/sdk/domain/services/iin_detail.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/services/payment_context.rb +50 -0
- data/lib/ingenico/connect/sdk/domain/services/swift.rb +95 -0
- data/lib/ingenico/connect/sdk/domain/services/test_connection.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/sessions/payment_product_filters_client_session.rb +46 -0
- data/lib/ingenico/connect/sdk/domain/sessions/session_request.rb +49 -0
- data/lib/ingenico/connect/sdk/domain/sessions/session_response.rb +59 -0
- data/lib/ingenico/connect/sdk/domain/token/abstract_token.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/token/approve_token_request.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/token/contact_details_token.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/token/create_token_request.rb +76 -0
- data/lib/ingenico/connect/sdk/domain/token/create_token_response.rb +39 -0
- data/lib/ingenico/connect/sdk/domain/token/creditor.rb +102 -0
- data/lib/ingenico/connect/sdk/domain/token/customer_token.rb +47 -0
- data/lib/ingenico/connect/sdk/domain/token/customer_token_with_contact_details.rb +36 -0
- data/lib/ingenico/connect/sdk/domain/token/debtor.rb +102 -0
- data/lib/ingenico/connect/sdk/domain/token/mandate_approval.rb +46 -0
- data/lib/ingenico/connect/sdk/domain/token/mandate_non_sepa_direct_debit.rb +36 -0
- data/lib/ingenico/connect/sdk/domain/token/mandate_sepa_direct_debit.rb +36 -0
- data/lib/ingenico/connect/sdk/domain/token/mandate_sepa_direct_debit_with_mandate_id.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/token/mandate_sepa_direct_debit_without_creditor.rb +79 -0
- data/lib/ingenico/connect/sdk/domain/token/personal_information_token.rb +36 -0
- data/lib/ingenico/connect/sdk/domain/token/personal_name_token.rb +16 -0
- data/lib/ingenico/connect/sdk/domain/token/token_card.rb +47 -0
- data/lib/ingenico/connect/sdk/domain/token/token_card_data.rb +50 -0
- data/lib/ingenico/connect/sdk/domain/token/token_e_wallet.rb +47 -0
- data/lib/ingenico/connect/sdk/domain/token/token_e_wallet_data.rb +32 -0
- data/lib/ingenico/connect/sdk/domain/token/token_non_sepa_direct_debit.rb +47 -0
- data/lib/ingenico/connect/sdk/domain/token/token_non_sepa_direct_debit_payment_product705_specific_data.rb +43 -0
- data/lib/ingenico/connect/sdk/domain/token/token_response.rb +83 -0
- data/lib/ingenico/connect/sdk/domain/token/token_sepa_direct_debit.rb +47 -0
- data/lib/ingenico/connect/sdk/domain/token/token_sepa_direct_debit_without_creditor.rb +47 -0
- data/lib/ingenico/connect/sdk/domain/token/update_token_request.rb +76 -0
- data/lib/ingenico/connect/sdk/endpoint_configuration.rb +139 -0
- data/lib/ingenico/connect/sdk/exceptions.rb +8 -0
- data/lib/ingenico/connect/sdk/factory.rb +200 -0
- data/lib/ingenico/connect/sdk/global_collect_exception.rb +15 -0
- data/lib/ingenico/connect/sdk/idempotence_exception.rb +24 -0
- data/lib/ingenico/connect/sdk/logging.rb +10 -0
- data/lib/ingenico/connect/sdk/logging/communicator_logger.rb +19 -0
- data/lib/ingenico/connect/sdk/logging/log_message_builder.rb +61 -0
- data/lib/ingenico/connect/sdk/logging/logging_capable.rb +19 -0
- data/lib/ingenico/connect/sdk/logging/logging_util.rb +298 -0
- data/lib/ingenico/connect/sdk/logging/request_log_message_builder.rb +42 -0
- data/lib/ingenico/connect/sdk/logging/response_log_message_builder.rb +34 -0
- data/lib/ingenico/connect/sdk/logging/ruby_communicator_logger.rb +58 -0
- data/lib/ingenico/connect/sdk/logging/stdout_communicator_logger.rb +36 -0
- data/lib/ingenico/connect/sdk/marshaller.rb +19 -0
- data/lib/ingenico/connect/sdk/marshaller_syntax_exception.rb +6 -0
- data/lib/ingenico/connect/sdk/merchant/hostedcheckouts/hostedcheckouts_client.rb +88 -0
- data/lib/ingenico/connect/sdk/merchant/merchant_client.rb +110 -0
- data/lib/ingenico/connect/sdk/merchant/payments/payments_client.rb +319 -0
- data/lib/ingenico/connect/sdk/merchant/payouts/payouts_client.rb +197 -0
- data/lib/ingenico/connect/sdk/merchant/productgroups/find_productgroups_params.rb +55 -0
- data/lib/ingenico/connect/sdk/merchant/productgroups/get_productgroup_params.rb +55 -0
- data/lib/ingenico/connect/sdk/merchant/productgroups/productgroups_client.rb +90 -0
- data/lib/ingenico/connect/sdk/merchant/products/directory_params.rb +31 -0
- data/lib/ingenico/connect/sdk/merchant/products/find_products_params.rb +55 -0
- data/lib/ingenico/connect/sdk/merchant/products/get_product_params.rb +55 -0
- data/lib/ingenico/connect/sdk/merchant/products/products_client.rb +124 -0
- data/lib/ingenico/connect/sdk/merchant/refunds/refunds_client.rb +154 -0
- data/lib/ingenico/connect/sdk/merchant/riskassessments/riskassessments_client.rb +85 -0
- data/lib/ingenico/connect/sdk/merchant/services/convert_amount_params.rb +35 -0
- data/lib/ingenico/connect/sdk/merchant/services/services_client.rb +149 -0
- data/lib/ingenico/connect/sdk/merchant/sessions/sessions_client.rb +55 -0
- data/lib/ingenico/connect/sdk/merchant/tokens/delete_token_params.rb +27 -0
- data/lib/ingenico/connect/sdk/merchant/tokens/tokens_client.rb +192 -0
- data/lib/ingenico/connect/sdk/meta_data_provider.rb +152 -0
- data/lib/ingenico/connect/sdk/modules.rb +130 -0
- data/lib/ingenico/connect/sdk/not_found_exception.rb +19 -0
- data/lib/ingenico/connect/sdk/param_request.rb +33 -0
- data/lib/ingenico/connect/sdk/pooled_connection.rb +21 -0
- data/lib/ingenico/connect/sdk/proxy_configuration.rb +75 -0
- data/lib/ingenico/connect/sdk/reference_exception.rb +14 -0
- data/lib/ingenico/connect/sdk/request_header.rb +25 -0
- data/lib/ingenico/connect/sdk/request_param.rb +24 -0
- data/lib/ingenico/connect/sdk/response.rb +62 -0
- data/lib/ingenico/connect/sdk/response_exception.rb +54 -0
- data/lib/ingenico/connect/sdk/response_header.rb +25 -0
- data/lib/ingenico/connect/sdk/session.rb +39 -0
- data/lib/ingenico/connect/sdk/validation_exception.rb +14 -0
- data/spec/comparable_extension.rb +29 -0
- data/spec/fixtures/resources/defaultimpl/convertAmount.json +3 -0
- data/spec/fixtures/resources/defaultimpl/createPayment.failure.invalidCardNumber.json +11 -0
- data/spec/fixtures/resources/defaultimpl/createPayment.failure.rejected.json +48 -0
- data/spec/fixtures/resources/defaultimpl/createPayment.json +40 -0
- data/spec/fixtures/resources/defaultimpl/idempotence_duplicate_failure.json +8 -0
- data/spec/fixtures/resources/defaultimpl/idempotence_rejected.json +46 -0
- data/spec/fixtures/resources/defaultimpl/idempotence_success.json +39 -0
- data/spec/fixtures/resources/defaultimpl/notFound.html +1 -0
- data/spec/fixtures/resources/defaultimpl/testConnection.json +3 -0
- data/spec/fixtures/resources/defaultimpl/unknownServerError.json +10 -0
- data/spec/fixtures/resources/logging/bodyNoObfuscation.json +17 -0
- data/spec/fixtures/resources/logging/bodyWithBinObfuscated.json +3 -0
- data/spec/fixtures/resources/logging/bodyWithBinOriginal.json +3 -0
- data/spec/fixtures/resources/logging/bodyWithCardObfuscated.json +21 -0
- data/spec/fixtures/resources/logging/bodyWithCardOriginal.json +21 -0
- data/spec/fixtures/resources/logging/bodyWithIbanObfuscated.json +19 -0
- data/spec/fixtures/resources/logging/bodyWithIbanOriginal.json +19 -0
- data/spec/fixtures/resources/payment/duplicate_request.json +8 -0
- data/spec/fixtures/resources/payment/invalid_authorization.json +9 -0
- data/spec/fixtures/resources/payment/invalid_request.json +11 -0
- data/spec/fixtures/resources/payment/method_not_allowed.html +1 -0
- data/spec/fixtures/resources/payment/not_found.html +1 -0
- data/spec/fixtures/resources/payment/pending_approval.json +39 -0
- data/spec/fixtures/resources/payment/rejected.json +46 -0
- data/spec/fixtures/resources/properties.proxy.yml +13 -0
- data/spec/fixtures/resources/properties.yml +7 -0
- data/spec/integration/connection_pooling_spec.rb +78 -0
- data/spec/integration/convert_amount_spec.rb +25 -0
- data/spec/integration/idempotence_spec.rb +59 -0
- data/spec/integration/multiline_header_spec.rb +30 -0
- data/spec/integration/payment_product_groups_spec.rb +23 -0
- data/spec/integration/payment_products_spec.rb +22 -0
- data/spec/integration/risk_assessments_spec.rb +37 -0
- data/spec/integration/sdk_proxy_spec.rb +89 -0
- data/spec/integration/token_spec.rb +42 -0
- data/spec/integration_setup.rb +50 -0
- data/spec/lib/client_spec.rb +69 -0
- data/spec/lib/communicator_configuration_spec.rb +179 -0
- data/spec/lib/communicator_spec.rb +31 -0
- data/spec/lib/defaultimpl/default_authenticator_spec.rb +74 -0
- data/spec/lib/defaultimpl/default_connection_idempotence_spec.rb +142 -0
- data/spec/lib/defaultimpl/default_connection_logger_spec.rb +526 -0
- data/spec/lib/defaultimpl/default_connection_spec.rb +334 -0
- data/spec/lib/defaultimpl/default_marshaller_spec.rb +36 -0
- data/spec/lib/factory_spec.rb +41 -0
- data/spec/lib/logging/header_obfuscator_spec.rb +51 -0
- data/spec/lib/logging/logging_util_spec.rb +143 -0
- data/spec/lib/logging/obfuscator_spec.rb +52 -0
- data/spec/lib/logging/ruby_communicator_logger_spec.rb +84 -0
- data/spec/lib/logging/stdout_communicator_logger_spec.rb +64 -0
- data/spec/lib/logging/value_obfuscator_spec.rb +95 -0
- data/spec/lib/meta_data_provider_spec.rb +71 -0
- data/spec/lib/payments_client_spec.rb +157 -0
- data/spec/lib/requestparams/delete_params_spec.rb +21 -0
- data/spec/lib/requestparams/directory_params_spec.rb +27 -0
- data/spec/lib/requestparams/find_params_spec.rb +58 -0
- data/spec/lib/requestparams/get_params_spec.rb +59 -0
- data/spec/lib/requestparams/param_request_spec.rb +57 -0
- data/spec/spec_helper.rb +23 -0
- metadata +565 -0
@@ -0,0 +1,15 @@
|
|
1
|
+
module Ingenico::Connect::SDK
|
2
|
+
|
3
|
+
# Abstract class that is responsible for authenticating requests sent to the GlobalCollect platform.
|
4
|
+
class Authenticator
|
5
|
+
|
6
|
+
# Creates a signature to authenticate a request.
|
7
|
+
# Uses the following parameters:
|
8
|
+
# http_method:: 'GET', 'PUT', 'POST' or 'DELETE' indicating which HTTP method will be used with the request
|
9
|
+
# resource_uri:: URI object that includes #path and #query of the url that will be used, #query may be *nil*
|
10
|
+
# request_headers:: {Ingenico::Connect::SDK::RequestHeader} list that contains all headers used by the request
|
11
|
+
def create_simple_authentication_signature(http_method, resource_uri, request_headers)
|
12
|
+
raise NotImplementedError
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Ingenico::Connect::SDK
|
2
|
+
|
3
|
+
# This exception is thrown when a request sent to the GlobalCollect platform is not correctly authenticated.
|
4
|
+
# Corresponds to a HTTP status code of 403.
|
5
|
+
# @see ApiException#initialize
|
6
|
+
class AuthorizationException < ApiException
|
7
|
+
|
8
|
+
def initialize(status_code, response_body, error_id, errors,
|
9
|
+
message='the GlobalCollect platform returned an authorization error response')
|
10
|
+
super(status_code, response_body, error_id, errors, message)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Ingenico::Connect::SDK
|
2
|
+
|
3
|
+
# A CallContext is used to identify requests and manage idempotent requests.
|
4
|
+
# A CallContext contains the following:
|
5
|
+
#
|
6
|
+
# idempotence_key:: A randomly generated key used to identify requests
|
7
|
+
# idempotence_request_timestamp:: If a previous request arrived with the same idempotence key,
|
8
|
+
# this value will be set to a timestamp of that request.
|
9
|
+
class CallContext
|
10
|
+
@idempotence_request_timestamp = nil
|
11
|
+
@idempotence_key = nil
|
12
|
+
|
13
|
+
def initialize(idempotence_key=nil)
|
14
|
+
@idempotence_key = idempotence_key
|
15
|
+
end
|
16
|
+
|
17
|
+
# The idempotence key used to identify this request.
|
18
|
+
# If two requests share the same _idempotence_key_, they are considered to be the same request
|
19
|
+
# and only the first request will be processed.
|
20
|
+
attr_reader :idempotence_key
|
21
|
+
|
22
|
+
# If two or more requests arrive at the GlobalCollect platform with the same _idempotence_key_,
|
23
|
+
# the _idempotence_request_timestamp_ will be set to the arrival time of the first of these requests.
|
24
|
+
attr_accessor :idempotence_request_timestamp
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
#
|
2
|
+
# This class was auto-generated from the API references found at
|
3
|
+
# https://developer.globalcollect.com/documentation/api/server/
|
4
|
+
#
|
5
|
+
require 'ingenico/connect/sdk/api_resource'
|
6
|
+
require 'ingenico/connect/sdk/data_object'
|
7
|
+
require 'ingenico/connect/sdk/logging/logging_capable'
|
8
|
+
require 'ingenico/connect/sdk/merchant/merchant_client'
|
9
|
+
require 'base64'
|
10
|
+
|
11
|
+
module Ingenico
|
12
|
+
module Connect
|
13
|
+
module SDK
|
14
|
+
|
15
|
+
# GlobalCollect platform client.
|
16
|
+
#
|
17
|
+
# This client and all its child clients are bound to one specific value for the X-GCS-ClientMetaInfo header.
|
18
|
+
#
|
19
|
+
# To get a new client with a different header value, use with_client_meta_info.
|
20
|
+
#
|
21
|
+
# Thread safe.
|
22
|
+
class Client < ApiResource
|
23
|
+
include Logging::LoggingCapable
|
24
|
+
|
25
|
+
def self.API_VERSION
|
26
|
+
'v1'
|
27
|
+
end
|
28
|
+
|
29
|
+
# communicator:: Ingenico::Connect::SDK::Communicator
|
30
|
+
# client_meta_info:: String
|
31
|
+
def initialize(communicator, client_meta_info=nil)
|
32
|
+
super(communicator, {'apiVersion' => Client.API_VERSION}, client_meta_info)
|
33
|
+
end
|
34
|
+
|
35
|
+
# client_meta_info:: JSON string containing the meta data for the client
|
36
|
+
# Returns:: A Client which uses the passed meta data for the X-GCS-ClientMetaInfo header.
|
37
|
+
# Raises:: Ingenico::Connect::SDK::MarshallerSyntaxException if the given clientMetaInfo is not a valid JSON string
|
38
|
+
def with_client_meta_info(client_meta_info)
|
39
|
+
if @client_meta_info.nil? && client_meta_info.nil?
|
40
|
+
self
|
41
|
+
elsif client_meta_info.nil?
|
42
|
+
return Client.new(@communicator, nil)
|
43
|
+
else
|
44
|
+
# Checking to see if this is valid JSON (no JSON parse exceptions)
|
45
|
+
@communicator.marshaller.unmarshal(client_meta_info, DataObject)
|
46
|
+
client_meta_info = Base64.strict_encode64(client_meta_info)
|
47
|
+
if @client_meta_info == client_meta_info
|
48
|
+
self
|
49
|
+
else
|
50
|
+
return Client.new(@communicator, client_meta_info)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Utility method that delegates the call to this client's communicator.
|
56
|
+
def close_idle_connections(idle_time)
|
57
|
+
@communicator.close_idle_connections(idle_time)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Utility method that delegates the call to this client's communicator.
|
61
|
+
def close_expired_connections
|
62
|
+
@communicator.close_expired_connections
|
63
|
+
end
|
64
|
+
|
65
|
+
# Turns on logging using the given communicator logger.
|
66
|
+
# communicator_logger:: Ingenico::Connect::SDK::Logging::CommunicatorLogger
|
67
|
+
def enable_logging(communicator_logger)
|
68
|
+
@communicator.enable_logging(communicator_logger)
|
69
|
+
end
|
70
|
+
|
71
|
+
# Turns off logging.
|
72
|
+
def disable_logging
|
73
|
+
@communicator.disable_logging
|
74
|
+
end
|
75
|
+
|
76
|
+
# Releases any system resources associated with this object.
|
77
|
+
def close
|
78
|
+
@communicator.close
|
79
|
+
end
|
80
|
+
|
81
|
+
# Resource /{{merchantId}}
|
82
|
+
# merchant_id:: String
|
83
|
+
# Returns:: {Ingenico::Connect::SDK::Merchant::MerchantClient}
|
84
|
+
def merchant(merchant_id)
|
85
|
+
Ingenico::Connect::SDK::Merchant::MerchantClient.new(self, {
|
86
|
+
'merchantId' => merchant_id,
|
87
|
+
})
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Ingenico::Connect::SDK
|
2
|
+
|
3
|
+
# This exception is used when an error occurs during network communication with the GlobalCollect platform.
|
4
|
+
# A common cause is a timeout while connecting or when receiving or sending data.
|
5
|
+
class CommunicationException < RuntimeError
|
6
|
+
|
7
|
+
def initialize(cause)
|
8
|
+
super()
|
9
|
+
@cause = cause
|
10
|
+
end
|
11
|
+
|
12
|
+
# The error that is the cause of this error.
|
13
|
+
attr_accessor :cause
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,277 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
module Ingenico::Connect::SDK
|
4
|
+
|
5
|
+
# Class responsible for facilitating communication with the GlobalCollect platform.
|
6
|
+
# It combines the following classes to provide communication functionality:
|
7
|
+
#
|
8
|
+
# session:: {Ingenico::Connect::SDK::Session} that stores data for network communication and facilitates network communication
|
9
|
+
# marshaller:: {Ingenico::Connect::SDK::Marshaller} that is used to marshal and unmarshal data to and from JSON format
|
10
|
+
#
|
11
|
+
class Communicator
|
12
|
+
include Logging::LoggingCapable
|
13
|
+
|
14
|
+
# Creates a new Communicator based on a session and marshaller.
|
15
|
+
#
|
16
|
+
# session:: {Ingenico::Connect::SDK::Session} that stores data for network communication and facilitates network communication
|
17
|
+
# marshaller:: {Ingenico::Connect::SDK::Marshaller} that is used to marshal and unmarshal data to and from JSON format
|
18
|
+
#
|
19
|
+
def initialize(session, marshaller)
|
20
|
+
if session.nil?
|
21
|
+
raise ArgumentError('session is required')
|
22
|
+
end
|
23
|
+
if marshaller.nil?
|
24
|
+
raise ArgumentError('marshaller is required')
|
25
|
+
end
|
26
|
+
@session = session
|
27
|
+
@marshaller = marshaller
|
28
|
+
end
|
29
|
+
|
30
|
+
# Performs a GET request to the GlobalCollect platform and returns the response as a {Ingenico::Connect::SDK::Response} object.
|
31
|
+
#
|
32
|
+
# Throws:
|
33
|
+
# ResponseException:: Thrown if the request could not be fulfilled successfully.
|
34
|
+
# This occurs for example if the request is not authenticated correctly
|
35
|
+
# NotFoundException:: Thrown if the requested resource is not found
|
36
|
+
# CommunicationException:: Thrown if there is an error in communicating with the GlobalCollect platform.
|
37
|
+
# This occurs for example if a timeout occurs.
|
38
|
+
def get(relative_path, request_headers, request_parameters, response_type, context)
|
39
|
+
connection = @session.connection
|
40
|
+
if request_parameters.nil?
|
41
|
+
request_parameter_list = nil
|
42
|
+
else
|
43
|
+
request_parameter_list = request_parameters.to_request_parameters
|
44
|
+
end
|
45
|
+
uri = to_absolute_uri(relative_path, request_parameter_list)
|
46
|
+
if request_headers.nil?
|
47
|
+
request_headers = []
|
48
|
+
end
|
49
|
+
add_generic_headers('GET', uri, request_headers, context)
|
50
|
+
response = connection.get(uri, request_headers)
|
51
|
+
process_response(response, response_type, relative_path, context)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Performs a DELETE request to the GlobalCollect platform and returns the response as a {Ingenico::Connect::SDK::Response} object.
|
55
|
+
#
|
56
|
+
# Throws:
|
57
|
+
# ResponseException:: Thrown if the request could not be fulfilled successfully.
|
58
|
+
# This occurs for example if the request is not authenticated correctly.
|
59
|
+
# NotFoundException:: Thrown if the referred resource is not found.
|
60
|
+
# CommunicationException:: Thrown if there is an error in communicating with the GlobalCollect platform.
|
61
|
+
# This occurs for example if a timeout occurs.
|
62
|
+
def delete(relative_path, request_headers, request_parameters, response_type, context)
|
63
|
+
connection = @session.connection
|
64
|
+
if request_parameters.nil?
|
65
|
+
request_parameter_list = nil
|
66
|
+
else
|
67
|
+
request_parameter_list = request_parameters.to_request_parameters
|
68
|
+
end
|
69
|
+
uri = to_absolute_uri(relative_path, request_parameter_list)
|
70
|
+
if request_headers.nil?
|
71
|
+
request_headers = []
|
72
|
+
end
|
73
|
+
add_generic_headers('DELETE', uri, request_headers, context)
|
74
|
+
response = connection.delete(uri, request_headers)
|
75
|
+
process_response(response, response_type, relative_path, context)
|
76
|
+
end
|
77
|
+
|
78
|
+
# Performs a POST request to the GlobalCollect platform and returns the response as a {Ingenico::Connect::SDK::Response} object.
|
79
|
+
#
|
80
|
+
# Throws:
|
81
|
+
# ResponseException:: Thrown if the request could not be fulfilled successfully.
|
82
|
+
# This occurs for example if the request is not authenticated correctly.
|
83
|
+
# NotFoundException:: Thrown if the referred resource is not found.
|
84
|
+
# CommunicationException:: Thrown if there is an error in communicating with the GlobalCollect platform.
|
85
|
+
# This occurs for example if a timeout occurs.
|
86
|
+
def post(relative_path, request_headers, request_parameters, request_body,
|
87
|
+
response_type, context)
|
88
|
+
connection = @session.connection
|
89
|
+
if request_parameters.nil?
|
90
|
+
request_parameter_list = nil
|
91
|
+
else
|
92
|
+
request_parameter_list = request_parameters.to_request_parameters
|
93
|
+
end
|
94
|
+
uri = to_absolute_uri(relative_path, request_parameter_list)
|
95
|
+
if request_headers.nil?
|
96
|
+
request_headers = []
|
97
|
+
end
|
98
|
+
request_json = nil
|
99
|
+
unless request_body.nil?
|
100
|
+
request_headers.push(RequestHeader.new('Content-Type', 'application/json'))
|
101
|
+
request_json = @marshaller.marshal(request_body)
|
102
|
+
end
|
103
|
+
add_generic_headers('POST', uri, request_headers, context)
|
104
|
+
response = connection.post(uri, request_headers, request_json)
|
105
|
+
process_response(response, response_type, relative_path, context)
|
106
|
+
end
|
107
|
+
|
108
|
+
# Performs a PUT request to the GlobalCollect platform and returns the response as a {Ingenico::Connect::SDK::Response} object.
|
109
|
+
#
|
110
|
+
# Throws:
|
111
|
+
# ResponseException:: Thrown if the request could not be fulfilled successfully.
|
112
|
+
# This occurs for example if the request is not authenticated correctly.
|
113
|
+
# NotFoundException:: Thrown if the referred resource is not found.
|
114
|
+
# CommunicationException:: Thrown if there is an error in communicating with the GlobalCollect platform.
|
115
|
+
# This occurs for example if a timeout occurs.
|
116
|
+
def put(relative_path, request_headers, request_parameters, request_body,
|
117
|
+
response_type, context)
|
118
|
+
connection = @session.connection
|
119
|
+
if request_parameters.nil?
|
120
|
+
request_parameter_list = nil
|
121
|
+
else
|
122
|
+
request_parameter_list = request_parameters.to_request_parameters
|
123
|
+
end
|
124
|
+
uri = to_absolute_uri(relative_path, request_parameter_list)
|
125
|
+
if request_headers.nil?
|
126
|
+
request_headers = []
|
127
|
+
end
|
128
|
+
request_json = nil
|
129
|
+
unless request_body.nil?
|
130
|
+
request_headers.push(RequestHeader.new('Content-Type', 'application/json'))
|
131
|
+
request_json = @marshaller.marshal(request_body)
|
132
|
+
end
|
133
|
+
add_generic_headers('PUT', uri, request_headers, context)
|
134
|
+
response = connection.put(uri, request_headers, request_json)
|
135
|
+
process_response(response, response_type, relative_path, context)
|
136
|
+
end
|
137
|
+
|
138
|
+
# Closes any connections idle for more than _idle_time_ seconds.
|
139
|
+
# Will not have any effect if the connection is not a pooled connection (an instance of {Ingenico::Connect::SDK::PooledConnection}).
|
140
|
+
def close_idle_connections(idle_time)
|
141
|
+
connection = @session.connection
|
142
|
+
if connection.is_a? PooledConnection
|
143
|
+
connection.close_idle_connections(idle_time)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
# Closes any connections that have expired.
|
148
|
+
# Will not have any effect if the connection is not a pooled connection (an instance of {Ingenico::Connect::SDK::PooledConnection}).
|
149
|
+
def close_expired_connections
|
150
|
+
connection = @session.connection
|
151
|
+
if connection.is_a? PooledConnection
|
152
|
+
connection.close_expired_connections
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
# Enables logging outgoing requests and incoming responses by registering the _communicator_logger_.
|
157
|
+
# Note that only one logger can be registered at a time and calling _enable_logging_
|
158
|
+
# a second time will override the old logger instance with the new one.
|
159
|
+
#
|
160
|
+
# communicator_logger:: The {Ingenico::Connect::SDK::Logging::CommunicatorLogger} the requests and responses are logged to
|
161
|
+
#
|
162
|
+
def enable_logging(communicator_logger)
|
163
|
+
@session.connection.enable_logging(communicator_logger)
|
164
|
+
end
|
165
|
+
|
166
|
+
# Disables logging by unregistering any previous logger that might be registered.
|
167
|
+
def disable_logging
|
168
|
+
@session.connection.disable_logging
|
169
|
+
end
|
170
|
+
|
171
|
+
# Frees networking resources by closing the underlying network connections.
|
172
|
+
# After calling _close_, any use of the _get_, _delete_, _post_ and _put_ methods will not function
|
173
|
+
# and likely result in an error.
|
174
|
+
def close
|
175
|
+
@session.connection.close
|
176
|
+
end
|
177
|
+
|
178
|
+
# A {Ingenico::Connect::SDK::Marshaller} instance used by the communicator for serializing/deserializing to/from JSON
|
179
|
+
attr_reader :marshaller
|
180
|
+
|
181
|
+
protected
|
182
|
+
|
183
|
+
# Constructs a full url using the base url stored in the {Ingenico::Connect::SDK::Session} and the given relative path and request_parameters.
|
184
|
+
# The returned url is a *URI* object.
|
185
|
+
#
|
186
|
+
# relative_path:: The relative path of the url in string form.
|
187
|
+
# request_parameters:: A list of request parameters that each have #name and #value
|
188
|
+
# which represent the parameter name and value respectively.
|
189
|
+
def to_absolute_uri(relative_path, request_parameters)
|
190
|
+
api_endpoint = @session.api_endpoint
|
191
|
+
unless api_endpoint.path.nil? || api_endpoint.path.empty?
|
192
|
+
raise RuntimeError('api_endpoint should not contain a path')
|
193
|
+
end
|
194
|
+
unless api_endpoint.userinfo.nil? && api_endpoint.query.nil? && api_endpoint.fragment.nil?
|
195
|
+
raise RuntimeError('api_endpoint should not contain user info, query or fragment')
|
196
|
+
end
|
197
|
+
absolute_path = relative_path.start_with?('/')? relative_path : '/'+relative_path
|
198
|
+
uri = URI::HTTP.new(api_endpoint.scheme, nil, api_endpoint.host,
|
199
|
+
api_endpoint.port, nil, absolute_path, nil, nil, nil)
|
200
|
+
unless request_parameters.nil?
|
201
|
+
for nvp in request_parameters
|
202
|
+
parameters = URI.decode_www_form(uri.query || '') << [nvp.name, nvp.value]
|
203
|
+
uri.query = URI.encode_www_form(parameters)
|
204
|
+
end
|
205
|
+
end
|
206
|
+
uri
|
207
|
+
end
|
208
|
+
|
209
|
+
# Adds several standard headers to the http headers.
|
210
|
+
#
|
211
|
+
# http_method:: 'GET', 'DELETE', 'POST' or 'PUT' depending on the HTTP method being used
|
212
|
+
# uri:: The full URI as a URI object to the GlobalCollect platform,
|
213
|
+
# including the relative path and request parameters.
|
214
|
+
# request_headers:: List of {Ingenico::Connect::SDK::RequestHeader} in which which new headers will be added
|
215
|
+
# context:: {Ingenico::Connect::SDK::CallContext} object that will be used to produce
|
216
|
+
# an Idempotence header to prevent accidental request duplication.
|
217
|
+
#
|
218
|
+
# This method will add the 'Date' and 'Authorization' header;
|
219
|
+
# the 'X-GCS-Idempotence-Key' header will also be added if an idempotence context is given
|
220
|
+
def add_generic_headers(http_method, uri, request_headers, context = nil)
|
221
|
+
request_headers.concat(@session.meta_data_provider.meta_data_headers)
|
222
|
+
request_headers.push(RequestHeader.new('Date', get_header_date_string))
|
223
|
+
if !context.nil? && !context.idempotence_key.nil?
|
224
|
+
request_headers.push(RequestHeader.new('X-GCS-Idempotence-Key', context.idempotence_key))
|
225
|
+
end
|
226
|
+
authenticator = @session.authenticator
|
227
|
+
authentication_signature = authenticator.create_simple_authentication_signature(http_method, uri, request_headers)
|
228
|
+
request_headers.push(RequestHeader.new('Authorization', authentication_signature))
|
229
|
+
end
|
230
|
+
|
231
|
+
def get_header_date_string
|
232
|
+
Time.now.utc.strftime('%a, %d %b %Y %H:%M:%S GMT')
|
233
|
+
end
|
234
|
+
|
235
|
+
def process_response(response, response_type, request_path, context)
|
236
|
+
update_context(response, context) unless context.nil?
|
237
|
+
|
238
|
+
throw_exception_if_necessary(response, request_path)
|
239
|
+
@marshaller.unmarshal(response.body, response_type)
|
240
|
+
end
|
241
|
+
|
242
|
+
def update_context(response, context)
|
243
|
+
idempotence_request_timestamp_value = response.get_header_value('X-GCS-Idempotence-Request-Timestamp')
|
244
|
+
if idempotence_request_timestamp_value.nil?
|
245
|
+
context.idempotence_request_timestamp = nil
|
246
|
+
else
|
247
|
+
context.idempotence_request_timestamp = idempotence_request_timestamp_value
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
def throw_exception_if_necessary(response, request_path)
|
252
|
+
status_code = response.status_code
|
253
|
+
if status_code < 200 || status_code >= 300
|
254
|
+
body = response.body
|
255
|
+
if !body.nil? && !is_json(response)
|
256
|
+
cause = ResponseException.new(response)
|
257
|
+
if status_code == 404
|
258
|
+
raise NotFoundException.new(cause, 'The requested resource was not found; invalid path: ' +
|
259
|
+
request_path)
|
260
|
+
else
|
261
|
+
raise CommunicationException.new(cause)
|
262
|
+
end
|
263
|
+
else
|
264
|
+
raise ResponseException.new(response)
|
265
|
+
end
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
private
|
270
|
+
|
271
|
+
def is_json(response)
|
272
|
+
content_type = response.get_header_value('Content-Type')
|
273
|
+
content_type.nil? || 'application/json'.casecmp(content_type) == 0 ||
|
274
|
+
content_type.downcase.start_with?('application/json')
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
module Ingenico::Connect::SDK
|
2
|
+
|
3
|
+
# A CommunicatorConfiguration stores all data used to initialize an {Ingenico::Connect::SDK::Communicator}. It stores the following:
|
4
|
+
#
|
5
|
+
# api_endpoint:: The base url to the GlobalCollect platform.
|
6
|
+
# api_key_id:: The identifier of the _secret_api_key_ used to authenticate requests.
|
7
|
+
# secret_api_key:: The key used to authenticate requests sent to the GlobalCollect platform.
|
8
|
+
# authorization_type:: String describing the authorization protocol to follow.
|
9
|
+
# connect_timeout:: The number of seconds before a connection attempt with the GlobalCollect platform times out.
|
10
|
+
# socket_timeout:: The number of seconds before a timeout occurs
|
11
|
+
# when transmitting data to or from the GlobalCollect platform.
|
12
|
+
# max_connections:: The number of connections with the GlobalCollect platform
|
13
|
+
# that are kept alive in the connection pool. These connections will be reused when possible.
|
14
|
+
# proxy_configuration:: {Ingenico::Connect::SDK::ProxyConfiguration} instance that stores the url to a proxy to be used in all communication,
|
15
|
+
# or nil if no proxy should be used.
|
16
|
+
# integrator:: String
|
17
|
+
# shopping_cart_extension:: {Ingenico::Connect::SDK::Domain::Metadata::ShoppingCartExtension} that stores shopping cart-related metadata.
|
18
|
+
class CommunicatorConfiguration < EndpointConfiguration
|
19
|
+
|
20
|
+
# Creates a new CommunicatorConfiguration instance, it accepts the following arguments:
|
21
|
+
#
|
22
|
+
# properties:: A hash that may contain any of the other parameters.
|
23
|
+
# If a parameter is given in both the _properties_ and separately,
|
24
|
+
# the separate value takes precedence.
|
25
|
+
# api_endpoint:: The base url to the GlobalCollect platform.
|
26
|
+
# api_key_id:: The identifier of the _secret_api_key_ used to authenticate requests.
|
27
|
+
# secret_api_key:: The key used to authenticate requests sent to the GlobalCollect platform.
|
28
|
+
# authorization_type:: String describing the authorization protocol to follow.
|
29
|
+
# connect_timeout:: The number of seconds before a connection attempt with the GlobalCollect platform times out.
|
30
|
+
# socket_timeout:: The number of seconds before a timeout occurs
|
31
|
+
# when transmitting data to or from the GlobalCollect platform.
|
32
|
+
# max_connections:: The number of connections with the GlobalCollect platform
|
33
|
+
# that are kept alive in the connection pool. These connections will be reused when possible.
|
34
|
+
# proxy_configuration:: {Ingenico::Connect::SDK::ProxyConfiguration} instance that stores the url to a proxy to be used in all communication,
|
35
|
+
# or nil if no proxy should be used.
|
36
|
+
# integrator:: String
|
37
|
+
# shopping_cart_extension:: {Ingenico::Connect::SDK::Domain::Metadata::ShoppingCartExtension} that stores shopping cart-related metadata.
|
38
|
+
#
|
39
|
+
# If a _properties_ object is given, it will be parsed like a hash in order to read these attributes.
|
40
|
+
# If a value is given in both the _properties_ hash and as a separate parameter,
|
41
|
+
# the separate parameter will take precedence over the value in the properties.
|
42
|
+
def initialize(properties: nil, api_endpoint: nil, api_key_id: nil,
|
43
|
+
secret_api_key: nil, authorization_type: nil,
|
44
|
+
connect_timeout: nil, socket_timeout: nil,
|
45
|
+
max_connections: nil, proxy_configuration: nil,
|
46
|
+
integrator: nil, shopping_cart_extension: nil)
|
47
|
+
if properties
|
48
|
+
super(properties, 'connect.api')
|
49
|
+
unless properties.nil?
|
50
|
+
@authorization_type = DefaultImpl::AuthorizationType.get_authorization(
|
51
|
+
properties['connect.api.authorizationType'])
|
52
|
+
end
|
53
|
+
end
|
54
|
+
if api_endpoint
|
55
|
+
@api_endpoint = api_endpoint
|
56
|
+
end
|
57
|
+
if api_key_id
|
58
|
+
@api_key_id = api_key_id
|
59
|
+
end
|
60
|
+
if secret_api_key
|
61
|
+
@secret_api_key = secret_api_key
|
62
|
+
end
|
63
|
+
if authorization_type
|
64
|
+
@authorization_type = authorization_type
|
65
|
+
end
|
66
|
+
if connect_timeout
|
67
|
+
@connect_timeout = connect_timeout
|
68
|
+
end
|
69
|
+
if socket_timeout
|
70
|
+
@socket_timeout = socket_timeout
|
71
|
+
end
|
72
|
+
if max_connections
|
73
|
+
@max_connections = max_connections
|
74
|
+
end
|
75
|
+
if proxy_configuration
|
76
|
+
@proxy_configuration = proxy_configuration
|
77
|
+
end
|
78
|
+
if integrator
|
79
|
+
@integrator = integrator
|
80
|
+
end
|
81
|
+
if shopping_cart_extension
|
82
|
+
@shopping_cart_extension = shopping_cart_extension
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# Base URL to the GlobalCollect platform
|
87
|
+
attr_accessor :api_endpoint
|
88
|
+
|
89
|
+
# Identifier of the _secret_api_key_ used in authentication.
|
90
|
+
attr_accessor :api_key_id
|
91
|
+
|
92
|
+
# Secret key used in authentication
|
93
|
+
attr_accessor :secret_api_key
|
94
|
+
|
95
|
+
# String representing the authentication algorithm used
|
96
|
+
attr_accessor :authorization_type
|
97
|
+
end
|
98
|
+
end
|