mangopay 3.11.1 → 3.13.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1b1c4ab5a218b4ccd0da9317cb444381509768780a2ff99d27b920ae48edbbec
4
- data.tar.gz: 3c5af9a55982270cd08a57a02603f243c0c205f512a8560536ee5a370f0a6951
3
+ metadata.gz: 33c2d6553dc8885b0fe21e619033297cf0b7101a34075ad1bc71ec9a17117707
4
+ data.tar.gz: ec0af8fa883f54639840ff7fd47b26f3ac491509122ecb83a755919263d4e811
5
5
  SHA512:
6
- metadata.gz: 515d50e9a5dcfcaab5fc81cf63609e80351ae955efaec23e7549c32ff345184e4af24ecf50367d482cfda1cd2e93d513271ebda859bee48379cf89ef5fa3769d
7
- data.tar.gz: f6a6dace6284cbac4b6bb27a23092196fcfd8f325fccf850c3dfd47431fbedf280d1e2cd77cac1b3c65642b4992cd2ecfd906a0bfc533942274bf00e4c1bc81e
6
+ metadata.gz: 2be5f515afb4652ec2b18d8411dfcaff56ccde9e7c7a121dc6ce575392165ae1a86a0d245f4553e0a9b94e7d8cefe4acb00284c9946b47d1a3a05ce3a38ad030
7
+ data.tar.gz: a67eab6dbb229a8a9d53f4839faa11650de723dda61bf208e8a10c44b7c7fcf47605a7af2620330d501b5a278b891cb57b15f6b58b21275b67de677f812d0d69
@@ -16,11 +16,11 @@ jobs:
16
16
  packages: write
17
17
 
18
18
  steps:
19
- - uses: actions/checkout@v2
19
+ - uses: actions/checkout@v3
20
20
  - name: Set up Ruby 2.6
21
- uses: actions/setup-ruby@v1
21
+ uses: ruby/setup-ruby@v1
22
22
  with:
23
- ruby-version: 2.6.x
23
+ ruby-version: 2.6.10
24
24
 
25
25
  - name: Publish to RubyGems
26
26
  run: |
@@ -21,11 +21,11 @@ jobs:
21
21
  packages: write
22
22
 
23
23
  steps:
24
- - uses: actions/checkout@v2
24
+ - uses: actions/checkout@v3
25
25
  - name: Set up Ruby 2.6
26
- uses: actions/setup-ruby@v1
26
+ uses: ruby/setup-ruby@v1
27
27
  with:
28
- ruby-version: 2.6.x
28
+ ruby-version: 2.6.10
29
29
  - name: Install Rspec
30
30
  run: |
31
31
  gem install bundler
data/CHANGELOG.md CHANGED
@@ -1,3 +1,30 @@
1
+ ## [3.13.2] - 2023-05-18
2
+ ### Fixes
3
+
4
+ - fixed GitHub Actions CD pipeline
5
+
6
+ ## [3.13.1] - 2023-05-18
7
+ ### Fixes
8
+
9
+ - typo fixed in test context name (@batistadasilva)
10
+
11
+ ## [3.13.0] - 2023-05-17
12
+ ### Added
13
+
14
+ - Possibility to configure HTTP `max_retries (http_max_retries)` (default value = 1) and `open_timeout (http_open_timeout)` (default value = 60 seconds)
15
+ - Increased default `read_timeout` to 30 seconds
16
+
17
+
18
+ ## [3.12.0] - 2022-11-16
19
+ ### New 30-day preauthorization feature
20
+
21
+ Preauthorizations can now hold funds for up to 30 days, therefore ensuring the solvency of a registered card for the same amount of time.
22
+
23
+ - The **Deposit** service has been added with methods for creating, fetching and canceling a deposit
24
+ - The **create_pre_authorized_deposit_pay_in** method has been added to the PayIn service
25
+
26
+ Thanks to 30-day preauthorizations, MANGOPAY can provide a simpler and more flexible payment experience for a wide range of use cases, especially for rentals.
27
+
1
28
  ## [3.11.1] - 2022-10-18
