mangopay 3.2.0 → 3.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby_cd.yml +34 -0
- data/.github/workflows/ruby_ci.yml +34 -0
- data/CHANGELOG.md +81 -4
- data/lib/mangopay/bankingaliases_iban.rb +2 -2
- data/lib/mangopay/client.rb +8 -2
- data/lib/mangopay/dispute.rb +10 -10
- data/lib/mangopay/errors.rb +9 -4
- data/lib/mangopay/filter_parameters.rb +7 -2
- data/lib/mangopay/http_calls.rb +2 -2
- data/lib/mangopay/kyc_document.rb +7 -7
- data/lib/mangopay/pay_in.rb +30 -0
- data/lib/mangopay/pay_out.rb +7 -2
- data/lib/mangopay/refund.rb +1 -0
- data/lib/mangopay/transaction.rb +3 -3
- data/lib/mangopay/ubo.rb +4 -4
- data/lib/mangopay/ubo_declaration.rb +8 -6
- data/lib/mangopay/version.rb +1 -1
- data/lib/mangopay/wallet.rb +2 -2
- data/spec/mangopay/client_spec.png +0 -0
- data/spec/mangopay/client_spec.rb +4 -4
- data/spec/mangopay/configuration_spec.rb +5 -1
- data/spec/mangopay/dispute_spec.png +0 -0
- data/spec/mangopay/kyc_document_spec.png +0 -0
- data/spec/mangopay/log_requests_filter_spec.rb +1 -0
- data/spec/mangopay/payout_bankwire_spec.rb +9 -0
- data/spec/mangopay/recurring_payin_spec.rb +66 -0
- data/spec/mangopay/shared_resources.rb +26 -3
- data/spec/mangopay/ubo_declaration_spec.rb +15 -4
- data/spec/mangopay/ubo_spec.rb +3 -3
- metadata +7 -4
- data/.travis.yml +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bdb36f26dc6032401dfe30606b77d8368da58389fdae346d1a787971d0963357
|
4
|
+
data.tar.gz: 4d6ad1805512bfd56f6289bb2e482653b1b3167006d7d99d95cf7bb030724eb0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1344508c23d8b559c672ff2ff6e3e8739d53b7e9d6690f3a5cfdde733b0af8803e4a4adadeb3fe300e373ab0fc2d638707c4d68a48dfb355301db074cea1732e
|
7
|
+
data.tar.gz: 4dab1cab255b3eb58def8ac300c64551541f7ba3f96b3eda1e7bf690439e7ffe6f46167fd7ae80b715bcdc9d4f04bcb969c8c1a290c0f97ed66c3da8dd3cb8b9
|
@@ -0,0 +1,34 @@
|
|
1
|
+
name: mangopay2-net-ruby-cd
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
# Sequence of patterns matched against refs/tags
|
6
|
+
tags:
|
7
|
+
# It pushes any tags that contain a v. ex: v1.16.1
|
8
|
+
- '*'
|
9
|
+
|
10
|
+
jobs:
|
11
|
+
build:
|
12
|
+
name: Build + Publish
|
13
|
+
runs-on: ubuntu-latest
|
14
|
+
permissions:
|
15
|
+
contents: read
|
16
|
+
packages: write
|
17
|
+
|
18
|
+
steps:
|
19
|
+
- uses: actions/checkout@v2
|
20
|
+
- name: Set up Ruby 2.6
|
21
|
+
uses: actions/setup-ruby@v1
|
22
|
+
with:
|
23
|
+
ruby-version: 2.6.x
|
24
|
+
|
25
|
+
- name: Publish to RubyGems
|
26
|
+
run: |
|
27
|
+
mkdir -p $HOME/.gem
|
28
|
+
touch $HOME/.gem/credentials
|
29
|
+
chmod 0600 $HOME/.gem/credentials
|
30
|
+
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
|
31
|
+
gem build *.gemspec
|
32
|
+
gem push *.gem
|
33
|
+
env:
|
34
|
+
GEM_HOST_API_KEY: "${{secrets.GEM_HOST_API_KEY}}"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
name: mangopay2-net-ruby-ci
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
# push on master branch
|
7
|
+
- master
|
8
|
+
# push on a feature branch
|
9
|
+
- feature/*
|
10
|
+
# push on a bugfix branch
|
11
|
+
- bugfix/*
|
12
|
+
pull_request:
|
13
|
+
branches: [ master ]
|
14
|
+
|
15
|
+
jobs:
|
16
|
+
build:
|
17
|
+
name: Build
|
18
|
+
runs-on: ubuntu-latest
|
19
|
+
permissions:
|
20
|
+
contents: read
|
21
|
+
packages: write
|
22
|
+
|
23
|
+
steps:
|
24
|
+
- uses: actions/checkout@v2
|
25
|
+
- name: Set up Ruby 2.6
|
26
|
+
uses: actions/setup-ruby@v1
|
27
|
+
with:
|
28
|
+
ruby-version: 2.6.x
|
29
|
+
- name: Install Rspec
|
30
|
+
run: |
|
31
|
+
gem install bundler
|
32
|
+
bundler install
|
33
|
+
- name: Test
|
34
|
+
run: bundle exec rspec
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,80 @@
|
|
1
|
+
## [3.6.0] - 2021.08.10
|
2
|
+
## Added
|
3
|
+
|
4
|
+
- You can now update and view a Recurring PayIn Registration object. To know more about this feature, please consult the documentation [here](https://docs.mangopay.com/guide/recurring-payments-introduction).
|
5
|
+
- To improve recurring payments, we have added new parameters for CIT : DebitedFunds & Fees. To know more about this feature, please consult the documentation [here](https://docs.mangopay.com/endpoints/v2.01/payins#e1053_create-a-recurring-payin-cit)
|
6
|
+
|
7
|
+
## [3.5.0] - 2021.06.10
|
8
|
+
## Added
|
9
|
+
|
10
|
+
We have added a new feature **[recurring payments](https://docs.mangopay.com/guide/recurring-payments)** dedicated to clients needing to charge a card repeatedly, such as subscriptions or payments installments.
|
11
|
+
|
12
|
+
You can start testing in sandbox, to help you define your workflow. This release provides the first elements of the full feature.
|
13
|
+
|
14
|
+
- [Create a Recurring PayIn Registration object](https://docs.mangopay.com/endpoints/v2.01/payins#e1051_create-a-recurring-payin-registration), containing all the information to define the recurring payment
|
15
|
+
- [Initiate your recurring payment flow](https://docs.mangopay.com/endpoints/v2.01/payins#e1053_create-a-recurring-payin-cit) with an authenticated transaction (CIT) using the Card Recurring PayIn endpoint
|
16
|
+
- [Continue your recurring payment flow](https://docs.mangopay.com/endpoints/v2.01/payins#e1054_create-a-recurring-payin-mit) with an non-authenticated transaction (MIT) using the Card Recurring PayIn endpoint
|
17
|
+
|
18
|
+
This feature is not yet available in production and you need to contact the Support team to request access.
|
19
|
+
|
20
|
+
## Accepted PRs
|
21
|
+
|
22
|
+
- Add support for refund creation
|
23
|
+
- Allow to fetch UBO Declaration without User ID
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
## [3.4.0] - 2021.05.27
|
28
|
+
## Added
|
29
|
+
|
30
|
+
### Instant payment
|
31
|
+
|
32
|
+
Mangopay introduces the instant payment mode. It allows payouts (transfer from wallet to user bank account) to be processed within 25 seconds, rather than the 48 hours for a standard payout.
|
33
|
+
|
34
|
+
You can now use this new type of payout with the Ruby SDK.
|
35
|
+
|
36
|
+
Example :
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
bankwire = MangoPay::PayOut::BankWire.get_bankwire(payout['Id'])
|
40
|
+
# where payout['Id'] is the id of an existing payout
|
41
|
+
```
|
42
|
+
|
43
|
+
Please note that this feature must be authorized and activated by MANGOPAY. More information [here](https://docs.mangopay.com/guide/instant-payment-payout).
|
44
|
+
|
45
|
+
### Accepted PRs
|
46
|
+
|
47
|
+
- Add support to create refunds for PayIn, Transfer and PayOut transactions.
|
48
|
+
- ResponseError object improvement
|
49
|
+
|
50
|
+
## [3.3.0]
|
51
|
+
## Fixed
|
52
|
+
|
53
|
+
### IBAN for testing purposes
|
54
|
+
|
55
|
+
⚠️ **IBAN provided for testing purpose should never be used outside of a testing environement!**
|
56
|
+
|
57
|
+
More information about how to test payments, click [here](https://docs.mangopay.com/guide/testing-payments).
|
58
|
+
|
59
|
+
### Others
|
60
|
+
|
61
|
+
- Adding missing json require in log requests filter spec. Thank you @Vin0uz
|
62
|
+
- Extend fetch_wallet and create_payout API. Thank you @peterb
|
63
|
+
|
64
|
+
## Added
|
65
|
+
|
66
|
+
Some of you use a lot the [PreAuthorization](https://docs.mangopay.com/endpoints/v2.01/preauthorizations#e183_the-preauthorization-object) feature of our API. To make your life easier, we have added three new events :
|
67
|
+
|
68
|
+
- PREAUTHORIZATION_CREATED
|
69
|
+
- PREAUTHORIZATION_SUCCEEDED
|
70
|
+
- PREAUTHORIZATION_FAILED
|
71
|
+
|
72
|
+
The goal is to help you monitor a PreAuthorization with a [webhook](https://docs.mangopay.com/endpoints/v2.01/hooks#e246_the-hook-object).
|
73
|
+
|
74
|
+
*Example: If a PreAuthorization is desynchronized, when the status is updated, you will be able to know it.*
|
75
|
+
|
76
|
+
|
77
|
+
|
1
78
|
## [3.2.0]
|
2
79
|
## Added
|
3
80
|
|
@@ -33,7 +110,7 @@ The parameter `Applied3DSVersion` shows you the version of the 3DS protocol used
|
|
33
110
|
|
34
111
|
## [3.1.0]
|
35
112
|
- 3DS2 integration with Shipping and Billing objects, including FirstName and LastName fields
|
36
|
-
The objects Billing and Shipping may be included on all calls to the following endpoints:
|
113
|
+
The objects Billing and Shipping may be included on all calls to the following endpoints:
|
37
114
|
- /preauthorizations/card/direct
|
38
115
|
- /payins/card/direct
|
39
116
|
- /payins/card/web
|
@@ -54,7 +131,7 @@ The objects Billing and Shipping may be included on all calls to the following e
|
|
54
131
|
## [3.0.35] - 2020-08-24
|
55
132
|
- Improvement to Net::ReadTimeout handling
|
56
133
|
- "User-agent" format in the headers changed, aligned to other assets 👤
|
57
|
-
|
134
|
+
|
58
135
|
## [3.0.34] - 2020-06-25
|
59
136
|
### Added
|
60
137
|
- This SDK is now GooglePay-ready ! Feel free to ask our lovely support for more infos about its activation.
|
@@ -72,7 +149,7 @@ The objects Billing and Shipping may be included on all calls to the following e
|
|
72
149
|
|
73
150
|
## [3.0.33] - 2019-09-23
|
74
151
|
### Added
|
75
|
-
- ApplePay `Payin` functions are now available. More info about activation to come in the following weeks...
|
152
|
+
- ApplePay `Payin` functions are now available. More info about activation to come in the following weeks...
|
76
153
|
### Changed
|
77
154
|
- GET EMoney method now supports year and month parameters. More info on our [docs](https://docs.mangopay.com/endpoints/v2.01/user-emoney#e895_view-a-users-emoney)
|
78
155
|
|
@@ -86,4 +163,4 @@ The objects Billing and Shipping may be included on all calls to the following e
|
|
86
163
|
- `APIKey` is now replacing `passphrase` property for credentials. You must update it by updating to 3.0.32 SDK version and upper ones.
|
87
164
|
|
88
165
|
|
89
|
-
|
166
|
+
|
@@ -3,9 +3,9 @@ module MangoPay
|
|
3
3
|
# See parent class MangoPay::BankingAliases
|
4
4
|
class BankingAliasesIBAN < BankingAliases
|
5
5
|
|
6
|
-
def self.create(params, wallet_id)
|
6
|
+
def self.create(params, wallet_id, headers_or_idempotency_key = nil)
|
7
7
|
url = "#{MangoPay.api_path}/wallets/#{wallet_id}/bankingaliases/iban"
|
8
|
-
MangoPay.request(:post, url, params, {})
|
8
|
+
MangoPay.request(:post, url, params, {}, headers_or_idempotency_key)
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.url(id = nil)
|
data/lib/mangopay/client.rb
CHANGED
@@ -47,7 +47,10 @@ module MangoPay
|
|
47
47
|
# +currency_iso_code+ is currncy ISO code
|
48
48
|
# see https://docs.mangopay.com/api-references/client-wallets/
|
49
49
|
def fetch_wallet(funds_type, currency_iso_code)
|
50
|
-
|
50
|
+
method = :get
|
51
|
+
path = url() + "/wallets/#{funds_type}/#{currency_iso_code}"
|
52
|
+
yield method, path if block_given?
|
53
|
+
MangoPay.request(method, path)
|
51
54
|
end
|
52
55
|
|
53
56
|
# Fetch transactions for all your client wallets.
|
@@ -79,7 +82,10 @@ module MangoPay
|
|
79
82
|
end
|
80
83
|
|
81
84
|
def create_payout(params)
|
82
|
-
|
85
|
+
method = :post
|
86
|
+
path = url() + "/payouts"
|
87
|
+
yield method, path, params if block_given?
|
88
|
+
MangoPay.request(method, path, params)
|
83
89
|
end
|
84
90
|
|
85
91
|
end
|
data/lib/mangopay/dispute.rb
CHANGED
@@ -8,9 +8,9 @@ module MangoPay
|
|
8
8
|
include HTTPCalls::Update
|
9
9
|
class << self
|
10
10
|
|
11
|
-
def close(dispute_id)
|
11
|
+
def close(dispute_id, idempotency_key = nil)
|
12
12
|
url = url(dispute_id) + "/close/"
|
13
|
-
MangoPay.request(:put, url)
|
13
|
+
MangoPay.request(:put, url, {}, {}, idempotency_key)
|
14
14
|
end
|
15
15
|
|
16
16
|
# +contested_funds+: Money hash
|
@@ -44,15 +44,15 @@ module MangoPay
|
|
44
44
|
url = "#{MangoPay.api_path}/disputes/pendingsettlement"
|
45
45
|
MangoPay.request(:get, url, {}, filters)
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
#####################################################
|
49
49
|
# repudiations / settlement transfers
|
50
50
|
#####################################################
|
51
51
|
|
52
52
|
# see https://docs.mangopay.com/api-references/disputes/repudiations/
|
53
|
-
def fetch_repudiation(repudiation_id)
|
53
|
+
def fetch_repudiation(repudiation_id, idempotency_key = nil)
|
54
54
|
url = "#{MangoPay.api_path}/repudiations/#{repudiation_id}"
|
55
|
-
MangoPay.request(:get, url)
|
55
|
+
MangoPay.request(:get, url, {}, {}, idempotency_key)
|
56
56
|
end
|
57
57
|
|
58
58
|
# +params+: hash; see https://docs.mangopay.com/api-references/disputes/settlement-transfers/
|
@@ -66,7 +66,7 @@ module MangoPay
|
|
66
66
|
url = "#{MangoPay.api_path}/settlements/#{transfer_id}"
|
67
67
|
MangoPay.request(:get, url)
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
#####################################################
|
71
71
|
# documents
|
72
72
|
#####################################################
|
@@ -91,13 +91,13 @@ module MangoPay
|
|
91
91
|
# Fetches list of dispute documents:
|
92
92
|
# - for the particular dispute if +dispute_id+ is provided (not nil)
|
93
93
|
# - or for all disputes otherwise.
|
94
|
-
#
|
94
|
+
#
|
95
95
|
# Optional +filters+ is a hash accepting following keys:
|
96
96
|
# - +page+, +per_page+, +sort+: pagination and sorting params (see MangoPay::HTTPCalls::Fetch::ClassMethods#fetch)
|
97
97
|
# - filters such as +Type+ (e.g. 'REFUND_PROOF') and +Status+ (e.g. 'VALIDATED')
|
98
98
|
# - +BeforeDate+ (timestamp): filters documents with CreationDate _before_ this date
|
99
99
|
# - +AfterDate+ (timestamp): filters documents with CreationDate _after_ this date
|
100
|
-
#
|
100
|
+
#
|
101
101
|
# See https://docs.mangopay.com/api-references/disputes/dispute-documents/
|
102
102
|
#
|
103
103
|
def fetch_documents(dispute_id = nil, filters = {})
|
@@ -106,12 +106,12 @@ module MangoPay
|
|
106
106
|
end
|
107
107
|
|
108
108
|
# Adds the file page (attachment) to the given document.
|
109
|
-
#
|
109
|
+
#
|
110
110
|
# See https://docs.mangopay.com/api-references/disputes/dispute-document-pages/ :
|
111
111
|
# - Document have to be in 'CREATED' Status
|
112
112
|
# - You can create as many pages as needed
|
113
113
|
# - Change Status to 'VALIDATION_ASKED' to submit dispute documents
|
114
|
-
#
|
114
|
+
#
|
115
115
|
# The file_content_base64 param may be:
|
116
116
|
# - Base64 encoded file content
|
117
117
|
# - or nil: in this case pass the file path in the next param
|
data/lib/mangopay/errors.rb
CHANGED
@@ -49,12 +49,17 @@ module MangoPay
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def type; @details['Type']; end
|
52
|
-
def
|
52
|
+
def error; @details['error']; end
|
53
|
+
def errors; @details['errors'] || error; end
|
53
54
|
|
54
55
|
def message;
|
55
|
-
|
56
|
-
|
57
|
-
|
56
|
+
if error
|
57
|
+
msg = error
|
58
|
+
else
|
59
|
+
msg = @details['Message']
|
60
|
+
msg += errors.sort.map {|k,v| " #{k}: #{v}"}.join if (errors && errors.is_a?(Hash))
|
61
|
+
msg
|
62
|
+
end
|
58
63
|
end
|
59
64
|
|
60
65
|
end
|
@@ -39,12 +39,17 @@ module MangoPay
|
|
39
39
|
@@res_confidential_params ||= [
|
40
40
|
'access_token', 'AccessKey', 'IBAN', 'CardRegistrationURL',
|
41
41
|
'PreregistrationData', 'RedirectURL', 'RegistrationData',
|
42
|
-
'SecureModeRedirectUrl', 'OwnerName', 'OwnerAddress', 'BIC'
|
42
|
+
'SecureModeRedirectUrl', 'OwnerName', 'OwnerAddress', 'BIC',
|
43
|
+
'FirstName', 'LastName', 'Email', 'AddressLine1',
|
44
|
+
'AddressLine2',
|
43
45
|
].freeze
|
44
46
|
end
|
45
47
|
|
46
48
|
def self.req_confidential_params
|
47
|
-
@@req_confidential_params ||= [
|
49
|
+
@@req_confidential_params ||= [
|
50
|
+
'File', 'IBAN', 'OwnerName', 'OwnerAddress', 'BIC', 'FirstName',
|
51
|
+
'LastName', 'Email', 'AddressLine1', 'AddressLine2',
|
52
|
+
].freeze
|
48
53
|
end
|
49
54
|
|
50
55
|
end
|
data/lib/mangopay/http_calls.rb
CHANGED
@@ -52,9 +52,9 @@ module MangoPay
|
|
52
52
|
# MangoPay::User.fetch(filter = {'page' => 2, 'per_page' => 3})
|
53
53
|
# filter # => {"page"=>2, "per_page"=>3, "total_pages"=>1969, "total_items"=>5905}
|
54
54
|
#
|
55
|
-
def fetch(id_or_filters = nil)
|
55
|
+
def fetch(id_or_filters = nil, idempotency_key = nil)
|
56
56
|
id, filters = HTTPCalls::Fetch.parse_id_or_filters(id_or_filters)
|
57
|
-
response = MangoPay.request(:get, url(id), {}, filters)
|
57
|
+
response = MangoPay.request(:get, url(id), {}, filters, idempotency_key)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
@@ -9,20 +9,20 @@ module MangoPay
|
|
9
9
|
MangoPay.request(:post, url(user_id), params, {}, idempotency_key)
|
10
10
|
end
|
11
11
|
|
12
|
-
def update(user_id, document_id, params = {})
|
13
|
-
MangoPay.request(:put, url(user_id, document_id), params)
|
12
|
+
def update(user_id, document_id, params = {}, idempotency_key = nil)
|
13
|
+
MangoPay.request(:put, url(user_id, document_id), params, {}, idempotency_key)
|
14
14
|
end
|
15
15
|
|
16
16
|
# Fetches the KYC document belonging to the given +user_id+, with the given +document_id+.
|
17
|
-
def fetch(user_id, document_id)
|
17
|
+
def fetch(user_id, document_id, idempotency_key = nil)
|
18
18
|
url = (user_id) ? url(user_id, document_id) : "#{MangoPay.api_path}/KYC/documents/#{CGI.escape(document_id.to_s)}"
|
19
|
-
MangoPay.request(:get, url)
|
19
|
+
MangoPay.request(:get, url, {}, {}, idempotency_key)
|
20
20
|
end
|
21
21
|
|
22
22
|
# Fetches list of KYC documents:
|
23
23
|
# - for the particular user if +user_id+ is provided (not nil)
|
24
24
|
# - or for all users otherwise.
|
25
|
-
#
|
25
|
+
#
|
26
26
|
# Optional +filters+ is a hash accepting following keys:
|
27
27
|
# - +page+, +per_page+, +sort+: pagination and sorting params (see MangoPay::HTTPCalls::Fetch::ClassMethods#fetch)
|
28
28
|
# - filters such as +Type+ (e.g. 'IDENTITY_PROOF') and +Status+ (e.g. 'VALIDATED')
|
@@ -35,12 +35,12 @@ module MangoPay
|
|
35
35
|
end
|
36
36
|
|
37
37
|
# Adds the file page (attachment) to the given document.
|
38
|
-
#
|
38
|
+
#
|
39
39
|
# See http://docs.mangopay.com/api-references/kyc/pages/ :
|
40
40
|
# - Document have to be in 'CREATED' Status
|
41
41
|
# - You can create as many pages as needed
|
42
42
|
# - Change Status to 'VALIDATION_ASKED' to submit KYC documents
|
43
|
-
#
|
43
|
+
#
|
44
44
|
# The file_content_base64 param may be:
|
45
45
|
# - Base64 encoded file content
|
46
46
|
# - or nil: in this case pass the file path in the next param
|
data/lib/mangopay/pay_in.rb
CHANGED
@@ -126,5 +126,35 @@ module MangoPay
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
|
+
module RecurringPayments
|
130
|
+
class Recurring < Resource
|
131
|
+
include HTTPCalls::Create
|
132
|
+
|
133
|
+
def self.url(*args)
|
134
|
+
if args.any?
|
135
|
+
"#{MangoPay.api_path}/recurringpayinregistrations/#{args.first}"
|
136
|
+
else
|
137
|
+
"#{MangoPay.api_path}/recurringpayinregistrations"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
class CIT < Resource
|
143
|
+
include HTTPCalls::Create
|
144
|
+
|
145
|
+
def self.url(*)
|
146
|
+
"#{MangoPay.api_path}/payins/recurring/card/direct"
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
class MIT < Resource
|
151
|
+
include HTTPCalls::Create
|
152
|
+
|
153
|
+
def self.url(*)
|
154
|
+
"#{MangoPay.api_path}/payins/recurring/card/direct"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
129
159
|
end
|
130
160
|
end
|
data/lib/mangopay/pay_out.rb
CHANGED
@@ -8,9 +8,9 @@ module MangoPay
|
|
8
8
|
# - +page+, +per_page+, +sort+: pagination and sorting params (see MangoPay::HTTPCalls::Fetch::ClassMethods#fetch)
|
9
9
|
# - +Status+: TransactionStatus {CREATED, SUCCEEDED, FAILED}
|
10
10
|
# - +ResultCode+: string representing the transaction result
|
11
|
-
def self.refunds(pay_out_id, filters = {})
|
11
|
+
def self.refunds(pay_out_id, filters = {}, idempotency_key = nil)
|
12
12
|
url = url(pay_out_id) + '/refunds'
|
13
|
-
MangoPay.request(:get, url, {}, filters)
|
13
|
+
MangoPay.request(:get, url, {}, filters, idempotency_key)
|
14
14
|
end
|
15
15
|
|
16
16
|
# See http://docs.mangopay.com/api-references/pay-out-bank-wire/
|
@@ -20,6 +20,11 @@ module MangoPay
|
|
20
20
|
def self.url(*)
|
21
21
|
"#{MangoPay.api_path}/payouts/bankwire"
|
22
22
|
end
|
23
|
+
|
24
|
+
def self.get_bankwire(pay_out_id)
|
25
|
+
url = self.url() + "/" + pay_out_id
|
26
|
+
MangoPay.request(:get, url);
|
27
|
+
end
|
23
28
|
end
|
24
29
|
end
|
25
30
|
end
|
data/lib/mangopay/refund.rb
CHANGED
data/lib/mangopay/transaction.rb
CHANGED
@@ -3,7 +3,7 @@ module MangoPay
|
|
3
3
|
class << self
|
4
4
|
# Fetches list of transactions belonging to the given +wallet_id+.
|
5
5
|
# See also transactions for user: MangoPay::User#transactions
|
6
|
-
#
|
6
|
+
#
|
7
7
|
# Optional +filters+ is a hash accepting following keys:
|
8
8
|
# - +page+, +per_page+, +sort+: pagination and sorting params (see MangoPay::HTTPCalls::Fetch::ClassMethods#fetch)
|
9
9
|
# - +Status+: TransactionStatus {CREATED, SUCCEEDED, FAILED}
|
@@ -12,8 +12,8 @@ module MangoPay
|
|
12
12
|
# - +BeforeDate+ (timestamp): filters transactions with CreationDate _before_ this date
|
13
13
|
# - +AfterDate+ (timestamp): filters transactions with CreationDate _after_ this date
|
14
14
|
# See https://docs.mangopay.com/api-references/sort-lists/
|
15
|
-
def fetch(wallet_id, filters={})
|
16
|
-
MangoPay.request(:get, url(wallet_id), {}, filters)
|
15
|
+
def fetch(wallet_id, filters={}, headers = nil)
|
16
|
+
MangoPay.request(:get, url(wallet_id), {}, filters, headers)
|
17
17
|
end
|
18
18
|
|
19
19
|
def url(wallet_id)
|
data/lib/mangopay/ubo.rb
CHANGED
@@ -10,16 +10,16 @@ module MangoPay
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
def create(user_id, ubo_declaration_id, params)
|
14
|
-
MangoPay.request(:post, url(user_id, ubo_declaration_id), params)
|
13
|
+
def create(user_id, ubo_declaration_id, params, idempotency_key = nil)
|
14
|
+
MangoPay.request(:post, url(user_id, ubo_declaration_id), params, {}, idempotency_key)
|
15
15
|
end
|
16
16
|
|
17
17
|
def fetch(user_id, ubo_declaration_id, ubo_id)
|
18
18
|
MangoPay.request(:get, url(user_id, ubo_declaration_id, ubo_id))
|
19
19
|
end
|
20
20
|
|
21
|
-
def update(user_id, ubo_declaration_id, ubo_id, params)
|
22
|
-
MangoPay.request(:put, url(user_id, ubo_declaration_id, ubo_id), params)
|
21
|
+
def update(user_id, ubo_declaration_id, ubo_id, params, idempotency_key = nil)
|
22
|
+
MangoPay.request(:put, url(user_id, ubo_declaration_id, ubo_id), params, {}, idempotency_key)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -10,20 +10,22 @@ module MangoPay
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
def create(user_id)
|
14
|
-
MangoPay.request(:post, url(user_id))
|
13
|
+
def create(user_id, idempotency_key)
|
14
|
+
MangoPay.request(:post, url(user_id), {}, {}, idempotency_key)
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
# Fetches the Ubo declaration belonging to the given +user_id+ if given, with the given +id+.
|
18
|
+
def fetch(user_id, id, idempotency_key)
|
19
|
+
url = (user_id) ? url(user_id, id) : "#{MangoPay.api_path}/kyc/ubodeclarations/#{CGI.escape(id.to_s)}"
|
20
|
+
MangoPay.request(:get, url, {}, {}, idempotency_key)
|
19
21
|
end
|
20
22
|
|
21
|
-
def update(user_id, id, params = {})
|
23
|
+
def update(user_id, id, params = {}, idempotency_key)
|
22
24
|
request_params = {
|
23
25
|
Status: params['Status'],
|
24
26
|
Ubos: params['Ubos']
|
25
27
|
}
|
26
|
-
MangoPay.request(:put, url(user_id, id), request_params)
|
28
|
+
MangoPay.request(:put, url(user_id, id), request_params, {}, idempotency_key)
|
27
29
|
end
|
28
30
|
end
|
29
31
|
end
|
data/lib/mangopay/version.rb
CHANGED
data/lib/mangopay/wallet.rb
CHANGED
@@ -10,8 +10,8 @@ module MangoPay
|
|
10
10
|
# Optional +filters+ is a hash accepting following keys:
|
11
11
|
# - +page+, +per_page+, +sort+: pagination and sorting params (see MangoPay::HTTPCalls::Fetch::ClassMethods#fetch)
|
12
12
|
# - other keys specific for transactions filtering (see MangoPay::Transaction.fetch)
|
13
|
-
def self.transactions(wallet_id, filters = {})
|
14
|
-
Transaction.fetch(wallet_id, filters)
|
13
|
+
def self.transactions(wallet_id, filters = {}, headers = nil)
|
14
|
+
Transaction.fetch(wallet_id, filters, headers)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
Binary file
|
@@ -151,8 +151,8 @@ describe MangoPay::Client do
|
|
151
151
|
PostalCode: '75001',
|
152
152
|
Country: 'FR'
|
153
153
|
},
|
154
|
-
IBAN: '
|
155
|
-
BIC: '
|
154
|
+
IBAN: 'FR7630004000031234567890143',
|
155
|
+
BIC: 'BNPAFRPP',
|
156
156
|
Tag: 'Test bank account')
|
157
157
|
expect(bank_account).not_to be_nil
|
158
158
|
expect(bank_account['Id']).not_to be_nil
|
@@ -172,8 +172,8 @@ describe MangoPay::Client do
|
|
172
172
|
PostalCode: '75001',
|
173
173
|
Country: 'FR'
|
174
174
|
},
|
175
|
-
IBAN: '
|
176
|
-
BIC: '
|
175
|
+
IBAN: 'FR7630004000031234567890143',
|
176
|
+
BIC: 'BNPAFRPP',
|
177
177
|
Tag: 'Test bank account')
|
178
178
|
pay_out = MangoPay::Client.create_payout(BankAccountId: bank_account['Id'],
|
179
179
|
|
@@ -6,7 +6,11 @@ describe MangoPay::Configuration do
|
|
6
6
|
c.client_id = 'test_asd'
|
7
7
|
c.client_apiKey = '00000'
|
8
8
|
MangoPay::User.fetch()
|
9
|
-
}.to raise_error
|
9
|
+
}.to raise_error { |err|
|
10
|
+
expect(err).to be_a MangoPay::ResponseError
|
11
|
+
expect(err.code).to eq '401'
|
12
|
+
expect(err.message).to eq 'invalid_client'
|
13
|
+
}
|
10
14
|
end
|
11
15
|
|
12
16
|
it 'goes ok when calling with correct client credentials' do
|
Binary file
|
Binary file
|
@@ -40,6 +40,15 @@ describe MangoPay::PayOut::BankWire, type: :feature do
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
describe 'Get Bankwire' do
|
44
|
+
it 'gets a bankwire' do
|
45
|
+
created = new_payout_bankwire
|
46
|
+
fetched = MangoPay::PayOut::BankWire.get_bankwire(created['Id'])
|
47
|
+
expect(fetched['Id']).to eq(created['Id'])
|
48
|
+
expect(fetched['CreationDate']).to eq(created['CreationDate'])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
43
52
|
describe 'FETCH' do
|
44
53
|
it 'fetches a payout' do
|
45
54
|
created = new_payout_bankwire
|
@@ -0,0 +1,66 @@
|
|
1
|
+
describe MangoPay::PayIn::RecurringPayments, type: :feature do
|
2
|
+
include_context 'wallets'
|
3
|
+
include_context 'users'
|
4
|
+
include_context 'payins'
|
5
|
+
|
6
|
+
describe 'CREATE' do
|
7
|
+
it 'creates a recurring payment' do
|
8
|
+
cardreg = new_card_registration_3dsecure_completed
|
9
|
+
wallet = new_wallet
|
10
|
+
recurring = MangoPay::PayIn::RecurringPayments::Recurring.create(
|
11
|
+
AuthorId: new_natural_user['Id'],
|
12
|
+
CardId: cardreg['CardId'],
|
13
|
+
CreditedUserId: wallet['Owners'][0],
|
14
|
+
CreditedWalletId: wallet['Id'],
|
15
|
+
FirstTransactionDebitedFunds: {Currency: 'EUR', Amount: 10},
|
16
|
+
FirstTransactionFees: {Currency: 'EUR', Amount: 1},
|
17
|
+
Billing: {
|
18
|
+
Address: {
|
19
|
+
AddressLine1: 'AddressLine1',
|
20
|
+
AddressLine2: 'AddressLine2',
|
21
|
+
City: 'City',
|
22
|
+
Region: 'Region',
|
23
|
+
PostalCode: 'PostalCode',
|
24
|
+
Country: 'FR'
|
25
|
+
},
|
26
|
+
FirstName: 'Joe',
|
27
|
+
LastName: 'Blogs'
|
28
|
+
},
|
29
|
+
Shipping: {
|
30
|
+
Address: {
|
31
|
+
AddressLine1: 'AddressLine1',
|
32
|
+
AddressLine2: 'AddressLine2',
|
33
|
+
City: 'City',
|
34
|
+
Region: 'Region',
|
35
|
+
PostalCode: 'PostalCode',
|
36
|
+
Country: 'FR'
|
37
|
+
},
|
38
|
+
FirstName: 'Joe',
|
39
|
+
LastName: 'Blogs'
|
40
|
+
}
|
41
|
+
)
|
42
|
+
expect(recurring).not_to be_nil
|
43
|
+
|
44
|
+
cit = MangoPay::PayIn::RecurringPayments::CIT.create(
|
45
|
+
RecurringPayinRegistrationId: recurring['Id'],
|
46
|
+
IpAddress: "2001:0620:0000:0000:0211:24FF:FE80:C12C",
|
47
|
+
SecureModeReturnURL: "http://www.my-site.com/returnurl",
|
48
|
+
StatementDescriptor: "lorem",
|
49
|
+
Tag: "custom meta",
|
50
|
+
BrowserInfo: {
|
51
|
+
AcceptHeader: "text/html, application/xhtml+xml, application/xml;q=0.9, /;q=0.8",
|
52
|
+
JavaEnabled: true,
|
53
|
+
Language: "FR-FR",
|
54
|
+
ColorDepth: 4,
|
55
|
+
ScreenHeight: 1800,
|
56
|
+
ScreenWidth: 400,
|
57
|
+
JavascriptEnabled: true,
|
58
|
+
TimeZoneOffset: "+60",
|
59
|
+
UserAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
|
60
|
+
}
|
61
|
+
)
|
62
|
+
|
63
|
+
expect(cit).not_to be_nil
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -136,8 +136,8 @@ shared_context 'bank_accounts' do
|
|
136
136
|
PostalCode: '75001',
|
137
137
|
Country: 'FR'
|
138
138
|
},
|
139
|
-
IBAN: '
|
140
|
-
BIC: '
|
139
|
+
IBAN: 'FR7630004000031234567890143',
|
140
|
+
BIC: 'BNPAFRPP',
|
141
141
|
Tag: 'Test bank account')
|
142
142
|
end
|
143
143
|
end
|
@@ -355,6 +355,28 @@ shared_context 'payins' do
|
|
355
355
|
RegistrationData: cardreg['RegistrationData'])
|
356
356
|
end
|
357
357
|
|
358
|
+
let(:new_card_registration_3dsecure_completed) do
|
359
|
+
# 1st step: create
|
360
|
+
cardreg = new_card_registration
|
361
|
+
|
362
|
+
# 2nd step: tokenize by payline (fills-in RegistrationData)
|
363
|
+
data = {
|
364
|
+
data: cardreg['PreregistrationData'],
|
365
|
+
accessKeyRef: cardreg['AccessKey'],
|
366
|
+
cardNumber: 4970105191923460,
|
367
|
+
cardExpirationDate: 1224,
|
368
|
+
cardCvx: 123}
|
369
|
+
|
370
|
+
res = Net::HTTP.post_form(URI(cardreg['CardRegistrationURL']), data)
|
371
|
+
raise Exception, [res, res.body] unless res.is_a?(Net::HTTPOK) && res.body.start_with?('data=')
|
372
|
+
|
373
|
+
cardreg['RegistrationData'] = res.body
|
374
|
+
|
375
|
+
# 3rd step: update (fills-in CardId) and return it
|
376
|
+
MangoPay::CardRegistration.update(cardreg['Id'],
|
377
|
+
RegistrationData: cardreg['RegistrationData'])
|
378
|
+
end
|
379
|
+
|
358
380
|
let(:new_payin_card_direct) { create_new_payin_card_direct(new_wallet) }
|
359
381
|
|
360
382
|
def create_new_payin_card_direct(to_wallet, amnt = 1000)
|
@@ -439,7 +461,8 @@ shared_context 'payouts' do
|
|
439
461
|
Fees: {Currency: 'EUR', Amount: 0},
|
440
462
|
BankAccountId: new_bank_account['Id'],
|
441
463
|
Communication: 'This is a test',
|
442
|
-
Tag: 'Test PayOut/Bank/Wire'
|
464
|
+
Tag: 'Test PayOut/Bank/Wire',
|
465
|
+
PayoutModeRequested: 'Standard'
|
443
466
|
)
|
444
467
|
end
|
445
468
|
end
|
@@ -6,9 +6,20 @@ describe MangoPay::UboDeclaration do
|
|
6
6
|
it 'can fetch a UBO declaration' do
|
7
7
|
legal_user = new_legal_user
|
8
8
|
|
9
|
-
ubo_declaration = MangoPay::UboDeclaration.create(legal_user['Id'])
|
9
|
+
ubo_declaration = MangoPay::UboDeclaration.create(legal_user['Id'], nil)
|
10
10
|
|
11
|
-
ubo_declaration_byId = MangoPay::UboDeclaration.fetch(legal_user['Id'], ubo_declaration['Id'])
|
11
|
+
ubo_declaration_byId = MangoPay::UboDeclaration.fetch(legal_user['Id'], ubo_declaration['Id'], nil)
|
12
|
+
|
13
|
+
expect(ubo_declaration).not_to be_nil
|
14
|
+
expect(ubo_declaration_byId).not_to be_nil
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'fetches ubo declaration just by id' do
|
18
|
+
legal_user = new_legal_user
|
19
|
+
|
20
|
+
ubo_declaration = MangoPay::UboDeclaration.create(legal_user['Id'], nil)
|
21
|
+
|
22
|
+
ubo_declaration_byId = MangoPay::UboDeclaration.fetch(nil, ubo_declaration['Id'], nil)
|
12
23
|
|
13
24
|
expect(ubo_declaration).not_to be_nil
|
14
25
|
expect(ubo_declaration_byId).not_to be_nil
|
@@ -17,13 +28,13 @@ describe MangoPay::UboDeclaration do
|
|
17
28
|
describe 'UPDATE' do
|
18
29
|
it 'can update a UBO declaration' do
|
19
30
|
legal_user = new_legal_user
|
20
|
-
ubo_declaration = MangoPay::UboDeclaration.create(legal_user['Id'])
|
31
|
+
ubo_declaration = MangoPay::UboDeclaration.create(legal_user['Id'], nil)
|
21
32
|
ubo_declaration['Status'] = 'VALIDATION_ASKED'
|
22
33
|
|
23
34
|
ubo = new_ubo(legal_user, ubo_declaration)
|
24
35
|
|
25
36
|
ubo_declaration['Ubos'] = [ubo]
|
26
|
-
ubo_declaration = MangoPay::UboDeclaration.update(legal_user['Id'], ubo_declaration['Id'], ubo_declaration)
|
37
|
+
ubo_declaration = MangoPay::UboDeclaration.update(legal_user['Id'], ubo_declaration['Id'], ubo_declaration, nil)
|
27
38
|
|
28
39
|
expect(ubo_declaration).not_to be_nil
|
29
40
|
expect(ubo_declaration['Status']).to eq 'VALIDATION_ASKED'
|
data/spec/mangopay/ubo_spec.rb
CHANGED
@@ -5,7 +5,7 @@ describe MangoPay::Ubo do
|
|
5
5
|
describe 'FETCH' do
|
6
6
|
it 'can fetch a Ubo' do
|
7
7
|
legal_user = new_legal_user
|
8
|
-
ubo_declaration = MangoPay::UboDeclaration.create(legal_user['Id'])
|
8
|
+
ubo_declaration = MangoPay::UboDeclaration.create(legal_user['Id'], nil)
|
9
9
|
ubo = new_ubo(legal_user, ubo_declaration)
|
10
10
|
result = MangoPay::Ubo.fetch(legal_user['Id'], ubo_declaration['Id'], ubo['Id'])
|
11
11
|
expect(result).not_to be_nil
|
@@ -16,7 +16,7 @@ describe MangoPay::Ubo do
|
|
16
16
|
describe 'CREATE' do
|
17
17
|
it 'can create a new Ubo' do
|
18
18
|
legal_user = new_legal_user
|
19
|
-
ubo_declaration = MangoPay::UboDeclaration.create(legal_user['Id'])
|
19
|
+
ubo_declaration = MangoPay::UboDeclaration.create(legal_user['Id'], nil)
|
20
20
|
result = new_ubo(legal_user, ubo_declaration)
|
21
21
|
expect(result).not_to be_nil
|
22
22
|
end
|
@@ -25,7 +25,7 @@ describe MangoPay::Ubo do
|
|
25
25
|
describe 'UPDATE' do
|
26
26
|
it 'can update a Ubo' do
|
27
27
|
legal_user = new_legal_user
|
28
|
-
ubo_declaration = MangoPay::UboDeclaration.create(legal_user['Id'])
|
28
|
+
ubo_declaration = MangoPay::UboDeclaration.create(legal_user['Id'], nil)
|
29
29
|
ubo = new_ubo(legal_user, ubo_declaration)
|
30
30
|
ubo['FirstName'] = 'Santa'
|
31
31
|
ubo['LastName'] = 'Clause'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mangopay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Geoffroy Lorieux
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-
|
12
|
+
date: 2021-08-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|
@@ -63,9 +63,10 @@ executables:
|
|
63
63
|
extensions: []
|
64
64
|
extra_rdoc_files: []
|
65
65
|
files:
|
66
|
+
- ".github/workflows/ruby_cd.yml"
|
67
|
+
- ".github/workflows/ruby_ci.yml"
|
66
68
|
- ".gitignore"
|
67
69
|
- ".rspec"
|
68
|
-
- ".travis.yml"
|
69
70
|
- CHANGELOG.md
|
70
71
|
- Gemfile
|
71
72
|
- LICENSE
|
@@ -134,6 +135,7 @@ files:
|
|
134
135
|
- spec/mangopay/payin_preauthorized_direct_spec.rb
|
135
136
|
- spec/mangopay/payout_bankwire_spec.rb
|
136
137
|
- spec/mangopay/preauthorization_spec.rb
|
138
|
+
- spec/mangopay/recurring_payin_spec.rb
|
137
139
|
- spec/mangopay/refund_spec.rb
|
138
140
|
- spec/mangopay/report_spec.rb
|
139
141
|
- spec/mangopay/report_wallets_spec.rb
|
@@ -165,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
167
|
- !ruby/object:Gem::Version
|
166
168
|
version: '0'
|
167
169
|
requirements: []
|
168
|
-
rubygems_version: 3.0.
|
170
|
+
rubygems_version: 3.0.3.1
|
169
171
|
signing_key:
|
170
172
|
specification_version: 4
|
171
173
|
summary: Ruby bindings for the version 2 of the MANGOPAY API
|
@@ -198,6 +200,7 @@ test_files:
|
|
198
200
|
- spec/mangopay/payin_preauthorized_direct_spec.rb
|
199
201
|
- spec/mangopay/payout_bankwire_spec.rb
|
200
202
|
- spec/mangopay/preauthorization_spec.rb
|
203
|
+
- spec/mangopay/recurring_payin_spec.rb
|
201
204
|
- spec/mangopay/refund_spec.rb
|
202
205
|
- spec/mangopay/report_spec.rb
|
203
206
|
- spec/mangopay/report_wallets_spec.rb
|
data/.travis.yml
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
# - 2.0.0
|
4
|
-
# - 2.1
|
5
|
-
# - 2.2
|
6
|
-
# - 2.3
|
7
|
-
# - 2.4
|
8
|
-
- 2.5
|
9
|
-
script:
|
10
|
-
- if [ $TRAVIS_BRANCH != "release" ]; then bundle exec rspec; fi
|
11
|
-
deploy:
|
12
|
-
provider: rubygems
|
13
|
-
api_key:
|
14
|
-
secure: gvlnYEh9cyL+mYeudKzlD+2Po+LgIzCjHzggJH+WDcbtgxlGAFpxbVJOOm/KY8VKhMgIudNV7FJl4Gl4rrG8JjNxbb+qM57ypU3yyDcUesQ+uj0DnN+xszv7M+XtcRQMlhkStawoj/E0QMYBPkAAr1lBpPIFQdC17GDkdn5XvaQ=
|
15
|
-
gem: mangopay
|
16
|
-
on:
|
17
|
-
tags: false
|
18
|
-
repo: Mangopay/mangopay2-ruby-sdk
|
19
|
-
branch: release
|