adyen-ruby-api-library 6.2.0 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -1
  3. data/.github/workflows/codeql.yml +41 -0
  4. data/.github/workflows/ruby.yml +1 -1
  5. data/.github/workflows/rubygems_release.yml +1 -1
  6. data/.gitignore +3 -0
  7. data/Makefile +72 -0
  8. data/README.md +20 -18
  9. data/lib/adyen/client.rb +82 -42
  10. data/lib/adyen/errors.rb +2 -2
  11. data/lib/adyen/services/balanceControlService.rb +28 -0
  12. data/lib/adyen/services/balancePlatform/account_holders_api.rb +63 -0
  13. data/lib/adyen/services/balancePlatform/balance_accounts_api.rb +123 -0
  14. data/lib/adyen/services/balancePlatform/bank_account_validation_api.rb +27 -0
  15. data/lib/adyen/services/balancePlatform/grant_accounts_api.rb +27 -0
  16. data/lib/adyen/services/balancePlatform/grant_offers_api.rb +39 -0
  17. data/lib/adyen/services/balancePlatform/payment_instrument_groups_api.rb +51 -0
  18. data/lib/adyen/services/balancePlatform/payment_instruments_api.rb +75 -0
  19. data/lib/adyen/services/balancePlatform/platform_api.rb +39 -0
  20. data/lib/adyen/services/balancePlatform/transaction_rules_api.rb +63 -0
  21. data/lib/adyen/services/balancePlatform.rb +61 -0
  22. data/lib/adyen/services/binLookup.rb +40 -0
  23. data/lib/adyen/services/checkout/classic_checkout_sdk_api.rb +39 -0
  24. data/lib/adyen/services/checkout/modifications_api.rb +87 -0
  25. data/lib/adyen/services/checkout/orders_api.rb +51 -0
  26. data/lib/adyen/services/checkout/payment_links_api.rb +51 -0
  27. data/lib/adyen/services/checkout/payments_api.rb +87 -0
  28. data/lib/adyen/services/checkout/recurring_api.rb +39 -0
  29. data/lib/adyen/services/checkout/utility_api.rb +39 -0
  30. data/lib/adyen/services/checkout.rb +39 -180
  31. data/lib/adyen/services/dataProtection.rb +28 -0
  32. data/lib/adyen/services/legalEntityManagement/business_lines_api.rb +63 -0
  33. data/lib/adyen/services/legalEntityManagement/documents_api.rb +63 -0
  34. data/lib/adyen/services/legalEntityManagement/hosted_onboarding_api.rb +51 -0
  35. data/lib/adyen/services/legalEntityManagement/legal_entities_api.rb +75 -0
  36. data/lib/adyen/services/legalEntityManagement/pci_questionnaires_api.rb +63 -0
  37. data/lib/adyen/services/legalEntityManagement/terms_of_service_api.rb +51 -0
  38. data/lib/adyen/services/legalEntityManagement/transfer_instruments_api.rb +63 -0
  39. data/lib/adyen/services/legalEntityManagement.rb +51 -0
  40. data/lib/adyen/services/management/account_company_level_api.rb +51 -0
  41. data/lib/adyen/services/management/account_merchant_level_api.rb +63 -0
  42. data/lib/adyen/services/management/account_store_level_api.rb +111 -0
  43. data/lib/adyen/services/management/allowed_origins_company_level_api.rb +63 -0
  44. data/lib/adyen/services/management/allowed_origins_merchant_level_api.rb +63 -0
  45. data/lib/adyen/services/management/api_credentials_company_level_api.rb +63 -0
  46. data/lib/adyen/services/management/api_credentials_merchant_level_api.rb +63 -0
  47. data/lib/adyen/services/management/api_key_company_level_api.rb +27 -0
  48. data/lib/adyen/services/management/api_key_merchant_level_api.rb +27 -0
  49. data/lib/adyen/services/management/client_key_company_level_api.rb +27 -0
  50. data/lib/adyen/services/management/client_key_merchant_level_api.rb +27 -0
  51. data/lib/adyen/services/management/my_api_credential_api.rb +75 -0
  52. data/lib/adyen/services/management/payment_methods_merchant_level_api.rb +87 -0
  53. data/lib/adyen/services/management/payout_settings_merchant_level_api.rb +75 -0
  54. data/lib/adyen/services/management/terminal_actions_company_level_api.rb +63 -0
  55. data/lib/adyen/services/management/terminal_actions_terminal_level_api.rb +27 -0
  56. data/lib/adyen/services/management/terminal_orders_company_level_api.rb +135 -0
  57. data/lib/adyen/services/management/terminal_orders_merchant_level_api.rb +135 -0
  58. data/lib/adyen/services/management/terminal_settings_company_level_api.rb +63 -0
  59. data/lib/adyen/services/management/terminal_settings_merchant_level_api.rb +63 -0
  60. data/lib/adyen/services/management/terminal_settings_store_level_api.rb +111 -0
  61. data/lib/adyen/services/management/terminal_settings_terminal_level_api.rb +63 -0
  62. data/lib/adyen/services/management/terminals_terminal_level_api.rb +27 -0
  63. data/lib/adyen/services/management/users_company_level_api.rb +63 -0
  64. data/lib/adyen/services/management/users_merchant_level_api.rb +63 -0
  65. data/lib/adyen/services/management/webhooks_company_level_api.rb +99 -0
  66. data/lib/adyen/services/management/webhooks_merchant_level_api.rb +99 -0
  67. data/lib/adyen/services/management.rb +151 -0
  68. data/lib/adyen/services/payment.rb +172 -0
  69. data/lib/adyen/services/payout/initialization_api.rb +51 -0
  70. data/lib/adyen/services/payout/instant_payouts_api.rb +27 -0
  71. data/lib/adyen/services/payout/reviewing_api.rb +39 -0
  72. data/lib/adyen/services/payout.rb +31 -0
  73. data/lib/adyen/services/posTerminalManagement.rb +76 -0
  74. data/lib/adyen/services/recurring.rb +81 -13
  75. data/lib/adyen/services/service.rb +6 -1
  76. data/lib/adyen/services/storedValue.rb +88 -0
  77. data/lib/adyen/services/transfers/transactions_api.rb +39 -0
  78. data/lib/adyen/services/transfers/transfers_api.rb +27 -0
  79. data/lib/adyen/services/transfers.rb +26 -0
  80. data/lib/adyen/utils/hmac_validator.rb +2 -3
  81. data/lib/adyen/version.rb +2 -2
  82. data/lib/adyen-ruby-api-library.rb +11 -5
  83. data/spec/account_spec.rb +1 -1
  84. data/spec/balance_control_spec.rb +44 -0
  85. data/spec/balance_platform_spec.rb +123 -0
  86. data/spec/bin_lookup_spec.rb +68 -10
  87. data/spec/checkout_spec.rb +85 -62
  88. data/spec/client_spec.rb +89 -10
  89. data/spec/errors_spec.rb +1 -1
  90. data/spec/fund_spec.rb +1 -1
  91. data/spec/hop_spec.rb +1 -1
  92. data/spec/lem_spec.rb +68 -0
  93. data/spec/management_spec.rb +68 -0
  94. data/spec/mocks/requests/BalanceControl/balance_transfer.json +10 -0
  95. data/spec/mocks/requests/BalancePlatform/create_account_holder.json +5 -0
  96. data/spec/mocks/requests/BalancePlatform/update_account_holder.json +10 -0
  97. data/spec/mocks/requests/LegalEntityManagement/create_business_line.json +15 -0
  98. data/spec/mocks/requests/Management/create_store.json +15 -0
  99. data/spec/mocks/requests/Recurring/create_permit.json +6 -0
  100. data/spec/mocks/requests/StoredValue/issue_giftcard.json +12 -0
  101. data/spec/mocks/requests/Transfers/get_transactions.json +82 -0
  102. data/spec/mocks/requests/Transfers/make_transfer.json +32 -0
  103. data/spec/mocks/responses/BalanceControl/balance_transfer.json +14 -0
  104. data/spec/mocks/responses/BalancePlatform/create_account_holder.json +41 -0
  105. data/spec/mocks/responses/BalancePlatform/get_balance_account.json +15 -0
  106. data/spec/mocks/responses/BalancePlatform/update_account_holder.json +16 -0
  107. data/spec/mocks/responses/Checkout/stored_payment_methods.json +1 -0
  108. data/spec/mocks/responses/LegalEntityManagement/create_business_line.json +17 -0
  109. data/spec/mocks/responses/Management/create_store.json +23 -0
  110. data/spec/mocks/responses/Management/get_companies.json +42 -0
  111. data/spec/mocks/responses/Recurring/create_permit.json +4 -0
  112. data/spec/mocks/responses/StoredValue/issue_giftcard.json +13 -0
  113. data/spec/mocks/responses/Transfers/get_transactions.json +82 -0
  114. data/spec/mocks/responses/Transfers/make_transfer.json +36 -0
  115. data/spec/mocks/responses/Webhooks/backslash_notification.json +41 -0
  116. data/spec/mocks/responses/Webhooks/colon_notification.json +41 -0
  117. data/spec/mocks/responses/Webhooks/forwardslash_notification.json +41 -0
  118. data/spec/mocks/responses/Webhooks/mixed_notification.json +41 -0
  119. data/spec/notification_spec.rb +1 -1
  120. data/spec/payments_spec.rb +41 -23
  121. data/spec/payouts_spec.rb +43 -16
  122. data/spec/pos_terminal_management_spec.rb +46 -0
  123. data/spec/recurring_spec.rb +2 -2
  124. data/spec/spec_helper.rb +0 -10
  125. data/spec/stored_value_spec.rb +43 -0
  126. data/spec/transfers_spec.rb +63 -0
  127. data/spec/utils/hmac_validator_spec.rb +20 -6
  128. data/templates/api-single.mustache +29 -0
  129. data/templates/api-small.mustache +37 -0
  130. data/templates/api.mustache +36 -0
  131. data/templates/config.yaml +10 -0
  132. metadata +107 -11
  133. data/lib/adyen/services/bin_lookup.rb +0 -18
  134. data/lib/adyen/services/data_protection.rb +0 -17
  135. data/lib/adyen/services/payments.rb +0 -34
  136. data/lib/adyen/services/payouts.rb +0 -22
  137. data/lib/adyen/services/postfmapi.rb +0 -19
  138. data/spec/mocks/requests/Recurring/store_token.json +0 -15
  139. data/spec/mocks/responses/Recurring/store_token.json +0 -7
  140. data/spec/postfmapi_spec.rb +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1b091a2aaf201f3a22b41a22c069321d1d181daee6e33da275d94ab970b9b9ab