2
29
  ### Fixed
3
30
 
@@ -0,0 +1,20 @@
1
+ module MangoPay
2
+
3
+ # See http://docs.mangopay.com/api-references/payins/preauthorized-payin/
4
+ class Deposit < Resource
5
+ def self.create(params, idempotency_key = nil)
6
+ MangoPay.request(:post, "#{MangoPay.api_path}/deposit-preauthorizations/card/direct", params, {}, idempotency_key)
7
+ end
8
+
9
+ def self.get(deposit_id, filters = {})
10
+ MangoPay.request(:get, "#{MangoPay.api_path}/deposit-preauthorizations/#{deposit_id}", {}, filters)
11
+ end
12
+
13
+ def self.cancel(deposit_id)
14
+ params = {
15
+ PaymentStatus: 'CANCELED'
16
+ }
17
+ MangoPay.request(:put, "#{MangoPay.api_path}/deposit-preauthorizations/#{deposit_id}", params)
18
+ end
19
+ end
20
+ end
@@ -55,6 +55,10 @@ module MangoPay
55
55
  def self.url(*)
56
56
  "#{MangoPay.api_path}/payins/preauthorized/direct"
57
57
  end
58
+
59
+ def self.create_pre_authorized_deposit_pay_in(params, idempotency_key = nil)
60
+ MangoPay.request(:post, "#{MangoPay.api_path}/payins/deposit-preauthorized/direct/full-capture", params, {}, idempotency_key)
61
+ end
58
62
  end
59
63
 
60
64
  end
@@ -1,3 +1,3 @@
1
1
  module MangoPay
2
- VERSION = '3.11.1'
2
+ VERSION = '3.13.2'
3
3
  end
data/lib/mangopay.rb CHANGED
@@ -43,6 +43,7 @@ module MangoPay
43
43
  autoload :UboDeclaration, 'mangopay/ubo_declaration'
44
44
  autoload :Ubo, 'mangopay/ubo'
45
45
  autoload :Regulatory, 'mangopay/regulatory'
46
+ autoload :Deposit, 'mangopay/deposit'
46
47
 
47
48
  # temporary
48
49
  autoload :Temp, 'mangopay/temp'
@@ -51,6 +52,7 @@ module MangoPay
51
52
  attr_accessor :preproduction, :root_url,
52
53
  :client_id, :client_apiKey,
53
54
  :temp_dir, :log_file, :http_timeout,
55
+ :http_max_retries, :http_open_timeout,
54
56
  :logger
55
57
 
56
58
  def preproduction
@@ -62,7 +64,15 @@ module MangoPay
62
64
  end
63
65
 
64
66
  def http_timeout
65
- @http_timeout || 10000
67
+ @http_timeout || 30000
68
+ end
69
+
70
+ def http_max_retries
71
+ @http_max_retries || 1
72
+ end
73
+
74
+ def http_open_timeout
75
+ @http_open_timeout || 60000
66
76
  end
67
77
  end
68
78
 
@@ -140,7 +150,9 @@ module MangoPay
140
150
  headers['Idempotency-Key'] = headers_or_idempotency_key if headers_or_idempotency_key != nil
141
151
  end
142
152
 
143
- res = Net::HTTP.start(uri.host, uri.port, use_ssl: true, :read_timeout => configuration.http_timeout, ssl_version: :TLSv1_2) do |http|
153
+ res = Net::HTTP.start(uri.host, uri.port, use_ssl: true, :read_timeout => configuration.http_timeout,
154
+ :max_retries => configuration.http_max_retries,
155
+ :open_timeout => configuration.http_open_timeout, ssl_version: :TLSv1_2) do |http|
144
156
  req = Net::HTTP::const_get(method.capitalize).new(uri.request_uri, headers)
145
157
  req.body = JSON.dump(params)
