mono-merchant 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 860b077a7edd26128447c2a0060fed0306052cf77c0407e1962820162458e4f2
4
- data.tar.gz: 137cbd38e0e13f0e236a022806e75eb1d20afe2ac39779776a9ee0a1515a1505
3
+ metadata.gz: 0f97902ac1184bdce16efdf5357e28a06d3435b6559f6f11dce3c09fe25c73c0
4
+ data.tar.gz: 1b4ba516a202e3f9f73b422cc077926ea266d22e1c70ce381512526cf38d9a5b
5
5
  SHA512:
6
- metadata.gz: ec0b7c50d1d580835ab9058d683ba8a305f475acbe991e1d82f2d971c4d14818e51fb6ee0bcc67b51e9114e6236cbcb8854d63ca1cfceabe9ac051838290d2e2
7
- data.tar.gz: 53ab66068dcd5728e68f614dd9c2f7091798912d59828e8c27dcf7b456c7b8f017968b543d440d1f2a391d44850faa6521815bbe6f1cb076aa6b4640fce61b3f
6
+ metadata.gz: b3d4f24ee3c038a32c9b5e24dcbaa084d084c8d7cf14d6f7b7a4111b1cc0e8edf4eec647f6c7f30d9855aa3afb105458938bc26221e1c646ca3bc3ee16a04d78
7
+ data.tar.gz: b0971afe5cc811e3f816fecebb183c19da73e65f5038f6757c8cca621d83c4d64a59b6becf19845dc5fcdeb75eb66f350d07eb5c54ce57c1794aaa8c2ff9e5af
data/README.md CHANGED
@@ -31,6 +31,15 @@ Development: [https://api.monobank.ua/](https://api.monobank.ua/)
31
31
 
32
32
  Production: [https://fop.monobank.ua/](https://fop.monobank.ua/)
33
33
 
34
+ ### Verify webhook transaction
35
+
36
+ ```ruby
37
+
38
+ request_to_validate = MonoMerchant::WebhookValidator.new(request)
39
+ request_to_validate.valid?
40
+
41
+ ```
42
+
34
43
  ### Create invoice request
35
44
 
36
45
  ```ruby
@@ -40,15 +49,42 @@ MonoMerchant::Invoice::Create.new(amount) # see other params in code comments
40
49
 
41
50
  ```
42
51
 
43
- ### Verify webhook transaction
52
+ ### Other methods
44
53
 
45
54
  ```ruby
46
55
 
47
- request_to_validate = MonoMerchant::WebhookValidator.new(request)
48
- request_to_validate.valid?
56
+ # Invoice
57
+ MonoMerchant::Invoice::Status.new(invoice_id) # check status
58
+ MonoMerchant::Invoice::Cancel.new(invoice_id) # cancel successful payment
59
+ MonoMerchant::Invoice::Remove.new(invoice_id) # invalidate created invoice
60
+ MonoMerchant::Invoice::Finalize.new(invoice_id, amount, items: []) # finalize holding amount with possibility to modify it
61
+ MonoMerchant::Invoice::FiscalChecks.new(invoice_id) # get fiscal check(s)
62
+
63
+ # QR
64
+ MonoMerchant::Qr::List.new # list QR cash-boxes
65
+ MonoMerchant::Qr::Details.new(qr_id) # get QR details
66
+ MonoMerchant::Qr::ResetAmount.new(qr_id) # reset/remove payment
67
+
68
+ # Submerchant
69
+ MonoMerchant::Submerchant::List.new # get list of submerchants
70
+
71
+ # Wallet
72
+ MonoMerchant::Wallet::List.new(wallet_id)
73
+ MonoMerchant::Wallet::Card.new(card_token) # delete card token
74
+ MonoMerchant::Wallet::Payment.new(card_token, amount) # see other attributes directly in code
75
+
76
+ # Merchant
77
+ MonoMerchant::Details.new # basic info about merchant: Id, Name, edrpou
78
+ MonoMerchant::Statement.new(from: 1649329978, to: 1649329978) # get bank account statement for defined period. from & to are utc unix timestamps
49
79
 
50
80
  ```
51
81
 
82
+ ## TODO
83
+
84
+ - [credentials payment](https://api.monobank.ua/docs/acquiring.html#/paths/~1api~1merchant~1invoice~1payment-direct/post)
85
+ - better Readme
86
+ - minor todos (noticed directly in code)
87
+
52
88
  ## Development
53
89
 
54
90
  After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -0,0 +1,15 @@
1
+ module MonoMerchant
2
+ class Details < ApiRequest
3
+
4
+ def initialize
5
+ super(type: :get)
6
+ end
7
+
8
+ protected
9
+
10
+ def data
11
+ %w[merchantId merchantName edrpou]
12
+ end
13
+
14
+ end
15
+ end
@@ -8,6 +8,7 @@ module MonoMerchant
8
8
 
9
9
  def initialize(invoice_id, amount, ext_ref: nil, items: [])
10
10
  @invoice_id, @amount, @items, @ext_ref = invoice_id, amount, items, ext_ref
11
+ super()
11
12
  end
12
13
 
13
14
  protected
@@ -16,17 +16,17 @@ module MonoMerchant
16
16
  # @param [Array] items - cart content
17
17
  # @param [String] redirect_url - url where user will be redirected after payment
18
18
  # @param [String] webhook_url - url where Monobank will send webhook after payment
19
- def initialize(amount, destination: nil, reference: nil, currency: DEFAULT_CURRENCY, hold: false, email: nil, items: [], redirect_url: nil, webhook_url: nil, comment: nil)
19
+ def initialize(amount, currency: DEFAULT_CURRENCY, items: [], hold: false, reference: nil, redirect_url: nil, webhook_url: nil, email: nil, destination: nil, comment: nil)
20
20
  @amount = convert_to_cents(amount)
21
21
  @destination = destination
22
22
  @reference = reference
23
23
  @comment = comment
24
- @currency = Money::Currency.new(currency)
25
- @payment_type = hold ? 'hold' : 'debit'
26
24
  @customer_emails = [email] if email
27
- @items = items.map { |i| Item.new(i).to_hash.presence }
28
25
  @redirect_url = redirect_url
29
26
  @webhook_url = webhook_url
27
+ @currency = Money::Currency.new(currency)
28
+ @items = items.map { |i| Item.new(i).to_hash.presence }
29
+ @payment_type = hold ? 'hold' : 'debit'
30
30
  super()
31
31
  end
32
32
 
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MonoMerchant
4
+ module Invoice
5
+
6
+ class FiscalChecks < PaymentInfo
7
+
8
+ protected
9
+
10
+ # todo: objectify array of checks?
11
+ # https://api.monobank.ua/docs/acquiring.html#/paths/~1api~1merchant~1invoice~1fiscal-checks?invoiceId={invoiceId}/get
12
+ def data
13
+ %w[checks]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -8,6 +8,7 @@ module MonoMerchant
8
8
 
9
9
  def initialize(invoice_id)
10
10
  @invoice_id = invoice_id
11
+ super()
11
12
  end
12
13
 
13
14
  protected
@@ -0,0 +1,24 @@
1
+ module MonoMerchant
2
+ module Qr
3
+
4
+ # Get info about QR paydesk
5
+ class Details < ApiRequest
6
+
7
+ attr_reader :qr_id
8
+
9
+ def initialize(qr_id)
10
+ @qr_id = qr_id
11
+ super(type: :get)
12
+ end
13
+
14
+ protected
15
+ def params
16
+ { qrId: qr_id }
17
+ end
18
+
19
+ def data
20
+ %w[shortQrId invoiceId amount ccy]
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,17 @@
1
+ module MonoMerchant
2
+ module Qr
3
+
4
+ # Get list of QR paydesks
5
+ class List < ApiRequest
6
+
7
+ def initialize
8
+ super(type: :get)
9
+ end
10
+
11
+ # todo: make array of objects from response list (shortQrId, qrId, amountType, pageUrl)?
12
+ def data
13
+ %w[list]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ module MonoMerchant
2
+ module Qr
3
+
4
+ # Reset/remove payment
5
+ class ResetAmount < ApiRequest
6
+
7
+ attr_reader :qr_id
8
+
9
+ def initialize(qr_id)
10
+ @qr_id = qr_id
11
+ super()
12
+ end
13
+
14
+ protected
15
+
16
+ def body
17
+ { qrId: qr_id }
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ module MonoMerchant
2
+ class Statement < ApiRequest
3
+
4
+ attr_reader :from, :to
5
+
6
+ # @param [Integer] from - utc unix timestamp
7
+ # @param [Integer] to - utc unix timestamp
8
+ def initialize(from: nil, to: nil)
9
+ @from, @to = from, to
10
+ super(type: :get)
11
+ end
12
+
13
+ protected
14
+
15
+ def params
16
+ { from: from, to: to }.compact
17
+ end
18
+
19
+ # todo: objectify data?
20
+ # https://api.monobank.ua/docs/acquiring.html#/paths/~1api~1merchant~1statement/get
21
+ def data
22
+ %w[list]
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,17 @@
1
+ module MonoMerchant
2
+ module Submerchant
3
+
4
+ # Get list of sub-merchants
5
+ class List < ApiRequest
6
+
7
+ def initialize
8
+ super(type: :get)
9
+ end
10
+
11
+ # todo: make array of objects from response list (code, edrpou, iban)?
12
+ def data
13
+ %w[list]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MonoMerchant
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -0,0 +1,23 @@
1
+ module MonoMerchant
2
+ module Wallet
3
+
4
+ # Remove card token
5
+ class Card < ApiRequest
6
+
7
+ attr_reader :card_token
8
+
9
+ def initialize(card_token)
10
+ @card_token = card_token
11
+ super(type: :delete)
12
+ end
13
+
14
+ protected
15
+
16
+ def body
17
+ { cardToken: card_token }
18
+ end
19
+
20
+ end
21
+ end
22
+ end
23
+
@@ -0,0 +1,31 @@
1
+ module MonoMerchant
2
+ module Wallet
3
+ class List < ApiRequest
4
+
5
+ attr_reader :wallet_id
6
+
7
+ # @param [String] wallet_id - wallet id
8
+ def initialize(wallet_id = nil)
9
+ @wallet_id = wallet_id
10
+ super(type: :get)
11
+ end
12
+
13
+ def url
14
+ "#{API_URL}/merchant/wallet/#{url_query}"
15
+ end
16
+
17
+ protected
18
+
19
+ def params
20
+ { walletId: wallet_id }.compact
21
+ end
22
+
23
+ # todo: objectify wallets?
24
+ # https://api.monobank.ua/docs/acquiring.html#/paths/~1api~1merchant~1wallet/get
25
+ def data
26
+ %w[wallet]
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,55 @@
1
+ module MonoMerchant
2
+ module Wallet
3
+
4
+ # Create payment for card token
5
+ # todo DRY it with Invoice::Create
6
+ class Payment < ApiRequest
7
+
8
+ attr_reader :card_token, :amount, :currency, :initiation_kind, :customer_emails, :items, :destination, :comment, :reference, :redirect_url, :webhook_url
9
+
10
+ def initialize(card_token, amount, currency = DEFAULT_CURRENCY, by_client: false, items: [], reference: nil, redirect_url: nil, webhook_url: nil, email: nil, destination: nil, comment: nil)
11
+ @card_token = card_token
12
+ @amount = convert_to_cents(amount)
13
+ @destination = destination
14
+ @reference = reference
15
+ @comment = comment
16
+ @customer_emails = [email] if email
17
+ @redirect_url = redirect_url
18
+ @webhook_url = webhook_url
19
+ @currency = Money::Currency.new(currency)
20
+ # todo: append barcode, uktzed, tax, discounts etc.
21
+ @items = items.map { |i| Invoice::Item.new(i).to_hash.presence }
22
+ @initiation_kind = by_client ? 'client' : 'merchant'
23
+ super()
24
+ end
25
+
26
+ protected
27
+
28
+ delegate :iso_numeric, to: :currency, prefix: true
29
+ alias_method :ccy, :currency_iso_numeric
30
+
31
+ def body
32
+ {
33
+ ccy: ccy.to_i,
34
+ amount: amount,
35
+ initiationKind: initiation_kind,
36
+ redirectUrl: redirect_url,
37
+ webHookUrl: webhook_url,
38
+ merchantPaymInfo: {
39
+ basketOrder: items.presence,
40
+ reference: reference,
41
+ comment: comment,
42
+ destination: destination,
43
+ customerEmails: customer_emails
44
+ }.compact
45
+ }
46
+ end
47
+
48
+ def data
49
+ %w[invoiceId tdsUrl status failureReason amount ccy createdDate modifiedDate]
50
+ end
51
+
52
+ end
53
+ end
54
+ end
55
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mono-merchant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - okliv
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-24 00:00:00.000000000 Z
11
+ date: 2024-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -99,15 +99,25 @@ files:
99
99
  - Rakefile
100
100
  - lib/mono-merchant.rb
101
101
  - lib/mono-merchant/api_request.rb
102
+ - lib/mono-merchant/details.rb
102
103
  - lib/mono-merchant/invoice/cancel.rb
103
104
  - lib/mono-merchant/invoice/create.rb
104
105
  - lib/mono-merchant/invoice/finalize.rb
106
+ - lib/mono-merchant/invoice/fiscal_checks.rb
105
107
  - lib/mono-merchant/invoice/item.rb
106
108
  - lib/mono-merchant/invoice/payment_info.rb
107
109
  - lib/mono-merchant/invoice/remove.rb
108
110
  - lib/mono-merchant/invoice/status.rb
109
111
  - lib/mono-merchant/pubkey.rb
112
+ - lib/mono-merchant/qr/details.rb
113
+ - lib/mono-merchant/qr/list.rb
114
+ - lib/mono-merchant/qr/reset_amount.rb
115
+ - lib/mono-merchant/statement.rb
116
+ - lib/mono-merchant/submerchant/list.rb
110
117
  - lib/mono-merchant/version.rb
118
+ - lib/mono-merchant/wallet/card.rb
119
+ - lib/mono-merchant/wallet/list.rb
120
+ - lib/mono-merchant/wallet/payment.rb
111
121
  - lib/mono-merchant/webhook_validator.rb
112
122
  - mono-merchant.gemspec
113
123
  homepage: https://github.com/okliv/mono-merchant