4
- data.tar.gz: 1806d42c9f609c9ff3b6e84e31ff1be9f4d4503d15f5a0c300a664a779a5c295
3
+ metadata.gz: 8a353164deda5fc44de3ec027f4022732e9c4afdb1a5bfacf91704e9d8c9e90a
4
+ data.tar.gz: 1f1f2d92d0f9528a9c6945da699a3a9d8a05e0594c7fe4d2fb66ad8c85c01c77
5
5
  SHA512:
6
- metadata.gz: f9c9221b5d0c164cd4a90c5d7e6531e6361c116e00139662fcff37588309c07c21740d8a3c277ec4b7febbad4d5af752a772eab0df5625430f66b3b47fcbfc92
7
- data.tar.gz: 4b89bec481b6b2e900325a9f9bc11a69e87b42d61a1358205e53d3a17f90c722377e4fdf7accafc11124ac2e4d70d88b36cdd214cb5f9b7d576e216d9ca6b31b
6
+ metadata.gz: a8d4190c1cbb857fa27ca0134a34b559c4e30c46d9397bce514b5894820c6fc0a33e4af10076953a27bfe5c36e3ab06558a55264c34a1ae3acfc26c818786979
7
+ data.tar.gz: be1328cdf8c4592cf0c3dc6573c1a248b761efc30f01e4eb997744234295c397c35b3b2755ab07593f6d5f1e776287daedf8f98493f462492e1f2284bcfda346
data/.github/CODEOWNERS CHANGED
@@ -1 +1 @@
1
- * @crrood @wboereboom @AlexandrosMor @michaelpaul
1
+ * @Adyen/api-libraries-reviewers
@@ -0,0 +1,41 @@
1
+ name: "CodeQL"
2
+
3
+ on:
4
+ push:
5
+ branches: [ "develop", "main" ]
6
+ pull_request:
7
+ branches: [ "develop" ]
8
+ schedule:
9
+ - cron: "40 12 * * 0"
10
+
11
+ jobs:
12
+ analyze:
13
+ name: Analyze
14
+ runs-on: ubuntu-latest
15
+ permissions:
16
+ actions: read
17
+ contents: read
18
+ security-events: write
19
+
20
+ strategy:
21
+ fail-fast: false
22
+ matrix:
23
+ language: [ javascript ]
24
+
25
+ steps:
26
+ - name: Checkout
27
+ uses: actions/checkout@v3
28
+
29
+ - name: Initialize CodeQL
30
+ uses: github/codeql-action/init@v2
31
+ with:
32
+ languages: ${{ matrix.language }}
33
+ queries: +security-and-quality
34
+
35
+ - name: Autobuild
36
+ uses: github/codeql-action/autobuild@v2
37
+
38
+ - name: Perform CodeQL Analysis
39
+ uses: github/codeql-action/analyze@v2
40
+ with:
41
+ category: "/language:${{ matrix.language }}"
@@ -12,7 +12,7 @@ jobs:
12
12
  ruby: [2.5, 2.6, 2.7, '3.0', head]