146
158
  before_request_proc.call(req) if before_request_proc
@@ -1,7 +1,7 @@
1
1
  describe MangoPay::BankingAliases do
2
2
  include_context 'users'
3
3
  include_context 'wallets'
4
- include_context 'bankigaliases'
4
+ include_context 'bankingaliases'
5
5
 
6
6
  describe 'CREATE' do
7
7
  it 'creates a new banking alias' do
@@ -0,0 +1,76 @@
1
+ describe MangoPay::Deposit do
2
+ include_context 'users'
3
+ include_context 'payins'
4
+
5
+ describe 'CREATE' do
6
+ it 'creates a new deposit' do
7
+ author = new_natural_user
8
+ card_registration = new_card_registration_completed_for_deposit
9
+ deposit = create_new_deposit(card_registration['CardId'], author['Id'])
10
+
11
+ assert_deposit(deposit, card_registration['CardId'], author["Id"])
12
+ end
13
+ end
14
+
15
+ describe 'GET' do
16
+ it 'get an existing deposit' do
17
+ author = new_natural_user
18
+ card_registration = new_card_registration_completed_for_deposit
19
+ deposit = create_new_deposit(card_registration['CardId'], author['Id'])
20
+
21
+ assert_deposit(deposit, card_registration['CardId'], author["Id"])
22
+
23
+ fetched_deposit = MangoPay::Deposit.get(deposit['Id'])
24
+
25
+ assert_deposit(fetched_deposit, card_registration['CardId'], author["Id"])
26
+ end
27
+ end
28
+
29
+ # the Cancel flow will be teste manually for now
30
+ =begin
31
+ describe 'CANCEL' do
32
+ it 'cancel an existing deposit' do
33
+ author = new_natural_user
34
+ card_registration = new_card_registration_completed
35
+ deposit = create_new_deposit(card_registration['CardId'], author['Id'])
36
+
37
+ assert_deposit(deposit, card_registration['CardId'], author["Id"])
38
+ expect(deposit['Status']).to eq('CREATED')
39
+ expect(deposit['PaymentStatus']).to eq('WAITING')
40
+
41
+ MangoPay::Deposit.cancel(deposit['Id'])
42
+
43
+ updated_deposit = MangoPay::Deposit.get(deposit['Id'])
44
+
45
+ assert_deposit(updated_deposit, card_registration['CardId'], author["Id"])
46
+ expect(updated_deposit['Status']).to eq('SUCCEEDED')
47
+ expect(updated_deposit['PaymentStatus']).to eq('CANCELED')
48
+ end
49
+ end
50
+ =end
51
+ end
52
+
53
+
54
+ def assert_deposit(deposit, card_reg_id, author_id)
55
+ expect(deposit['Id']).not_to be_nil
56
+ expect(deposit['CreationDate']).not_to be_nil
57
+ expect(deposit['ExpirationDate']).not_to be_nil
58
+ expect(deposit['AuthorId']).not_to be_nil
59
+ expect(deposit['DebitedFunds']).not_to be_nil
60
+ expect(deposit['Status']).not_to be_nil
61
+ expect(deposit['PaymentStatus']).not_to be_nil
62
+ expect(deposit['PayinsLinked']).not_to be_nil
63
+ expect(deposit['CardId']).not_to be_nil
64
+ expect(deposit['CardId']).to eq(card_reg_id)
65
+ expect(deposit['AuthorId']).to eq(author_id)
66
+ expect(deposit['SecureModeReturnURL']).not_to be_nil
67
+ expect(deposit['SecureModeRedirectURL']).not_to be_nil
68
+ expect(deposit['PaymentType']).not_to be_nil
69
+ expect(deposit['ExecutionType']).not_to be_nil
70
+ expect(deposit['StatementDescriptor']).not_to be_nil
71
+ expect(deposit['Culture']).not_to be_nil
72
+ expect(deposit['BrowserInfo']).not_to be_nil
73
+ expect(deposit['IpAddress']).not_to be_nil
74
+ expect(deposit['Billing']).not_to be_nil
75
+ expect(deposit['Shipping']).not_to be_nil
76
+ end
@@ -1,7 +1,8 @@
1
1
  describe MangoPay::PayIn::PreAuthorized::Direct, type: :feature do
