smartpay 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +6 -2
- data/lib/smartpay/api.rb +19 -5
- data/lib/smartpay/client.rb +38 -7
- data/lib/smartpay/requests/checkout_session.rb +24 -19
- data/lib/smartpay/requests/payment.rb +1 -0
- data/lib/smartpay/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 446eb4c4c827e38b97a57ecbceee0b43a932d53cdb11a6bd22215250c5897583
|
4
|
+
data.tar.gz: a6e513f1be63893df11793c7b74c66cea109e715423c2f0fbbb25c8869ed5089
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a274f5a5917cb8bef8bdabe0360f284436be5bc8f8052f7db9b6233eb6f7a18cfd798f4d1a63bd3d0a57e8e8cae1defc8f477e7e7bfe388531f13384e59245ce
|
7
|
+
data.tar.gz: 58c21a2d55b9fac38a560ac032d6af7f27f8bc2a61a6477fd1dcd2e884b2791d20f734c79dcd7be8c2b5b49f32eafec8f26604438cc55bf84313a46e5d864a3d
|
data/Gemfile
CHANGED
@@ -5,10 +5,14 @@ source "https://rubygems.org"
|
|
5
5
|
# Specify your gem's dependencies in smartpay.gemspec
|
6
6
|
gemspec
|
7
7
|
|
8
|
+
gem "rest-client", "~> 2.1.0"
|
9
|
+
|
10
|
+
gem "securerandom", "~> 0.2.0"
|
11
|
+
|
12
|
+
gem "retries", "~> 0.0.5"
|
13
|
+
|
8
14
|
gem "rake", "~> 13.0"
|
9
15
|
|
10
16
|
gem "rspec", "~> 3.0"
|
11
17
|
|
12
18
|
gem "rubocop", "~> 1.7"
|
13
|
-
|
14
|
-
gem "thin"
|
data/lib/smartpay/api.rb
CHANGED
@@ -5,21 +5,27 @@ module Smartpay
|
|
5
5
|
class << self
|
6
6
|
def create_checkout_session(payload)
|
7
7
|
Responses::CheckoutSession.new(
|
8
|
-
Client.post("/checkout-sessions", Requests::CheckoutSession.new(payload).as_hash)
|
8
|
+
Client.post("/checkout-sessions", params: {}, payload: Requests::CheckoutSession.new(payload).as_hash)
|
9
9
|
)
|
10
10
|
end
|
11
11
|
|
12
12
|
def get_orders(page_token: nil, max_results: nil, expand: '' )
|
13
|
-
Responses::Base.new(Client.get("/orders", { pageToken: page_token, maxResults: max_results, expand: expand }))
|
13
|
+
Responses::Base.new(Client.get("/orders", params: { pageToken: page_token, maxResults: max_results, expand: expand }))
|
14
14
|
end
|
15
15
|
|
16
16
|
def get_order(id, expand: '' )
|
17
|
-
Responses::Base.new(Client.get("/orders/%s" % id, { expand: expand }))
|
17
|
+
Responses::Base.new(Client.get("/orders/%s" % id, params: { expand: expand }))
|
18
|
+
end
|
19
|
+
|
20
|
+
def cancel_order(id)
|
21
|
+
Responses::Base.new(
|
22
|
+
Client.put("/orders/%s/cancellation" % id)
|
23
|
+
)
|
18
24
|
end
|
19
25
|
|
20
26
|
def create_payment(payload)
|
21
27
|
Responses::Base.new(
|
22
|
-
Client.post("/payments", Requests::Payment.new(payload).as_hash)
|
28
|
+
Client.post("/payments", params:{}, payload: Requests::Payment.new(payload).as_hash)
|
23
29
|
)
|
24
30
|
end
|
25
31
|
|
@@ -27,9 +33,13 @@ module Smartpay
|
|
27
33
|
create_payment(payload)
|
28
34
|
end
|
29
35
|
|
36
|
+
def get_payment(id, expand: '' )
|
37
|
+
Responses::Base.new(Client.get("/payments/%s" % id, params: { expand: expand }))
|
38
|
+
end
|
39
|
+
|
30
40
|
def create_refund(payload)
|
31
41
|
Responses::Base.new(
|
32
|
-
Client.post("/refunds", Requests::Refund.new(payload).as_hash)
|
42
|
+
Client.post("/refunds", params:{}, payload: Requests::Refund.new(payload).as_hash)
|
33
43
|
)
|
34
44
|
end
|
35
45
|
|
@@ -37,6 +47,10 @@ module Smartpay
|
|
37
47
|
create_refund(payload)
|
38
48
|
end
|
39
49
|
|
50
|
+
def get_refund(id, expand: '' )
|
51
|
+
Responses::Base.new(Client.get("/refunds/%s" % id, params: { expand: expand }))
|
52
|
+
end
|
53
|
+
|
40
54
|
end
|
41
55
|
end
|
42
56
|
end
|
data/lib/smartpay/client.rb
CHANGED
@@ -1,27 +1,54 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "rest-client"
|
4
|
+
require "retries"
|
5
|
+
require "securerandom"
|
4
6
|
|
5
7
|
module Smartpay
|
6
8
|
class Client
|
7
9
|
class << self
|
8
|
-
def get(path,
|
9
|
-
|
10
|
+
def get(path, params: {})
|
11
|
+
request_params = default_params.merge(params)
|
10
12
|
response = RestClient::Request.execute(method: :get, url: api_url(path),
|
11
|
-
headers: headers.merge(params:
|
13
|
+
headers: headers.merge(params: request_params),
|
12
14
|
timeout: timeout)
|
13
15
|
JSON.parse(response.body, symbolize_names: true)
|
14
16
|
end
|
15
17
|
|
16
|
-
def post(path, payload
|
18
|
+
def post(path, params: {}, payload: {})
|
19
|
+
request_params = default_params.merge(params)
|
20
|
+
request_payload = default_payload.merge(payload)
|
21
|
+
idempotency_key = nonce
|
22
|
+
response = with_retries(:max_tries => 1, :rescue => [RestClient::BadRequest, RestClient::BadGateway, RestClient::ServiceUnavailable, RestClient::GatewayTimeout]) do
|
23
|
+
RestClient::Request.execute(method: :post, url: api_url(path),
|
24
|
+
params: request_params,
|
25
|
+
headers: headers.merge({Idempotency_Key: idempotency_key}).merge(params: request_params),
|
26
|
+
timeout: timeout,
|
27
|
+
payload: request_payload.to_json)
|
28
|
+
end
|
29
|
+
JSON.parse(response.body, symbolize_names: true)
|
30
|
+
end
|
31
|
+
|
32
|
+
def put(path, params: {}, payload: {})
|
33
|
+
request_params = default_params.merge(params).merge({'Idempotency-Key': nonce})
|
17
34
|
request_payload = default_payload.merge(payload)
|
18
|
-
|
19
|
-
|
35
|
+
idempotency_key = nonce
|
36
|
+
response = with_retries(:max_tries => 1, :rescue => [RestClient::InternalServerError, RestClient::BadGateway, RestClient::ServiceUnavailable, RestClient::GatewayTimeout]) do
|
37
|
+
RestClient::Request.execute(method: :put, url: api_url(path),
|
38
|
+
params: request_params,
|
39
|
+
headers: headers.merge({Idempotency_Key: idempotency_key}).merge(params: request_params),
|
40
|
+
timeout: timeout,
|
41
|
+
payload: request_payload.to_json)
|
42
|
+
end
|
20
43
|
JSON.parse(response.body, symbolize_names: true)
|
21
44
|
end
|
22
45
|
|
23
46
|
private
|
24
47
|
|
48
|
+
def nonce
|
49
|
+
SecureRandom.hex
|
50
|
+
end
|
51
|
+
|
25
52
|
def api_url(path)
|
26
53
|
"#{Smartpay.configuration.api_url}#{path}"
|
27
54
|
end
|
@@ -42,12 +69,16 @@ module Smartpay
|
|
42
69
|
Smartpay.configuration.secret_key
|
43
70
|
end
|
44
71
|
|
45
|
-
def
|
72
|
+
def default_params
|
46
73
|
{
|
47
74
|
'dev-lang': :ruby,
|
48
75
|
'sdk-version': Smartpay::VERSION
|
49
76
|
}.freeze
|
50
77
|
end
|
78
|
+
|
79
|
+
def default_payload
|
80
|
+
{}.freeze
|
81
|
+
end
|
51
82
|
end
|
52
83
|
end
|
53
84
|
end
|
@@ -6,6 +6,7 @@ module Smartpay
|
|
6
6
|
attr_accessor :payload
|
7
7
|
|
8
8
|
REQUIREMENT_KEY_NAME = [:successUrl, :cancelUrl, :customer, :currency, :items].freeze
|
9
|
+
LINE_ITEM_KINDS = %w[product tax discount].freeze
|
9
10
|
CAN_FALLBACK_KEYS = [:customer].freeze
|
10
11
|
|
11
12
|
def initialize(raw_payload)
|
@@ -32,11 +33,8 @@ module Smartpay
|
|
32
33
|
shipping_info[:feeCurrency] = payload.dig(:currency)
|
33
34
|
end
|
34
35
|
|
35
|
-
|
36
|
-
|
37
|
-
{
|
36
|
+
normalized = {
|
38
37
|
customerInfo: normalize_customer_info(payload.dig(:customerInfo) || payload.dig(:customer) || {}),
|
39
|
-
amount: total_amount,
|
40
38
|
captureMethod: payload.dig(:captureMethod),
|
41
39
|
currency: payload.dig(:currency),
|
42
40
|
description: payload.dig(:description),
|
@@ -47,6 +45,10 @@ module Smartpay
|
|
47
45
|
successUrl: payload.dig(:successUrl),
|
48
46
|
cancelUrl: payload.dig(:cancelUrl),
|
49
47
|
}
|
48
|
+
|
49
|
+
normalized[:amount] = get_total_amount(normalized)
|
50
|
+
|
51
|
+
return normalized
|
50
52
|
end
|
51
53
|
|
52
54
|
def normalize_customer_info(info)
|
@@ -111,29 +113,32 @@ module Smartpay
|
|
111
113
|
productDescription: line_item.dig(:productDescription),
|
112
114
|
metadata: line_item.dig(:metadata),
|
113
115
|
productMetadata: line_item.dig(:productMetadata),
|
114
|
-
priceMetadata: line_item.dig(:priceMetadata)
|
116
|
+
priceMetadata: line_item.dig(:priceMetadata),
|
117
|
+
kind: LINE_ITEM_KINDS.include?(line_item.dig(:kind)) ? line_item.dig(:kind) : nil
|
115
118
|
}
|
116
119
|
end
|
117
120
|
end
|
118
121
|
|
122
|
+
def get_total_amount(raw_payload = nil)
|
123
|
+
total_amount = raw_payload.dig(:amount) || raw_payload.dig("amount")
|
124
|
+
return total_amount if total_amount
|
119
125
|
|
120
|
-
|
121
|
-
total_amount = payload.dig(:amount) || payload.dig('amount')
|
126
|
+
items = raw_payload.dig(:items)
|
122
127
|
|
123
|
-
if
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
shipping_fee = payload.dig(:shippingInfo, :feeAmount) ||
|
131
|
-
payload.dig(:shippingInfo, 'feeAmount') ||
|
132
|
-
0
|
133
|
-
total_amount = shipping_fee + (total_amount || 0)
|
128
|
+
if !items.nil? && items.count.positive?
|
129
|
+
total_amount = items.inject(0) { |sum, item|
|
130
|
+
amount = item[:amount] || item["amount"] || 0
|
131
|
+
amount = -amount if item[:kind] == "discount"
|
132
|
+
sum + amount
|
133
|
+
}
|
134
134
|
end
|
135
135
|
|
136
|
-
|
136
|
+
shipping_fee = raw_payload.dig(:shippingInfo, :feeAmount) ||
|
137
|
+
raw_payload.dig(:shippingInfo, "feeAmount") ||
|
138
|
+
0
|
139
|
+
total_amount += shipping_fee
|
140
|
+
|
141
|
+
return total_amount
|
137
142
|
end
|
138
143
|
end
|
139
144
|
end
|
@@ -30,6 +30,7 @@ module Smartpay
|
|
30
30
|
amount: payload.dig(:amount),
|
31
31
|
currency: payload.dig(:currency),
|
32
32
|
reference: payload.dig(:reference),
|
33
|
+
cancelRemainder: payload.dig(:cancel_remainder),
|
33
34
|
description: payload.dig(:description),
|
34
35
|
metadata: payload.dig(:metadata) || {},
|
35
36
|
}
|
data/lib/smartpay/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smartpay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Smartpay
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -38,7 +38,7 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.0'
|
41
|
-
description:
|
41
|
+
description:
|
42
42
|
email:
|
43
43
|
- uxe@smartpay.co
|
44
44
|
executables: []
|
@@ -78,7 +78,7 @@ metadata:
|
|
78
78
|
homepage_uri: https://smartpay.co
|
79
79
|
source_code_uri: https://github.com/smartpay-co/sdk-ruby
|
80
80
|
changelog_uri: https://github.com/smartpay-co/sdk-ruby/blob/main/CHANGELOG.md
|
81
|
-
post_install_message:
|
81
|
+
post_install_message:
|
82
82
|
rdoc_options: []
|
83
83
|
require_paths:
|
84
84
|
- lib
|
@@ -93,8 +93,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '0'
|
95
95
|
requirements: []
|
96
|
-
rubygems_version: 3.
|
97
|
-
signing_key:
|
96
|
+
rubygems_version: 3.0.3.1
|
97
|
+
signing_key:
|
98
98
|
specification_version: 4
|
99
99
|
summary: The Smartpay Ruby SDK offers easy access to Smartpay API from applications
|
100
100
|
written in Ruby.
|