13
13
  runs-on: ${{ matrix.os }}
14
14
  steps:
15
- - uses: actions/checkout@v2
15
+ - uses: actions/checkout@v3
16
16
  - uses: ruby/setup-ruby@v1
17
17
  with:
18
18
  ruby-version: ${{ matrix.ruby }}
@@ -9,7 +9,7 @@ jobs:
9
9
  runs-on: ubuntu-latest
10
10
 
11
11
  steps:
12
- - uses: actions/checkout@v1
12
+ - uses: actions/checkout@v3
13
13
 
14
14
  - name: Release Gem on RubyGems
15
15
  if: contains(github.ref, 'refs/tags/v')
data/.gitignore CHANGED
@@ -15,3 +15,6 @@ design.txt
15
15
  .DS_Store
16
16
 
17
17
  .idea
18
+ main.rb
19
+ build/
20
+ openapi-generator-cli-6.0.1.jar
data/Makefile ADDED
@@ -0,0 +1,72 @@
1
+ generator:=ruby
2
+ openapi-generator-version:=6.4.0
3
+ openapi-generator-url:=https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/$(openapi-generator-version)/openapi-generator-cli-$(openapi-generator-version).jar
4
+ openapi-generator-jar:=build/openapi-generator-cli.jar
5
+ openapi-generator-cli:=java -jar build/openapi-generator-cli.jar
6
+ output:=build/out
7
+
8
+ services:=balancePlatform checkout legalEntityManagement management payout platformsAccount platformsFund platformsHostedOnboardingPage platformsNotificationConfiguration transfers
9
+ singleFileServices:=balanceControlService binLookup dataProtection recurring storedValue posTerminalManagement payment
10
+
11
+ binLookup: spec=BinLookupService-v54
12
+ checkout: spec=CheckoutService-v70
13
+ dataProtection: spec=DataProtectionService-v1
14
+ storedValue: spec=StoredValueService-v46
15
+ posTerminalManagement: spec=TfmAPIService-v1
16
+ payment: spec=PaymentService-v68
17
+ recurring: spec=RecurringService-v68
18
+ payout: spec=PayoutService-v68
19
+ management: spec=ManagementService-v1
20
+ legalEntityManagement: spec=LegalEntityService-v3
21
+ balancePlatform: spec=BalancePlatformService-v2
22
+ platformsAccount: spec=AccountService-v6
23
+ platformsFund: spec=FundService-v6
24
+ platformsNotificationConfiguration: spec=NotificationConfigurationService-v6
25
+ platformsHostedOnboardingPage: spec=HopService-v6
26
+ transfers: spec=TransferService-v3
27
+ balanceControlService: spec=BalanceControlService-v1
28
+
29
+ allServices: $(services) $(singleFileServices)
30
+
31
+ $(services): build/spec $(openapi-generator-jar)
32
+ wget $(openapi-generator-url) -O build/openapi-generator-cli.jar
33
+ rm -rf $(output)
34
+ $(openapi-generator-cli) generate \
35
+ -i build/spec/json/$(spec).json \
36
+ -g $(generator) \
37
+ -c ./templates/config.yaml \
38
+ -o $(output) \
39
+ --global-property apis,apiTests=false,apiDocs=false,supportingFiles=api-single.rb\
40
+ --additional-properties serviceName=$@\
41
+ --skip-validate-spec
42
+ rm -f $(output)/lib/openapi_client/api/*-small.rb
43
+ mkdir -p lib/adyen/services/$@
44
+ mv $(output)/lib/openapi_client/api/*.rb lib/adyen/services/$@
45
+ mv $(output)/api/api-single.rb lib/adyen/services/$@.rb
46
+ rm -rf $(output)
47
+
48
+ $(singleFileServices): build/spec
49
+ wget $(openapi-generator-url) -O build/openapi-generator-cli.jar
50
+ cat <<< "$$(jq 'del(.paths[][].tags)' build/spec/json/$(spec).json)" > build/spec/json/$(spec).json
51
+ rm -rf $(output)
52
+ $(openapi-generator-cli) generate \
53
+ -i build/spec/json/$(spec).json \
54
+ -g $(generator) \
55
+ -c ./templates/config.yaml \
56
+ -o $(output) \
57
+ --global-property apis,apiTests=false,apiDocs=false\
58
+ --additional-properties serviceName=$@\
59
+ --skip-validate-spec
60
+ mv $(output)/lib/openapi_client/api/default_api-small.rb lib/adyen/services/$@.rb
61
+ rm -rf $(output)
62
+
63
+ templates: $(openapi-generator-jar)
64
+ $(openapi-generator-cli) author template -g $(generator) -o build/templates
65
+
66
+ # Download the generator
67
+ $(openapi-generator-jar):
68
+ wget --quiet -o /dev/null $(openapi-generator-url) -O $(openapi-generator-jar)
69
+
70
+ build/spec:
71
+ git clone https://github.com/Adyen/adyen-openapi.git build/spec
72
+ perl -i -pe's/"openapi" : "3.[0-9].[0-9]"/"openapi" : "3.0.0"/' build/spec/json/*.json
data/README.md CHANGED
@@ -1,24 +1,26 @@
1
+ ![Ruby](https://user-images.githubusercontent.com/93914435/236416787-3da4dd32-0a7d-43f7-9aa4-8d77697c85f9.png)
1
2
  # Adyen API Library for Ruby
2
3
 
3
-
4
4
  This is the officially supported Ruby library for using Adyen's APIs.
5
5
 
6
- ## Integration
7
- The library supports all APIs under the following services:
8
-
9
- * [Checkout API](https://docs.adyen.com/api-explorer/#/CheckoutService/v68/overview): Our latest integration for accepting online payments. Current supported version: **v68**
10
- * [Payments API](https://docs.adyen.com/api-explorer/#/Payment/v64/overview): Our classic integration for online payments. Current supported version: **v64**
11
- * [Recurring API](https://docs.adyen.com/api-explorer/#/Recurring/v49/overview): Endpoints for managing saved payment details. Current supported version: **v49**
12
- * [Payouts API](https://docs.adyen.com/api-explorer/#/Payout/v64/overview): Endpoints for sending funds to your customers. Current supported version: **v64**
13
- * [Platforms APIs](https://docs.adyen.com/platforms/api): Set of APIs when using Adyen for Platforms.
14
- * [Account API](https://docs.adyen.com/api-explorer/#/Account/v6/overview) Current supported version: **v6**
15
- * [Fund API](https://docs.adyen.com/api-explorer/#/Fund/v6/overview) Current supported version: **v6**
16
- * [Notification Configuration API](https://docs.adyen.com/api-explorer/#/NotificationConfigurationService/v6/overview) Current supported version: **v6**
17
- * [POS Terminal Management API](https://docs.adyen.com/api-explorer/#/postfmapi/v1/overview): Current supported version: **v1**
18
- * [Adyen BinLookup API](https://docs.adyen.com/api-explorer/#/BinLookup/v50/overview): Current supported version: **v50**
19
- * [Data Protection API](https://docs.adyen.com/development-resources/data-protection-api): Current supported version: **v1**
20
- * [Disputes API](https://docs.adyen.com/risk-management/disputes-api): Current supported version: **v50**
21
-
6
+ ## Supported APIs
7
+
8
+ This library supports the following:
9
+
10
+ | API name | API version | Description | API object |
11
+ |----------|:-----------:|-------------|------------|
12
+ | [BIN lookup API](https://docs.adyen.com/api-explorer/#/BinLookup/v52/overview) | v54 | The BIN Lookup API provides endpoints for retrieving information based on a given BIN. | [BinLookup](lib/adyen/services/binLookup.rb) |
13
+ | [Checkout API](https://docs.adyen.com/api-explorer/#/CheckoutService/v69/overview) | v70 | Our latest integration for accepting online payments. | [CheckoutAPI](lib/adyen/services/checkout.rb) |
14
+ | [Configuration API](https://docs.adyen.com/api-explorer/#/balanceplatform/v2/overview) | v2 | The Configuration API enables you to create a platform where you can onboard your users as account holders and create balance accounts, cards, and business accounts. | [BalancePlatform](lib/adyen/services/balancePlatform.rb) |
15
+ | [DataProtection API](https://docs.adyen.com/development-resources/data-protection-api) | v1 | Adyen Data Protection API provides a way for you to process [Subject Erasure Requests](https://gdpr-info.eu/art-17-gdpr/) as mandated in GDPR. Use our API to submit a request to delete shopper's data, including payment details and other related information (for example, delivery address or shopper email) | [DataProtection](lib/adyen/services/dataProtection.rb) |
16
+ | [Legal Entity Management API](https://docs.adyen.com/api-explorer/#/legalentity/v3/overview) | v3 | Manage legal entities that contain information required for verification. | [LegalEntityManagement](lib/adyen/services/legalEntityManagement.rb) |
17
+ | [Management API](https://docs.adyen.com/api-explorer/#/ManagementService/v1/overview) | v1 | Configure and manage your Adyen company and merchant accounts, stores, and payment terminals. | [Management](lib/adyen/services/management.rb) |
18
+ | [Payments API](https://docs.adyen.com/api-explorer/#/Payment/v68/overview) | v68 | Our classic integration for online payments. | [Classic Integration API](lib/adyen/services/payment.rb) |
19
+ | [Payouts API](https://docs.adyen.com/api-explorer/#/Payout/v68/overview) | v68 | Endpoints for sending funds to your customers. | [Payout](lib/adyen/services/payout.rb) |
20
+ | [POS Terminal Management API](https://docs.adyen.com/api-explorer/#/postfmapi/v1/overview) | v1 | Endpoints for managing your point-of-sale payment terminals. | [TerminalManagement](lib/adyen/services/posTerminalManagement.rb) |
21
+ | [Recurring API](https://docs.adyen.com/api-explorer/#/Recurring/v68/overview) | v68 | Endpoints for managing saved payment details. | [Recurring](lib/adyen/services/recurring.rb) |
22
+ | [Stored Value API](https://docs.adyen.com/payment-methods/gift-cards/stored-value-api) | v46 | Manage both online and point-of-sale gift cards and other stored-value cards. | [StoredValue](lib/adyen/services/storedValue.rb) |
23
+ | [Transfers API](https://docs.adyen.com/api-explorer/transfers/3/overview) | v3 | The Transfers API provides endpoints that can be used to get information about all your transactions, move funds within your balance platform or send funds from your balance platform to a transfer instrument. | [Transfers](lib/adyen/services/transfers.rb) |
22
24
 
23
25
  For more information, refer to our [documentation](https://docs.adyen.com/) or the [API Explorer](https://docs.adyen.com/api-explorer/).
24
26
 
@@ -64,7 +66,7 @@ adyen.api_key = 'AF5XXXXXXXXXXXXXXXXXXXX'
64
66
 
65
67
  - Make a Payment
66
68
  ~~~~ruby
67
- response = adyen.checkout.payments({
69
+ response = adyen.checkout.payments_api.payments({
68
70
  :amount => {
69
71
  :currency => "EUR",
70
72
  :value => 1000
data/lib/adyen/client.rb CHANGED
@@ -35,30 +35,43 @@ module Adyen
35
35
 
36
36
  # base URL for API given service and @env
37
37
  def service_url_base(service)
38
- raise ArgumentError, "Please set Client.live_url_prefix to the portion of your merchant-specific URL prior to '-[service]-live.adyenpayments.com'" if @live_url_prefix.nil? and @env == :live
39
38
  if @env == :mock
40
39
  @mock_service_url_base
41
40
  else
42
41
  case service
43
42
  when "Checkout"
44
- url = "https://checkout-#{@env}.adyen.com/checkout"
43
+ url = "https://checkout-#{@env}.adyen.com"
45
44
  supports_live_url_prefix = true
46
45
  when "Account", "Fund", "Notification", "Hop"
47
- url = "https://cal-#{@env}.adyen.com/cal/services"
46
+ url = "https://cal-#{@env}.adyen.com/cal/services/#{service}"
48
47
  supports_live_url_prefix = false
49
- when "Recurring", "Payment", "Payout", "BinLookup"
50
- url = "https://pal-#{@env}.adyen.com/pal/servlet"
48
+ when "Recurring", "Payment", "Payout", "BinLookup", "StoredValue", "BalanceControlService"
49
+ url = "https://pal-#{@env}.adyen.com/pal/servlet/#{service}"
51
50
  supports_live_url_prefix = true
52
- when "Terminal"
51
+ when "PosTerminalManagement"
53
52
  url = "https://postfmapi-#{@env}.adyen.com/postfmapi/terminal"
54
53
  supports_live_url_prefix = false
55
54
  when "DataProtectionService", "DisputeService"
56
- url = "https://ca-#{@env}.adyen.com/ca/services"
55
+ url = "https://ca-#{@env}.adyen.com/ca/services/#{service}"
56
+ supports_live_url_prefix = false
57
+ when "LegalEntityManagement"
58
+ url = "https://kyc-#{@env}.adyen.com/lem"
59
+ supports_live_url_prefix = false
60
+ when "BalancePlatform"
61
+ url = "https://balanceplatform-api-#{@env}.adyen.com/bcl"
62
+ supports_live_url_prefix = false
63
+ when "Transfers"
64
+ url = "https://balanceplatform-api-#{@env}.adyen.com/btl"
65
+ supports_live_url_prefix = false
66
+ when "Management"
67
+ url = "https://management-#{@env}.adyen.com"
57
68
  supports_live_url_prefix = false
58
69
  else
59
70
  raise ArgumentError, "Invalid service specified"
60
71
  end
61
-
72
+
73
+ raise ArgumentError, "Please set Client.live_url_prefix to the portion of your merchant-specific URL prior to '-[service]-live.adyenpayments.com'" \
74
+ if @live_url_prefix.nil? and @env == :live and supports_live_url_prefix
62
75
  if @env == :live && supports_live_url_prefix
63
76
  url.insert(8, "#{@live_url_prefix}-")
64
77
  url["adyen.com"] = "adyenpayments.com"
@@ -70,11 +83,7 @@ module Adyen
70
83
 
71
84
  # construct full URL from service and endpoint
72
85
  def service_url(service, action, version)
73
- if service == "Checkout" || service == "Terminal"
74
- "#{service_url_base(service)}/v#{version}/#{action}"
75
- else
76
- "#{service_url_base(service)}/#{service}/v#{version}/#{action}"
77
- end
86
+ "#{service_url_base(service)}/v#{version}/#{action}"
78
87
  end
79
88
 
80
89
  # send request to adyen API
@@ -121,6 +130,10 @@ module Adyen
121
130
  headers.map do |key, value|
122
131
  faraday.headers[key] = value
123
132
  end
133
+
134
+ # add library headers
135
+ faraday.headers["adyen-library-name"] = Adyen::NAME
136
+ faraday.headers["adyen-library-version"] = Adyen::VERSION
124
137
  end
125
138
  # if json string convert to hash
126
139
  # needed to add applicationInfo
@@ -128,10 +141,6 @@ module Adyen
128
141
  request_data = JSON.parse(request_data)
129
142
  end
130
143
 
131
- # add application only on checkout service
132
- if with_application_info
133
- add_application_info(request_data)
134
- end
135
144
 
136
145
  # convert to json
137
146
  request_data = request_data.to_json
@@ -144,6 +153,13 @@ module Adyen
144
153
  raise connection_error, "Connection to #{url} failed"
145
154
  end
146
155
  end
156
+ if action.fetch(:method) == "delete"
157
+ begin
158
+ response = conn.delete
159
+ rescue Faraday::ConnectionFailed => connection_error
160
+ raise connection_error, "Connection to #{url} failed"
161
+ end
162
+ end
147
163
  if action.fetch(:method) == "patch"
148
164
  begin
149
165
  response = conn.patch do |req|
@@ -153,7 +169,7 @@ module Adyen
153
169
  raise connection_error, "Connection to #{url} failed"
154
170
  end
155
171
  end
156
- else
172
+ if action.fetch(:method) == 'post'
157
173
  # post request to Adyen
158
174
  begin
159
175
  response = conn.post do |req|
@@ -162,46 +178,46 @@ module Adyen
162
178
  rescue Faraday::ConnectionFailed => connection_error
163
179
  raise connection_error, "Connection to #{url} failed"
164
180
  end
181
+ end
182
+ else
183
+ begin
184
+ response = conn.post do |req|
185
+ req.body = request_data
186
+ end # handle client errors
187
+ rescue Faraday::ConnectionFailed => connection_error
188
+ raise connection_error, "Connection to #{url} failed"
189
+ end
165
190
  end
166
-
167
191
  # check for API errors
168
192
  case response.status
169
193
  when 401
170
194
  raise Adyen::AuthenticationError.new("Invalid API authentication; https://docs.adyen.com/user-management/how-to-get-the-api-key", request_data)
171
195
  when 403
172
- raise Adyen::PermissionError.new("Missing user permissions; https://docs.adyen.com/user-management/user-roles", request_data)
196
+ raise Adyen::PermissionError.new("Missing user permissions; https://docs.adyen.com/user-management/user-roles", request_data, response.body)
173
197
  end
174
-
175
- formatted_response = AdyenResult.new(response.body, response.headers, response.status)
176
-
198
+
199
+ # delete has no response.body (unless it throws an error)
200
+ if response.body == nil
201
+ formatted_response = AdyenResult.new("{}", response.headers, response.status)
202
+ else
203
+ formatted_response = AdyenResult.new(response.body, response.headers, response.status)
204
+ end
205
+
177
206
  formatted_response
178
207
  end
179
208
 
180
- # add application_info for analytics
181
- def add_application_info(request_data)
182
- adyenLibrary = {
183
- :name => Adyen::NAME,
184
- :version => Adyen::VERSION.to_s,
185
- }
186
-
187
- if request_data[:applicationInfo].nil?
188
- request_data[:applicationInfo] = {}
189
- end
190
-
191
- request_data[:applicationInfo][:adyenLibrary] = adyenLibrary
192
- end
193
209
 
194
210
  # services
195
211
  def checkout
196
212
  @checkout ||= Adyen::Checkout.new(self)
197
213
  end
198
214
 
199
- def payments
200
- @payments ||= Adyen::Payments.new(self)
215
+ def payment
216
+ @payment ||= Adyen::Payment.new(self)
201
217
  end
202
218
 
203
- def payouts
204
- @payouts ||= Adyen::Payouts.new(self)
219
+ def payout
220
+ @payout ||= Adyen::Payout.new(self)
205
221
  end
206
222
 
207
223
  def recurring
@@ -212,8 +228,8 @@ module Adyen
212
228
  @marketpay ||= Adyen::Marketpay::Marketpay.new(self)
213
229
  end
214
230
 
215
- def postfmapi
216
- @postfmapi ||= Adyen::PosTerminalManagement.new(self)
231
+ def pos_terminal_management
232
+ @pos_terminal_management ||= Adyen::PosTerminalManagement.new(self)
217
233
  end
218
234
 
219
235
  def data_protection
@@ -227,5 +243,29 @@ module Adyen
227
243
  def bin_lookup
228
244
  @bin_lookup ||= Adyen::BinLookup.new(self)
229
245
  end
246
+
247
+ def legal_entity_management
248
+ @legal_entity_management ||= Adyen::LegalEntityManagement.new(self)
249
+ end
250
+
251
+ def balance_platform
252
+ @balance_platform ||= Adyen::BalancePlatform.new(self)
253
+ end
254
+
255
+ def transfers
256
+ @transfers ||= Adyen::Transfers.new(self)
257
+ end
258
+
259
+ def management
260
+ @management ||= Adyen::Management.new(self)
261
+ end
262
+
263
+ def stored_value
264
+ @stored_value ||=Adyen::StoredValue.new(self)
265
+ end
266
+
267
+ def balance_control_service
268
+ @balance_control_service ||=Adyen::BalanceControlService.new(self)
269
+ end
230
270
  end
231
271
  end
data/lib/adyen/errors.rb CHANGED
@@ -70,8 +70,8 @@ module Adyen
70
70
  end
71
71
 
72
72
  class PermissionError < AdyenError
73
- def initialize(msg, request)
74
- super(request, nil, msg, 403)
73
+ def initialize(msg, request, response)
74
+ super(request, response, msg, 403)
75
75
  end
76
76
  end
77
77
 
@@ -0,0 +1,28 @@
1
+ require_relative './service'
2
+ module Adyen
3
+
4
+
5
+ class BalanceControlService < Service
6
+ attr_accessor :service, :version
7
+ DEFAULT_VERSION = 1
8
+
9
+ def initialize(client, version = DEFAULT_VERSION)
10
+ @service = "BalanceControlService"
11
+ @client = client
12
+ @version = version
13
+ end
14
+
15
+ def balance_transfer(request, headers: {} )
16
+ """
17
+ Start a balance transfer
18
+ """
19
+ endpoint = "/balanceTransfer".gsub(/{.+?}/, '%s')
20
+ endpoint = endpoint.gsub(/^\//, "")
21
+ endpoint = endpoint % []
22
+
23
+ action = { method: "post", url: endpoint}
24
+ @client.call_adyen_api(@service, action, request, headers, @version)
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,63 @@
1
+ require_relative '../service'
2
+ module Adyen
3
+
4
+
5
+ class AccountHoldersApi < Service
6
+ attr_accessor :service, :version
7
+
8
+ def initialize(client, version = DEFAULT_VERSION)
9
+ @service = "BalancePlatform"
10
+ @client = client
11
+ @version = version
12
+ end
13
+
14
+ def get_account_holder(id, headers: {} )
15
+ """
16
+ Get an account holder
17
+ """
18
+ endpoint = "/accountHolders/{id}".gsub(/{.+?}/, '%s')
19
+ endpoint = endpoint.gsub(/^\//, "")
20
+ endpoint = endpoint % [id]
21
+
22
+ action = { method: "get", url: endpoint}
23
+ @client.call_adyen_api(@service, action, {}, headers, @version)
24
+ end
25
+
26
+ def get_all_balance_accounts_of_account_holder(id, headers: {} , queryParams: {})
27
+ """
28
+ Get all balance accounts of an account holder
29
+ """
30
+ endpoint = "/accountHolders/{id}/balanceAccounts".gsub(/{.+?}/, '%s')
31
+ endpoint = endpoint.gsub(/^\//, "")
32
+ endpoint = endpoint % [id]
33
+ endpoint = endpoint + create_query_string(queryParams)
34
+ action = { method: "get", url: endpoint}
35
+ @client.call_adyen_api(@service, action, {}, headers, @version)
36
+ end
37
+
38
+ def update_account_holder(request, id, headers: {} )
39
+ """
40
+ Update an account holder
41
+ """
42
+ endpoint = "/accountHolders/{id}".gsub(/{.+?}/, '%s')
43
+ endpoint = endpoint.gsub(/^\//, "")
44
+ endpoint = endpoint % [id]
45
+
46
+ action = { method: "patch", url: endpoint}
47
+ @client.call_adyen_api(@service, action, request, headers, @version)
48
+ end
49
+
50
+ def create_account_holder(request, headers: {} )
51
+ """
52
+ Create an account holder
53
+ """
54
+ endpoint = "/accountHolders".gsub(/{.+?}/, '%s')
55
+ endpoint = endpoint.gsub(/^\//, "")
56
+ endpoint = endpoint % []
57
+
58
+ action = { method: "post", url: endpoint}
59
+ @client.call_adyen_api(@service, action, request, headers, @version)
60
+ end
61
+
62
+ end
63
+ end
@@ -0,0 +1,123 @@
1
+ require_relative '../service'
2
+ module Adyen
3
+
4
+
5
+ class BalanceAccountsApi < Service
6
+ attr_accessor :service, :version
7
+
8
+ def initialize(client, version = DEFAULT_VERSION)
9
+ @service = "BalancePlatform"
10
+ @client = client
11
+ @version = version
12
+ end
13
+
14
+ def delete_sweep(balanceAccountId, sweepId, headers: {} )
15
+ """
16
+ Delete a sweep
17
+ """
18
+ endpoint = "/balanceAccounts/{balanceAccountId}/sweeps/{sweepId}".gsub(/{.+?}/, '%s')
19
+ endpoint = endpoint.gsub(/^\//, "")
20
+ endpoint = endpoint % [balanceAccountId,sweepId]
21
+
22
+ action = { method: "delete", url: endpoint}
23
+ @client.call_adyen_api(@service, action, {}, headers, @version)
24
+ end
25
+
26
+ def get_all_sweeps_for_balance_account(balanceAccountId, headers: {} , queryParams: {})
27
+ """
28
+ Get all sweeps for a balance account
29
+ """
30
+ endpoint = "/balanceAccounts/{balanceAccountId}/sweeps".gsub(/{.+?}/, '%s')
31
+ endpoint = endpoint.gsub(/^\//, "")
32
+ endpoint = endpoint % [balanceAccountId]
33
+ endpoint = endpoint + create_query_string(queryParams)
34
+ action = { method: "get", url: endpoint}
35
+ @client.call_adyen_api(@service, action, {}, headers, @version)
36
+ end
37
+
38
+ def get_sweep(balanceAccountId, sweepId, headers: {} )
39
+ """
40
+ Get a sweep
41
+ """
42
+ endpoint = "/balanceAccounts/{balanceAccountId}/sweeps/{sweepId}".gsub(/{.+?}/, '%s')
43
+ endpoint = endpoint.gsub(/^\//, "")
44
+ endpoint = endpoint % [balanceAccountId,sweepId]
45
+
46
+ action = { method: "get", url: endpoint}
47
+ @client.call_adyen_api(@service, action, {}, headers, @version)
48
+ end
49
+
50
+ def get_balance_account(id, headers: {} )
51
+ """
52
+ Get a balance account
53
+ """
54
+ endpoint = "/balanceAccounts/{id}".gsub(/{.+?}/, '%s')
55
+ endpoint = endpoint.gsub(/^\//, "")
56
+ endpoint = endpoint % [id]
57
+
58
+ action = { method: "get", url: endpoint}
59
+ @client.call_adyen_api(@service, action, {}, headers, @version)
60
+ end
61
+
62
+ def get_all_payment_instruments_for_balance_account(id, headers: {} , queryParams: {})
63
+ """
64
+ Get all payment instruments for a balance account
65
+ """
66
+ endpoint = "/balanceAccounts/{id}/paymentInstruments".gsub(/{.+?}/, '%s')
67
+ endpoint = endpoint.gsub(/^\//, "")
68
+ endpoint = endpoint % [id]
69
+ endpoint = endpoint + create_query_string(queryParams)
70
+ action = { method: "get", url: endpoint}
71
+ @client.call_adyen_api(@service, action, {}, headers, @version)
72
+ end
73
+
74
+ def update_sweep(request, balanceAccountId, sweepId, headers: {} )
75
+ """
76
+ Update a sweep
77
+ """
78
+ endpoint = "/balanceAccounts/{balanceAccountId}/sweeps/{sweepId}".gsub(/{.+?}/, '%s')
79
+ endpoint = endpoint.gsub(/^\//, "")
80
+ endpoint = endpoint % [balanceAccountId,sweepId]
81
+
82
+ action = { method: "patch", url: endpoint}
83
+ @client.call_adyen_api(@service, action, request, headers, @version)
84
+ end
85
+
86
+ def update_balance_account(request, id, headers: {} )
87
+ """
88
+ Update a balance account
89
+ """
90
+ endpoint = "/balanceAccounts/{id}".gsub(/{.+?}/, '%s')
91
+ endpoint = endpoint.gsub(/^\//, "")
92
+ endpoint = endpoint % [id]
93
+
94
+ action = { method: "patch", url: endpoint}
95
+ @client.call_adyen_api(@service, action, request, headers, @version)
96
+ end
97
+
98
+ def create_balance_account(request, headers: {} )
99
+ """
100
+ Create a balance account
101
+ """
102
+ endpoint = "/balanceAccounts".gsub(/{.+?}/, '%s')
103
+ endpoint = endpoint.gsub(/^\//, "")
104
+ endpoint = endpoint % []
105
+
106
+ action = { method: "post", url: endpoint}
107
+ @client.call_adyen_api(@service, action, request, headers, @version)
108
+ end
109
+
110
+ def create_sweep(request, balanceAccountId, headers: {} )
111
+ """
112
+ Create a sweep
113
+ """
114
+ endpoint = "/balanceAccounts/{balanceAccountId}/sweeps".gsub(/{.+?}/, '%s')
115
+ endpoint = endpoint.gsub(/^\//, "")
116
+ endpoint = endpoint % [balanceAccountId]
117
+
118
+ action = { method: "post", url: endpoint}
119
+ @client.call_adyen_api(@service, action, request, headers, @version)
120
+ end
121
+
122
+ end
123
+ end