2
2
  include_context 'wallets'
3
3
  include_context 'payins'
4
-
4
+ include_context 'users'
5
+
5
6
  def check_type_and_status(payin)
6
7
  expect(payin['Type']).to eq('PAYIN')
7
8
  expect(payin['Nature']).to eq('REGULAR')
@@ -67,4 +68,21 @@ describe MangoPay::PayIn::PreAuthorized::Direct, type: :feature do
67
68
  end
68
69
  end
69
70
 
71
+ # this flow is tested manually for the moment
72
+ =begin
73
+ describe 'CREATE AND VIEW PRE AUTHORIZED DEPOSIT' do
74
+ it 'creates a card direct pre authorized deposit payin' do
75
+ wallet = new_wallet
76
+ author = new_natural_user
77
+ card_registration = new_card_registration_completed
78
+ deposit = create_new_deposit(card_registration['CardId'], author['Id'])
79
+
80
+ created = create_new_payin_pre_authorized_deposit_direct(deposit['Id'], author['Id'], wallet['Id'])
81
+
82
+ expect(created['Id']).not_to be_nil
83
+ check_type_and_status(created)
84
+ expect(created['DepositId']).to eq(deposit['Id'])
85
+ end
86
+ end
87
+ =end
70
88
  end
@@ -393,6 +393,28 @@ shared_context 'payins' do
393
393
  RegistrationData: cardreg['RegistrationData'])
394
394
  end
395
395
 
396
+ let(:new_card_registration_completed_for_deposit) do
397
+ # 1st step: create
398
+ cardreg = new_card_registration
399
+
400
+ # 2nd step: tokenize by payline (fills-in RegistrationData)
401
+ data = {
402
+ data: cardreg['PreregistrationData'],
403
+ accessKeyRef: cardreg['AccessKey'],
404
+ cardNumber: 4970105181818183,
405
+ cardExpirationDate: 1226,
406
+ cardCvx: 123}
407
+
408
+ res = Net::HTTP.post_form(URI(cardreg['CardRegistrationURL']), data)
409
+ raise Exception, [res, res.body] unless res.is_a?(Net::HTTPOK) && res.body.start_with?('data=')
410
+
411
+ cardreg['RegistrationData'] = res.body
412
+
413
+ # 3rd step: update (fills-in CardId) and return it
414
+ MangoPay::CardRegistration.update(cardreg['Id'],
415
+ RegistrationData: cardreg['RegistrationData'])
416
+ end
417
+
396
418
  let(:new_payin_card_direct) { create_new_payin_card_direct(new_wallet) }
397
419
 
398
420
  def create_new_payin_card_direct(to_wallet, amnt = 1000)
@@ -480,6 +502,21 @@ shared_context 'payins' do
480
502
  )
481
503
  end
482
504
 
505
+ ###############################################
506
+ # pre-authorized direct deposit
507
+ ###############################################
508
+
509
+ def create_new_payin_pre_authorized_deposit_direct(deposit_id, author_id, credited_wallet_id)
510
+ MangoPay::PayIn::PreAuthorized::Direct.create_pre_authorized_deposit_pay_in(
511
+ AuthorId: author_id,
512
+ CreditedWalletId: credited_wallet_id,
513
+ DebitedFunds: {Currency: 'EUR', Amount: 500},
514
+ Fees: {Currency: 'EUR', Amount: 0},
515
+ DepositId: deposit_id,
516
+ Tag: 'lorem ipsum'
517
+ )
518
+ end
519
+
483
520
  ###############################################
484
521
  # bankwire/direct
485
522
  ###############################################
