adyen-ruby-api-library 11.2.0 → 12.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 +4 -4
- data/.github/CODEOWNERS +1 -1
- data/.github/workflows/codeql.yml +4 -4
- data/.github/workflows/release.yml +1 -1
- data/.github/workflows/ruby.yml +3 -3
- data/.github/workflows/rubygems_release.yml +1 -1
- data/.github/workflows/stale.yml +1 -1
- data/Gemfile +2 -2
- data/README.md +30 -7
- data/VERSION +1 -1
- data/adyen-ruby-api-library.gemspec +1 -1
- data/lib/adyen/client.rb +10 -16
- data/lib/adyen/deprecation.rb +34 -0
- data/lib/adyen/services/balanceControl/balance_control_api.rb +3 -3
- data/lib/adyen/services/balancePlatform/account_holders_api.rb +14 -18
- data/lib/adyen/services/balancePlatform/authorized_card_users_api.rb +4 -12
- data/lib/adyen/services/balancePlatform/balance_accounts_api.rb +5 -65
- data/lib/adyen/services/balancePlatform/balances_api.rb +5 -15
- data/lib/adyen/services/balancePlatform/bank_account_validation_api.rb +1 -3
- data/lib/adyen/services/balancePlatform/card_orders_api.rb +2 -6
- data/lib/adyen/services/balancePlatform/custom_payout_schedules_sweeps_api.rb +56 -0
- data/lib/adyen/services/balancePlatform/direct_debit_mandates_api.rb +48 -0
- data/lib/adyen/services/balancePlatform/grant_accounts_api.rb +3 -3
- data/lib/adyen/services/balancePlatform/grant_offers_api.rb +6 -6
- data/lib/adyen/services/balancePlatform/manage_card_pin_api.rb +3 -9
- data/lib/adyen/services/balancePlatform/manage_sca_devices_api.rb +6 -18
- data/lib/adyen/services/balancePlatform/managed_payout_schedules_api.rb +80 -0
- data/lib/adyen/services/balancePlatform/network_tokens_api.rb +2 -6
- data/lib/adyen/services/balancePlatform/payment_instrument_groups_api.rb +3 -9
- data/lib/adyen/services/balancePlatform/payment_instruments_api.rb +9 -27
- data/lib/adyen/services/balancePlatform/platform_api.rb +3 -9
- data/lib/adyen/services/balancePlatform/recurring_top_ups_api.rb +48 -0
- data/lib/adyen/services/balancePlatform/sca_association_management_api.rb +3 -9
- data/lib/adyen/services/balancePlatform/sca_device_management_api.rb +11 -9
- data/lib/adyen/services/balancePlatform/transaction_rules_api.rb +4 -12
- data/lib/adyen/services/balancePlatform/transfer_limits_balance_account_level_api.rb +6 -18
- data/lib/adyen/services/balancePlatform/transfer_limits_balance_platform_level_api.rb +4 -12
- data/lib/adyen/services/balancePlatform/transfer_routes_api.rb +1 -3
- data/lib/adyen/services/balancePlatform.rb +20 -0
- data/lib/adyen/services/binLookup/bin_lookup_api.rb +2 -6
- data/lib/adyen/services/capital/dynamic_offers_api.rb +40 -0
- data/lib/adyen/services/capital/grant_accounts_api.rb +1 -3
- data/lib/adyen/services/capital/grant_offers_api.rb +4 -8
- data/lib/adyen/services/capital/grants_api.rb +6 -18
- data/lib/adyen/services/capital.rb +5 -0
- data/lib/adyen/services/checkout/donations_api.rb +2 -6
- data/lib/adyen/services/checkout/modifications_api.rb +6 -18
- data/lib/adyen/services/checkout/orders_api.rb +3 -9
- data/lib/adyen/services/checkout/payment_links_api.rb +3 -9
- data/lib/adyen/services/checkout/payments_api.rb +14 -18
- data/lib/adyen/services/checkout/recurring_api.rb +4 -12
- data/lib/adyen/services/checkout/utility_api.rb +6 -12
- data/lib/adyen/services/checkout.rb +1 -1
- data/lib/adyen/services/dataProtection/data_protection_api.rb +1 -3
- data/lib/adyen/services/disputes/disputes_api.rb +5 -15
- data/lib/adyen/services/legalEntityManagement/business_lines_api.rb +4 -12
- data/lib/adyen/services/legalEntityManagement/documents_api.rb +4 -12
- data/lib/adyen/services/legalEntityManagement/hosted_onboarding_api.rb +3 -9
- data/lib/adyen/services/legalEntityManagement/legal_entities_api.rb +7 -21
- data/lib/adyen/services/legalEntityManagement/pci_questionnaires_api.rb +5 -15
- data/lib/adyen/services/legalEntityManagement/tax_e_delivery_consent_api.rb +2 -6
- data/lib/adyen/services/legalEntityManagement/terms_of_service_api.rb +5 -15
- data/lib/adyen/services/legalEntityManagement/transfer_instruments_api.rb +4 -12
- data/lib/adyen/services/management/account_company_level_api.rb +3 -9
- data/lib/adyen/services/management/account_merchant_level_api.rb +4 -12
- data/lib/adyen/services/management/account_store_level_api.rb +8 -24
- data/lib/adyen/services/management/allowed_origins_company_level_api.rb +4 -12
- data/lib/adyen/services/management/allowed_origins_merchant_level_api.rb +4 -12
- data/lib/adyen/services/management/android_files_company_level_api.rb +6 -18
- data/lib/adyen/services/management/api_credentials_company_level_api.rb +4 -12
- data/lib/adyen/services/management/api_credentials_merchant_level_api.rb +4 -12
- data/lib/adyen/services/management/api_key_company_level_api.rb +1 -3
- data/lib/adyen/services/management/api_key_merchant_level_api.rb +1 -3
- data/lib/adyen/services/management/client_key_company_level_api.rb +1 -3
- data/lib/adyen/services/management/client_key_merchant_level_api.rb +1 -3
- data/lib/adyen/services/management/donation_campaigns_api.rb +64 -0
- data/lib/adyen/services/management/my_api_credential_api.rb +6 -18
- data/lib/adyen/services/management/payment_methods_merchant_level_api.rb +6 -18
- data/lib/adyen/services/management/payout_settings_merchant_level_api.rb +5 -15
- data/lib/adyen/services/management/split_configuration_merchant_level_api.rb +9 -27
- data/lib/adyen/services/management/terminal_actions_company_level_api.rb +2 -6
- data/lib/adyen/services/management/terminal_actions_terminal_level_api.rb +1 -3
- data/lib/adyen/services/management/terminal_orders_company_level_api.rb +10 -30
- data/lib/adyen/services/management/terminal_orders_merchant_level_api.rb +10 -30
- data/lib/adyen/services/management/terminal_settings_company_level_api.rb +4 -12
- data/lib/adyen/services/management/terminal_settings_merchant_level_api.rb +4 -12
- data/lib/adyen/services/management/terminal_settings_store_level_api.rb +8 -24
- data/lib/adyen/services/management/terminal_settings_terminal_level_api.rb +4 -12
- data/lib/adyen/services/management/terminals_terminal_level_api.rb +2 -6
- data/lib/adyen/services/management/users_company_level_api.rb +4 -12
- data/lib/adyen/services/management/users_merchant_level_api.rb +4 -12
- data/lib/adyen/services/management/webhooks_company_level_api.rb +7 -21
- data/lib/adyen/services/management/webhooks_merchant_level_api.rb +7 -21
- data/lib/adyen/services/management.rb +5 -0
- data/lib/adyen/services/payment/modifications_api.rb +10 -24
- data/lib/adyen/services/payment/payments_api.rb +5 -15
- data/lib/adyen/services/paymentsApp/payments_app_api.rb +5 -15
- data/lib/adyen/services/payout/initialization_api.rb +3 -9
- data/lib/adyen/services/payout/instant_payouts_api.rb +1 -3
- data/lib/adyen/services/payout/reviewing_api.rb +2 -6
- data/lib/adyen/services/posMobile/pos_mobile_api.rb +6 -3
- data/lib/adyen/services/posTerminalManagement.rb +10 -0
- data/lib/adyen/services/recurring/recurring_api.rb +10 -18
- data/lib/adyen/services/service.rb +12 -2
- data/lib/adyen/services/sessionAuthentication/session_authentication_api.rb +1 -3
- data/lib/adyen/services/storedValue/stored_value_api.rb +6 -18
- data/lib/adyen/services/transfers/capital_api.rb +9 -9
- data/lib/adyen/services/transfers/cash_out_api.rb +24 -0
- data/lib/adyen/services/transfers/transactions_api.rb +2 -6
- data/lib/adyen/services/transfers/transfers_api.rb +6 -18
- data/lib/adyen/services/transfers.rb +5 -0
- data/lib/adyen/utils/hmac_validator.rb +15 -18
- data/lib/adyen/version.rb +1 -1
- data/sdk-generation-log/balancecontrol.json +8 -0
- data/sdk-generation-log/balanceplatform.json +8 -0
- data/sdk-generation-log/binlookup.json +8 -0
- data/sdk-generation-log/capital.json +8 -0
- data/sdk-generation-log/checkout.json +8 -0
- data/sdk-generation-log/dataprotection.json +8 -0
- data/sdk-generation-log/disputes.json +8 -0
- data/sdk-generation-log/legalentitymanagement.json +8 -0
- data/sdk-generation-log/management.json +8 -0
- data/sdk-generation-log/payment.json +8 -0
- data/sdk-generation-log/paymentsapp.json +8 -0
- data/sdk-generation-log/payout.json +8 -0
- data/sdk-generation-log/posmobile.json +8 -0
- data/sdk-generation-log/recurring.json +8 -0
- data/sdk-generation-log/sessionauthentication.json +8 -0
- data/sdk-generation-log/storedvalue.json +8 -0
- data/sdk-generation-log/transfers.json +8 -0
- data/spec/balance_control_spec.rb +41 -0
- data/spec/balance_platform_spec.rb +609 -4
- data/spec/capital_spec.rb +82 -0
- data/spec/checkout-oauth_spec.rb +220 -10
- data/spec/checkout_spec.rb +245 -10
- data/spec/client_spec.rb +23 -5
- data/spec/deprecation_spec.rb +112 -0
- data/spec/management_spec.rb +184 -0
- data/spec/mocks/requests/BalancePlatform/apply_managed_schedule.json +14 -0
- data/spec/mocks/requests/BalancePlatform/begin_sca_device_registration.json +4 -0
- data/spec/mocks/requests/BalancePlatform/create_recurring_top_up.json +21 -0
- data/spec/mocks/requests/BalancePlatform/create_sweep.json +10 -0
- data/spec/mocks/requests/BalancePlatform/finish_sca_device_registration.json +3 -0
- data/spec/mocks/requests/BalancePlatform/submit_sca_association.json +8 -0
- data/spec/mocks/requests/BalancePlatform/update_balance_account_managed_schedule.json +5 -0
- data/spec/mocks/requests/BalancePlatform/update_mandate.json +14 -0
- data/spec/mocks/requests/BalancePlatform/update_recurring_top_ups.json +3 -0
- data/spec/mocks/requests/BalancePlatform/update_sweep.json +6 -0
- data/spec/mocks/requests/Checkout/amount_updates.json +1 -1
- data/spec/mocks/requests/Checkout/card_details.json +3 -0
- data/spec/mocks/requests/Checkout/create_stored_payment_method.json +10 -0
- data/spec/mocks/requests/Checkout/donation_campaigns.json +4 -0
- data/spec/mocks/requests/Checkout/donations.json +9 -0
- data/spec/mocks/requests/Checkout/orders.json +5 -3
- data/spec/mocks/requests/Checkout/payment-details.json +2 -14
- data/spec/mocks/requests/Checkout/payment_methods_balance.json +5 -2
- data/spec/mocks/requests/Checkout/payments.json +9 -10
- data/spec/mocks/requests/Checkout/paypal_update_order.json +5 -0
- data/spec/mocks/requests/Checkout/reversals.json +3 -0
- data/spec/mocks/requests/Checkout/update_session.json +7 -0
- data/spec/mocks/requests/Management/create_donation_campaign.json +7 -0
- data/spec/mocks/requests/Management/list_nonprofits.json +5 -0
- data/spec/mocks/requests/Management/update_donation_campaign.json +6 -0
- data/spec/mocks/requests/Transfers/initiate_cashout.json +12 -0
- data/spec/mocks/responses/BalancePlatform/apply_managed_schedule.json +17 -0
- data/spec/mocks/responses/BalancePlatform/begin_sca_device_registration.json +8 -0
- data/spec/mocks/responses/BalancePlatform/create_recurring_top_up.json +23 -0
- data/spec/mocks/responses/BalancePlatform/create_sweep.json +12 -0
- data/spec/mocks/responses/BalancePlatform/finish_sca_device_registration.json +7 -0
- data/spec/mocks/responses/BalancePlatform/get_all_sweeps_for_balance_account.json +31 -0
- data/spec/mocks/responses/BalancePlatform/get_balance_account_managed_schedule_by_id.json +17 -0
- data/spec/mocks/responses/BalancePlatform/get_balance_account_managed_schedules.json +26 -0
- data/spec/mocks/responses/BalancePlatform/get_balance_platform_managed_schedule_by_id.json +27 -0
- data/spec/mocks/responses/BalancePlatform/get_balance_platform_managed_schedules.json +31 -0
- data/spec/mocks/responses/BalancePlatform/get_list_of_mandates.json +19 -0
- data/spec/mocks/responses/BalancePlatform/get_mandate_by_id.json +14 -0
- data/spec/mocks/responses/BalancePlatform/get_payout_schedule_executions.json +21 -0
- data/spec/mocks/responses/BalancePlatform/get_recurring_top_ups.json +35 -0
- data/spec/mocks/responses/BalancePlatform/get_sweep.json +12 -0
- data/spec/mocks/responses/BalancePlatform/get_tax_form_summary.json +17 -0
- data/spec/mocks/responses/BalancePlatform/submit_sca_association.json +10 -0
- data/spec/mocks/responses/BalancePlatform/update_balance_account_managed_schedule.json +18 -0
- data/spec/mocks/responses/BalancePlatform/update_recurring_top_ups.json +23 -0
- data/spec/mocks/responses/BalancePlatform/update_sweep.json +12 -0
- data/spec/mocks/responses/Capital/calculate-preliminary-offer-from-dynamic-offer.json +16 -0
- data/spec/mocks/responses/Capital/create-static-offer-from-dynamic-offer.json +9 -0
- data/spec/mocks/responses/Capital/get-all-dynamic-offers.json +18 -0
- data/spec/mocks/responses/Checkout/amount_updates.json +1 -1
- data/spec/mocks/responses/Checkout/card_details.json +5 -0
- data/spec/mocks/responses/Checkout/create_stored_payment_method.json +5 -0
- data/spec/mocks/responses/Checkout/donation_campaigns.json +1 -0
- data/spec/mocks/responses/Checkout/donations.json +5 -0
- data/spec/mocks/responses/Checkout/orders.json +6 -1
- data/spec/mocks/responses/Checkout/orders_cancel.json +1 -1
- data/spec/mocks/responses/Checkout/payment-details.json +2 -13
- data/spec/mocks/responses/Checkout/payment_links.json +3 -0
- data/spec/mocks/responses/Checkout/payment_methods.json +2 -2
- data/spec/mocks/responses/Checkout/payment_methods_balance.json +5 -1
- data/spec/mocks/responses/Checkout/payments.json +4 -94
- data/spec/mocks/responses/Checkout/paypal_update_order.json +4 -0
- data/spec/mocks/responses/Checkout/reversals.json +6 -0
- data/spec/mocks/responses/Checkout/update_session.json +3 -0
- data/spec/mocks/responses/Management/donation_campaign.json +13 -0
- data/spec/mocks/responses/Management/list_donation_campaigns.json +19 -0
- data/spec/mocks/responses/Management/list_nonprofits.json +34 -0
- data/spec/mocks/responses/Transfers/initiate_cashout.json +31 -0
- data/spec/service_spec.rb +40 -0
- data/spec/spec_helper.rb +2 -2
- data/spec/transfers_spec.rb +28 -0
- data/spec/utils/consumer_smoke.rb +23 -0
- data/spec/utils/hmac_validator_spec.rb +55 -0
- data/templates/api-small.mustache +4 -4
- data/templates/api.mustache +4 -4
- metadata +84 -2
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "TUPC0000000000000000000001",
|
|
3
|
+
"counterparty": {
|
|
4
|
+
"transferInstrumentId": "SE000000000000000000000001"
|
|
5
|
+
},
|
|
6
|
+
"description": "new description",
|
|
7
|
+
"topUpAmount": {
|
|
8
|
+
"fixed": {
|
|
9
|
+
"value": 1000,
|
|
10
|
+
"currency": "EUR"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"trigger": {
|
|
14
|
+
"schedule": {
|
|
15
|
+
"type": "weekdays"
|
|
16
|
+
},
|
|
17
|
+
"threshold": {
|
|
18
|
+
"value": 100,
|
|
19
|
+
"currency": "EUR"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"status": "inactive"
|
|
23
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dynamicOffers": [
|
|
3
|
+
{
|
|
4
|
+
"id": "DO00000000000000000000001",
|
|
5
|
+
"accountHolderId": "AH00000000000000000000001",
|
|
6
|
+
"financing": {
|
|
7
|
+
"minimum": {
|
|
8
|
+
"currency": "EUR",
|
|
9
|
+
"value": 5000
|
|
10
|
+
},
|
|
11
|
+
"maximum": {
|
|
12
|
+
"currency": "EUR",
|
|
13
|
+
"value": 25000
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -1,14 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"resultCode": "RedirectShopper"
|
|
3
|
-
|
|
4
|
-
{
|
|
5
|
-
"key": "returnUrlQueryString",
|
|
6
|
-
"type": "text"
|
|
7
|
-
}
|
|
8
|
-
],
|
|
9
|
-
"paymentData": "Ab02b4c0!BQABAgCZ5wU8Xzylbj3tQI9zZtbOmutq5gON3jF0JOVL9VXTcQ70LkB8UzJZ2EuJiURbwNSpyfMnNNR9ecDBq0Ai+Cu97eUP6/wc51Gh2VClWKILA3fpetixy8rcEd1dHVT9Exa77zg0LuY6qXz/5GIIH62y9CnmKJH4a4KZVQwFu9VYtPnsC8p6Bby2BuByD/VSa3noZDBVuapvWL7+8P6QaPgkFgoWYnzT8uzdoCio+gTNEYivlxhuQj5qa+eyQCrzZDXAvl+1a1z7O3BOOC7yPT0VDd8zNnyxKk9lyax75FUCRYl1BNCP1CGGDzHfvsS8C4FhXPixhZ4Lb1pYajLpKXNqfiRqU4DXn6bAkdnoQ5X8TvD3HqgHos4OLY93qq7j3ai+zeS/hWkZrd0SM+br3G+kCPmzMcBYdIqJLecJcVUUWHUNfdYIl6tmzNDbeedqSXVkyX+w7R/bM3hHppQyFpy2UM6BHalSaIc2oqR2wLQeObOlV9VML2yAvUzIK6OsFdnCtjK+aQsYwBvKMHkgsukvJiEvfwkLzrwxJQWRvYQtVV7ITcSz98tKZmxUFdke8Hca+ySTbqq9OvjGCK+T7FLhaKYGSECcwwKCCKMneTW7S/8Y+qpw2WRBx2Bhho8ZfIwsnq2Nll+QbaOJEiC0PG3NokYhcrKVhXiFFkYYnzNI9hAnjkefE+5rR5dWWWM8Q8h7AEp7ImtleSI6IkFGMEFBQTEwM0NBNTM3RUFFRDg3QzI0REQ1MzkwOUI4MEE3OEE5MjNFMzgyM0Q2OERBQ0M5NEI5RkY4MzA1REMifbA560uFihRRe//z0I3kVj3lZxHTKJZgPZUDraWMQfkMjM7KKXPwyCXyThFp1bFYMmebpxYvbqErFky66og24VCmvNKiZnf1uPJi5OsK9t6QJU1vhC0/QzeCu1TQLUEyUWrelX0V+iO+933RFUzSv78BLNO/bt5JMFIKQoLP6J4CW+bHk+fWrBn4PhbZ5z/ezu23OHoDvg6Pvk1kjxps8FAbHoSB35b+HvOUDtph/usiBWBCgLQVtkbR7C2ImDd4HRh3QvkgjXgbRGGIBBc+jPM9TMYytNlAhB32jktviPASz9+v073N417onB0pcS0Bp2iFTpmsMjWcSbctbj65JTiBIwY6egGrD9ona/oEb+/oppiz4KzS2sJKvtOPg+Jxn2UNssc0dg8gZhV1dxfSqDNonsfxl0vwKoeG99FjyrfgFQvYNlqjn3/WNacjFtCOrBafIQJk95TnkBdpzuqtvqQyIZeq7PbRuTNIb1AQBTmKNmuZMd+gO95sIvhbE1XgO2InIQKCpw0q0Hbw9Nzowm6w1gbSKnabGZhb8SOM+lJ37dNTsNIB/5Eo36kijladqVt5RYGMHLkQa6vxjhfuYPfHYzO5MX4i0ml8rstB5D5sfLqvY3Igzc6RnDhpX5kxVIFAhuPxkTeKFTpCXmnHJwilCY9pZTzVlJp6kOWnk1JlalrzmI3iU6Zhz3ICLNQ+Ub/HEnombi31lZWHnUmhwGKxKg==",
|
|
10
|
-
"redirect": {
|
|
11
|
-
"method": "GET",
|
|
12
|
-
"url": "https://test.adyen.com/hpp/redirectIdeal.shtml?brandCode=ideal¤cyCode=USD&merchantAccount=ColinRood&merchantReference=PM+Checkout+Payment&merchantSig=MKOR8NMs6190maY8sPDCMgOHNIscN356EIhUxSnpDsw%3D&paymentAmount=1000&resURL=https%3A%2F%2Fcheckoutshopper-test.adyen.com%2Fcheckoutshopper%2Fservices%2FPaymentIncomingRedirect%2Fv1%2FlocalPaymentMethod%3FreturnURL%3D&sessionValidity=2018-03-02T18%3A05%3A42Z&skinCode=pub.v2.8115054323780109.7FDNnCDyDJG8hRqbIjU3AQHvyBRuRoNFYHQWgmX4lAU"
|
|
13
|
-
}
|
|
14
|
-
}
|
|
2
|
+
"resultCode": "RedirectShopper"
|
|
3
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"paymentMethods": [
|
|
3
3
|
{
|
|
4
|
-
"
|
|
4
|
+
"inputDetails": [
|
|
5
5
|
{
|
|
6
6
|
"key": "additionalData.card.encrypted.json",
|
|
7
7
|
"type": "cardToken"
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"type": "scheme"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
|
-
"
|
|
14
|
+
"inputDetails": [
|
|
15
15
|
{
|
|
16
16
|
"items": [
|
|
17
17
|
{
|
|
@@ -1,95 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
"avsResult": "4 AVS not supported for this card type",
|
|
7
|
-
"cardHolderName": "Holder",
|
|
8
|
-
"cardSummary": "1111",
|
|
9
|
-
"fraudManualReview": "false",
|
|
10
|
-
"threeDOffered": "true",
|
|
11
|
-
"refusalReasonRaw": "AUTHORISED",
|
|
12
|
-
"expiryDate": "8/2018",
|
|
13
|
-
"cvcResult": "1 Matches",
|
|
14
|
-
"cardBin": "411111",
|
|
15
|
-
"avsResultRaw": "4",
|
|
16
|
-
"threeDAuthenticated": "false",
|
|
17
|
-
"paymentMethod": "visa",
|
|
18
|
-
"cvcResultRaw": "1",
|
|
19
|
-
"acquirerCode": "TestPmmAcquirer",
|
|
20
|
-
"acquirerReference": "7F59FSE1M6K"
|
|
21
|
-
},
|
|
22
|
-
"fraudResult": {
|
|
23
|
-
"accountScore": 25,
|
|
24
|
-
"results": [{
|
|
25
|
-
"FraudCheckResult": {
|
|
26
|
-
"accountScore": 8,
|
|
27
|
-
"checkId": 2,
|
|
28
|
-
"name": "CardChunkUsage"
|
|
29
|
-
}
|
|
30
|
-
}, {
|
|
31
|
-
"FraudCheckResult": {
|
|
32
|
-
"accountScore": 5,
|
|
33
|
-
"checkId": 3,
|
|
34
|
-
"name": "PaymentDetailUsage"
|
|
35
|
-
}
|
|
36
|
-
}, {
|
|
37
|
-
"FraudCheckResult": {
|
|
38
|
-
"accountScore": 12,
|
|
39
|
-
"checkId": 4,
|
|
40
|
-
"name": "HolderNameUsage"
|
|
41
|
-
}
|
|
42
|
-
}, {
|
|
43
|
-
"FraudCheckResult": {
|
|
44
|
-
"accountScore": 0,
|
|
45
|
-
"checkId": 1,
|
|
46
|
-
"name": "PaymentDetailRefCheck"
|
|
47
|
-
}
|
|
48
|
-
}, {
|
|
49
|
-
"FraudCheckResult": {
|
|
50
|
-
"accountScore": 0,
|
|
51
|
-
"checkId": 13,
|
|
52
|
-
"name": "IssuerRefCheck"
|
|
53
|
-
}
|
|
54
|
-
}, {
|
|
55
|
-
"FraudCheckResult": {
|
|
56
|
-
"accountScore": 0,
|
|
57
|
-
"checkId": 15,
|
|
58
|
-
"name": "IssuingCountryReferral"
|
|
59
|
-
}
|
|
60
|
-
}, {
|
|
61
|
-
"FraudCheckResult": {
|
|
62
|
-
"accountScore": 0,
|
|
63
|
-
"checkId": 27,
|
|
64
|
-
"name": "PmOwnerRefCheck"
|
|
65
|
-
}
|
|
66
|
-
}, {
|
|
67
|
-
"FraudCheckResult": {
|
|
68
|
-
"accountScore": 0,
|
|
69
|
-
"checkId": 41,
|
|
70
|
-
"name": "PaymentDetailNonFraudRefCheck"
|
|
71
|
-
}
|
|
72
|
-
}, {
|
|
73
|
-
"FraudCheckResult": {
|
|
74
|
-
"accountScore": 0,
|
|
75
|
-
"checkId": 10,
|
|
76
|
-
"name": "HolderNameContainsNumber"
|
|
77
|
-
}
|
|
78
|
-
}, {
|
|
79
|
-
"FraudCheckResult": {
|
|
80
|
-
"accountScore": 0,
|
|
81
|
-
"checkId": 11,
|
|
82
|
-
"name": "HolderNameIsOneWord"
|
|
83
|
-
}
|
|
84
|
-
}, {
|
|
85
|
-
"FraudCheckResult": {
|
|
86
|
-
"accountScore": 0,
|
|
87
|
-
"checkId": 25,
|
|
88
|
-
"name": "CVCAuthResultCheck"
|
|
89
|
-
}
|
|
90
|
-
}]
|
|
91
|
-
},
|
|
92
|
-
"pspReference": "7924835492819808",
|
|
93
|
-
"resultCode": "Authorised",
|
|
94
|
-
"authCode": "69746"
|
|
95
|
-
}
|
|
2
|
+
"merchantReference": "YOUR_REFERENCE_0001",
|
|
3
|
+
"pspReference": "8512345678901234",
|
|
4
|
+
"resultCode": "Authorised"
|
|
5
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "DC3227C223222B5BLP6JQC3FD",
|
|
3
|
+
"name": "Spring fundraiser",
|
|
4
|
+
"status": "inactive",
|
|
5
|
+
"nonprofitCause": {
|
|
6
|
+
"causeId": "CA3227C223222B5BLP6JQC3FD",
|
|
7
|
+
"nonprofitName": "Example Nonprofit",
|
|
8
|
+
"description": "An example nonprofit cause."
|
|
9
|
+
},
|
|
10
|
+
"accountHolderIds": [
|
|
11
|
+
"AH3227C223222B5BLP6JQC3FD"
|
|
12
|
+
]
|
|
13
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"itemsTotal": 1,
|
|
3
|
+
"pagesTotal": 1,
|
|
4
|
+
"campaigns": [
|
|
5
|
+
{
|
|
6
|
+
"id": "DC3227C223222B5BLP6JQC3FD",
|
|
7
|
+
"name": "Spring fundraiser",
|
|
8
|
+
"status": "active",
|
|
9
|
+
"nonprofitCause": {
|
|
10
|
+
"causeId": "CA3227C223222B5BLP6JQC3FD",
|
|
11
|
+
"nonprofitName": "Example Nonprofit",
|
|
12
|
+
"description": "An example nonprofit cause."
|
|
13
|
+
},
|
|
14
|
+
"accountHolderIds": [
|
|
15
|
+
"AH3227C223222B5BLP6JQC3FD"
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"itemsTotal": 1,
|
|
3
|
+
"pagesTotal": 1,
|
|
4
|
+
"nonprofits": [
|
|
5
|
+
{
|
|
6
|
+
"id": "NP3227C223222B5BLP6JQC3FD",
|
|
7
|
+
"name": "Example Nonprofit",
|
|
8
|
+
"description": "An example nonprofit organization.",
|
|
9
|
+
"logoUrl": "https://example.org/logo.png",
|
|
10
|
+
"website": "https://example.org",
|
|
11
|
+
"termsAndConditionsUrl": "https://example.org/terms",
|
|
12
|
+
"goals": [
|
|
13
|
+
"unsdg_1"
|
|
14
|
+
],
|
|
15
|
+
"locales": [
|
|
16
|
+
"en-US"
|
|
17
|
+
],
|
|
18
|
+
"regions": [
|
|
19
|
+
"US"
|
|
20
|
+
],
|
|
21
|
+
"causes": [
|
|
22
|
+
{
|
|
23
|
+
"id": "CA3227C223222B5BLP6JQC3FD",
|
|
24
|
+
"name": "Example Cause",
|
|
25
|
+
"description": "An example cause.",
|
|
26
|
+
"bannerUrl": "https://example.org/banner.png",
|
|
27
|
+
"locales": [
|
|
28
|
+
"en-US"
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "1W1UG35U8A9J5ZLG",
|
|
3
|
+
"amount": {
|
|
4
|
+
"value": 110000,
|
|
5
|
+
"currency": "EUR"
|
|
6
|
+
},
|
|
7
|
+
"instructingBalanceAccountId": "BAB8B2C3D4E5F6G7H8D9J6GD4",
|
|
8
|
+
"counterparty": {
|
|
9
|
+
"transferInstrumentId": "SE000JVZ7Q8D2ZJ4VZ0J"
|
|
10
|
+
},
|
|
11
|
+
"referenceForBeneficiary": "Your-reference-sent-to-the-beneficiary",
|
|
12
|
+
"description": "Your description for the cashout",
|
|
13
|
+
"transfers": [
|
|
14
|
+
{
|
|
15
|
+
"id": "400F6060JMB1I0AB",
|
|
16
|
+
"type": "cashoutRepayment",
|
|
17
|
+
"amount": {
|
|
18
|
+
"currency": "EUR",
|
|
19
|
+
"value": 50500
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "400F6060JMB1I0AA",
|
|
24
|
+
"type": "cashoutFee",
|
|
25
|
+
"amount": {
|
|
26
|
+
"currency": "EUR",
|
|
27
|
+
"value": 500
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
data/spec/service_spec.rb
CHANGED
|
@@ -3,6 +3,30 @@
|
|
|
3
3
|
require 'spec_helper'
|
|
4
4
|
|
|
5
5
|
RSpec.describe Adyen::Service do
|
|
6
|
+
describe '#build_endpoint' do
|
|
7
|
+
subject(:service) { described_class.new(nil, nil, 'Test') }
|
|
8
|
+
|
|
9
|
+
it 'strips the leading slash' do
|
|
10
|
+
expect(service.send(:build_endpoint, '/accountHolders')).to eq 'accountHolders'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'substitutes a single path parameter' do
|
|
14
|
+
expect(service.send(:build_endpoint, '/accountHolders/{id}', 'AH123')).to eq 'accountHolders/AH123'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'substitutes multiple path parameters' do
|
|
18
|
+
expect(service.send(:build_endpoint, '/merchants/{merchantId}/stores/{storeId}', 'M1', 'S2')).to eq 'merchants/M1/stores/S2'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'handles a path with no parameters' do
|
|
22
|
+
expect(service.send(:build_endpoint, '/companies')).to eq 'companies'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'preserves literal percent characters in the path' do
|
|
26
|
+
expect(service.send(:build_endpoint, '/path%20with/{id}/spaces', 'X')).to eq 'path%20with/X/spaces'
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
6
30
|
describe '.action_for_method_name' do
|
|
7
31
|
it 'handles all methods that exist currently' do
|
|
8
32
|
expect(described_class.action_for_method_name(:adjust_authorisation)).to eq 'adjustAuthorisation'
|
|
@@ -45,6 +69,22 @@ RSpec.describe Adyen::Service do
|
|
|
45
69
|
expect(described_class.action_for_method_name(:get_onboarding_url)).to eq 'getOnboardingUrl'
|
|
46
70
|
end
|
|
47
71
|
end
|
|
72
|
+
|
|
73
|
+
describe '#create_query_string' do
|
|
74
|
+
let(:service) { described_class.new(double('client'), 'v1', 'TestService') }
|
|
75
|
+
|
|
76
|
+
it 'returns empty string when params are empty' do
|
|
77
|
+
expect(service.create_query_string({})).to eq ''
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'returns query string with ? prefix when params are present' do
|
|
81
|
+
expect(service.create_query_string({ key: 'value' })).to eq '?key=value'
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'encodes multiple params' do
|
|
85
|
+
expect(service.create_query_string({ a: '1', b: '2' })).to eq '?a=1&b=2'
|
|
86
|
+
end
|
|
87
|
+
end
|
|
48
88
|
end
|
|
49
89
|
# rubocop:enable Layout/LineLength
|
|
50
90
|
# rubocop:enable Metrics/BlockLength
|
data/spec/spec_helper.rb
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
# rubocop:disable Metrics/AbcSize
|
|
3
3
|
|
|
4
4
|
require 'webmock/rspec'
|
|
5
|
-
require 'base64'
|
|
6
5
|
require_relative '../lib/adyen-ruby-api-library'
|
|
7
6
|
|
|
8
7
|
# disable external connections
|
|
@@ -32,7 +31,8 @@ def create_test(client, service, method_name, parent_object)
|
|
|
32
31
|
elsif !client.oauth_token.nil?
|
|
33
32
|
headers["Authorization"] = "Bearer #{client.oauth_token}"
|
|
34
33
|
elsif !client.ws_user.nil? && !client.ws_password.nil?
|
|
35
|
-
|
|
34
|
+
# Base64 encoding
|
|
35
|
+
auth_header = "Basic #{["#{client.ws_user}:#{client.ws_password}"].pack('m')}"
|
|
36
36
|
headers['Authorization'] = auth_header.strip
|
|
37
37
|
else
|
|
38
38
|
raise ArgumentError, 'Authentication not set correctly in test case'
|
data/spec/transfers_spec.rb
CHANGED
|
@@ -33,6 +33,34 @@ RSpec.describe Adyen::Transfers, service: 'transfers' do
|
|
|
33
33
|
.to eq(200)
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
+
it 'makes a cashouts POST call' do
|
|
37
|
+
request_body = JSON.parse(json_from_file('mocks/requests/Transfers/initiate_cashout.json'))
|
|
38
|
+
|
|
39
|
+
response_body = json_from_file('mocks/responses/Transfers/initiate_cashout.json')
|
|
40
|
+
|
|
41
|
+
url = @shared_values[:client].service_url(@shared_values[:service], 'cashouts',
|
|
42
|
+
@shared_values[:client].transfers.version)
|
|
43
|
+
WebMock.stub_request(:post, url)
|
|
44
|
+
.with(
|
|
45
|
+
body: request_body,
|
|
46
|
+
headers: {
|
|
47
|
+
'x-api-key' => @shared_values[:client].api_key
|
|
48
|
+
}
|
|
49
|
+
)
|
|
50
|
+
.to_return(
|
|
51
|
+
body: response_body
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
result = @shared_values[:client].transfers.cash_out_api.initiate_cashout(request_body)
|
|
55
|
+
response_hash = result.response
|
|
56
|
+
|
|
57
|
+
expect(result.status)
|
|
58
|
+
.to eq(200)
|
|
59
|
+
expect(response_hash).to eq(JSON.parse(response_body))
|
|
60
|
+
expect(response_hash).to be_a Adyen::HashWithAccessors
|
|
61
|
+
expect(response_hash).to be_a_kind_of Hash
|
|
62
|
+
end
|
|
63
|
+
|
|
36
64
|
it 'makes a transactions GET call' do
|
|
37
65
|
response_body = json_from_file('mocks/responses/Transfers/make_transfer.json')
|
|
38
66
|
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Consumer smoke test for the HMAC validator, run by hmac_validator_spec.rb.
|
|
2
|
+
# Executed in a clean Ruby process that only loads the library.
|
|
3
|
+
# Exits non-zero (via abort) when the library cannot be used standalone.
|
|
4
|
+
|
|
5
|
+
require 'adyen-ruby-api-library'
|
|
6
|
+
|
|
7
|
+
validator = Adyen::Utils::HmacValidator.new
|
|
8
|
+
key = '44782DEF547AAA06C910C43932B1EB0C71FC68D9D0C057550C48EC2ACF6BA056'
|
|
9
|
+
webhook_request_item = {
|
|
10
|
+
'additionalData' => { 'hmacSignature' => 'coqCmt/IZ4E3CzPvMY8zTjQVL5hYJUiBRg8UU+iCWo0=' },
|
|
11
|
+
'amount' => { 'value' => 1130, 'currency' => 'EUR' },
|
|
12
|
+
'pspReference' => '7914073381342284',
|
|
13
|
+
'eventCode' => 'AUTHORISATION',
|
|
14
|
+
'merchantAccountCode' => 'TestMerchant',
|
|
15
|
+
'merchantReference' => 'TestPayment-1407325143704',
|
|
16
|
+
'paymentMethod' => 'visa',
|
|
17
|
+
'success' => 'true'
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
abort 'valid_webhook_hmac? returned false' unless validator.valid_webhook_hmac?(webhook_request_item, key)
|
|
21
|
+
|
|
22
|
+
payload_sign = validator.calculate_webhook_payload_hmac('payload', key)
|
|
23
|
+
abort "unexpected payload hmac: #{payload_sign}" unless payload_sign == 'McjT0WKyyQ5Zqv3FC9sVNf14NYfSAZa1chxoXY3yIlE='
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
|
+
require 'open3'
|
|
2
3
|
|
|
3
4
|
RSpec.describe Adyen::Utils::HmacValidator do
|
|
4
5
|
let(:validator) { described_class.new }
|
|
@@ -77,6 +78,60 @@ RSpec.describe Adyen::Utils::HmacValidator do
|
|
|
77
78
|
expect(validator.valid_webhook_payload_hmac?(hmac_signature, key, payload)).to be true
|
|
78
79
|
end
|
|
79
80
|
|
|
81
|
+
it 'returns false when additionalData hmacSignature is nil' do
|
|
82
|
+
webhook_request_item['additionalData'] = { 'hmacSignature' => nil }
|
|
83
|
+
|
|
84
|
+
expect(validator.valid_webhook_hmac?(webhook_request_item, key)).to be false
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it 'returns false when payload webhook hmac_signature is nil' do
|
|
88
|
+
payload = json_from_file('mocks/responses/Webhooks/mixed_webhook.json')
|
|
89
|
+
|
|
90
|
+
expect(validator.valid_webhook_payload_hmac?(nil, key, payload)).to be false
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
describe 'consumer-side regression' do
|
|
96
|
+
# Run the validator in a clean Ruby process that only loads the library, like
|
|
97
|
+
# a consumer application, so test dependencies cannot mask missing dependencies.
|
|
98
|
+
it 'computes HMAC signatures in a clean consumer process' do
|
|
99
|
+
lib_dir = File.expand_path('../../lib', __dir__)
|
|
100
|
+
smoke_test = File.expand_path('consumer_smoke.rb', __dir__)
|
|
101
|
+
|
|
102
|
+
stdout, stderr, status = Open3.capture3(Gem.ruby, '-I', lib_dir, smoke_test)
|
|
103
|
+
|
|
104
|
+
expect(status).to be_success,
|
|
105
|
+
"library must work in a clean consumer process.\nstdout: #{stdout}\nstderr: #{stderr}"
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
describe 'deprecated methods' do
|
|
110
|
+
around do |example|
|
|
111
|
+
previous = Warning[:deprecated]
|
|
112
|
+
Warning[:deprecated] = true
|
|
113
|
+
example.run
|
|
114
|
+
ensure
|
|
115
|
+
Warning[:deprecated] = previous
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it 'valid_notification_hmac? emits a deprecation warning and still validates' do
|
|
119
|
+
result = nil
|
|
120
|
+
expect do
|
|
121
|
+
result = validator.valid_notification_hmac?(webhook_request_item, key)
|
|
122
|
+
end.to output(/\[DEPRECATED\] `valid_notification_hmac\?` is deprecated\. Use valid_webhook_hmac\?\(\) instead\.\n/).to_stderr
|
|
123
|
+
|
|
124
|
+
expect(result).to be true
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it 'calculate_notification_hmac emits a deprecation warning and still calculates' do
|
|
128
|
+
result = nil
|
|
129
|
+
expect do
|
|
130
|
+
result = validator.calculate_notification_hmac(webhook_request_item, key)
|
|
131
|
+
end.to output(/\[DEPRECATED\] `calculate_notification_hmac` is deprecated\. Use calculate_webhook_hmac\(\) instead\.\n/).to_stderr
|
|
132
|
+
|
|
133
|
+
expect(result).to eq expected_sign
|
|
134
|
+
end
|
|
80
135
|
end
|
|
81
136
|
end
|
|
82
137
|
# rubocop:enable Metrics/BlockLength
|
|
@@ -18,11 +18,11 @@ module Adyen
|
|
|
18
18
|
# {{{summary}}}{{^summary}}{{operationId}}{{/summary}}{{#isDeprecated}}
|
|
19
19
|
#
|
|
20
20
|
# Deprecated {{#vendorExtensions.x-deprecatedInVersion}}since {{#appName}}{{{.}}}{{/appName}} v{{.}}{{/vendorExtensions.x-deprecatedInVersion}}{{#vendorExtensions.x-deprecatedMessage}}
|
|
21
|
-
# {{{.}}}{{/vendorExtensions.x-deprecatedMessage}}
|
|
21
|
+
# {{{.}}}{{/vendorExtensions.x-deprecatedMessage}}
|
|
22
|
+
# @deprecated{{/isDeprecated}}
|
|
22
23
|
def {{#lambda.snakecase}}{{#vendorExtensions.x-methodName}}{{.}}{{/vendorExtensions.x-methodName}}{{^vendorExtensions.x-methodName}}{{nickname}}{{/vendorExtensions.x-methodName}}{{/lambda.snakecase}}({{#bodyParams}}request, {{/bodyParams}}{{#requiredParams}}{{^isQueryParam}}{{#lambda.snakecase}}{{paramName}}{{/lambda.snakecase}}, {{/isQueryParam}}{{/requiredParams}}headers: {}{{#queryParams}}{{#-first}}, query_params: {}{{/-first}}{{/queryParams}})
|
|
23
|
-
|
|
24
|
-
endpoint =
|
|
25
|
-
endpoint = format(endpoint{{#pathParams}}{{#lambda.snakecase}}, {{paramName}}{{/lambda.snakecase}}{{/pathParams}})
|
|
24
|
+
{{#isDeprecated}}Adyen::Deprecation.warn(:{{#lambda.snakecase}}{{#vendorExtensions.x-methodName}}{{.}}{{/vendorExtensions.x-methodName}}{{^vendorExtensions.x-methodName}}{{nickname}}{{/vendorExtensions.x-methodName}}{{/lambda.snakecase}}{{#vendorExtensions.x-deprecatedInVersion}}, since: '{{#lambda.escapeSingleQuotedString}}{{#appName}}{{{.}}}{{/appName}} v{{.}}{{/lambda.escapeSingleQuotedString}}'{{/vendorExtensions.x-deprecatedInVersion}}{{#vendorExtensions.x-deprecatedMessage}}, message: '{{#lambda.escapeSingleQuotedString}}{{{.}}}{{/lambda.escapeSingleQuotedString}}'{{/vendorExtensions.x-deprecatedMessage}})
|
|
25
|
+
{{/isDeprecated}}endpoint = build_endpoint('{{#lambda.escapeSingleQuotedString}}{{{path}}}{{/lambda.escapeSingleQuotedString}}'{{#pathParams}}, {{#lambda.snakecase}}{{paramName}}{{/lambda.snakecase}}{{/pathParams}})
|
|
26
26
|
{{#queryParams}}{{#-first}}endpoint += create_query_string(query_params){{/-first}}{{/queryParams}}
|
|
27
27
|
action = { method: '{{#lambda.lowercase}}{{httpMethod}}{{/lambda.lowercase}}', url: endpoint }
|
|
28
28
|
{{#bodyParams}}
|