@@ -564,7 +601,7 @@ shared_context 'hooks' do
564
601
  end
565
602
 
566
603
  ###############################################
567
- shared_context 'bankigaliases' do
604
+ shared_context 'bankingaliases' do
568
605
  ###############################################
569
606
  include_context 'users'
570
607
  include_context 'wallets'
@@ -578,3 +615,57 @@ shared_context 'bankigaliases' do
578
615
  }, new_wallet['Id'])
579
616
  end
580
617
  end
618
+
619
+
620
+ ###############################################
621
+ # deposits
622
+ ###############################################
623
+
624
+ def create_new_deposit(card_registration_id, author_id)
625
+ MangoPay::Deposit.create(
626
+ {
627
+ AuthorId: author_id,
628
+ DebitedFunds: {Currency: 'EUR', Amount: 1000},
629
+ CardId: card_registration_id,
630
+ SecureModeReturnURL: 'http://mangopay-sandbox-test.com',
631
+ StatementDescriptor: "lorem",
632
+ Culture: 'FR',
633
+ IpAddress: "2001:0620:0000:0000:0211:24FF:FE80:C12C",
634
+ BrowserInfo: {
635
+ AcceptHeader: "text/html, application/xhtml+xml, application/xml;q=0.9, /;q=0.8",
636
+ JavaEnabled: true,
637
+ Language: "FR-FR",
638
+ ColorDepth: 4,
639
+ ScreenHeight: 1800,
640
+ ScreenWidth: 400,
641
+ JavascriptEnabled: true,
642
+ TimeZoneOffset: "+60",
643
+ UserAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
644
+ },
645
+ Billing: {
646
+ Address: {
647
+ AddressLine1: 'AddressLine1',
648
+ AddressLine2: 'AddressLine2',
649
+ City: 'City',
650
+ Region: 'Region',
651
+ PostalCode: 'PostalCode',
652
+ Country: 'FR'
653
+ },
654
+ FirstName: 'Joe',
655
+ LastName: 'Blogs'
656
+ },
657
+ Shipping: {
658
+ Address: {
659
+ AddressLine1: 'AddressLine1',
660
+ AddressLine2: 'AddressLine2',
661
+ City: 'City',
662
+ Region: 'Region',
663
+ PostalCode: 'PostalCode',
664
+ Country: 'FR'
665
+ },
666
+ FirstName: 'Joe',
667
+ LastName: 'Blogs'
668
+ }
669
+ }
670
+ )
671
+ end
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.11.1
4
+ version: 3.13.2
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: 2022-10-19 00:00:00.000000000 Z
12
+ date: 2023-05-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: multi_json
@@ -82,6 +82,7 @@ files:
82
82
  - lib/mangopay/card.rb
83
83
  - lib/mangopay/card_registration.rb
84
84
  - lib/mangopay/client.rb
85
+ - lib/mangopay/deposit.rb
85
86
  - lib/mangopay/dispute.rb
86
87
  - lib/mangopay/errors.rb
87
88
  - lib/mangopay/event.rb
@@ -115,6 +116,7 @@ files:
115
116
  - spec/mangopay/client_spec.png
116
117
  - spec/mangopay/client_spec.rb
117
118
  - spec/mangopay/configuration_spec.rb
119
+ - spec/mangopay/deposit_spec.rb
118
120
  - spec/mangopay/dispute_spec.png
119
121
  - spec/mangopay/dispute_spec.rb
120
122
  - spec/mangopay/event_spec.rb
@@ -182,6 +184,7 @@ test_files:
182
184
  - spec/mangopay/client_spec.png
183
185
  - spec/mangopay/client_spec.rb
184
186
  - spec/mangopay/configuration_spec.rb
187
+ - spec/mangopay/deposit_spec.rb
185
188
  - spec/mangopay/dispute_spec.png
186
189
  - spec/mangopay/dispute_spec.rb
187
190
  - spec/mangopay/event_spec.rb