smartpay 0.3.0 → 0.4.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 +2 -0
- data/lib/generators/smartpay/templates/controller.rb +2 -2
- data/lib/smartpay/api.rb +29 -0
- data/lib/smartpay/client.rb +8 -0
- data/lib/smartpay/requests/checkout_session.rb +27 -7
- data/lib/smartpay/requests/payment.rb +39 -0
- data/lib/smartpay/requests/refund.rb +40 -0
- data/lib/smartpay/responses/base.rb +21 -0
- data/lib/smartpay/responses/checkout_session.rb +8 -18
- data/lib/smartpay/version.rb +1 -1
- data/lib/smartpay.rb +6 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 794e3de526f66e64a6c05638932f2c3c8a3cb7bcea3708f8df266ad9f02e7d4a
|
4
|
+
data.tar.gz: f04b6f575b3be6e2320336a343fa9db842560654c5c7076d6b7bf07b2fcdab70
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54c1bd5ae7e587b67409e4eb9eed4c50d36690f09958e9003f3b9e9aadf927c429a41dc8c7b9fb18581f5594653f15fa0b3271896486f1276b07c1dd022f8910
|
7
|
+
data.tar.gz: 7cefc78c6463a95317d3f87abfc3e9ccc83cf5aeac7f2efed30194fba42faa2069e8e35ce695720ed9a83cdb523cec27a494b0611d51cee90d92bd62ecefd0a9
|
data/Gemfile
CHANGED
@@ -36,8 +36,8 @@ class SmartpaysController < ApplicationController
|
|
36
36
|
country: "JP"
|
37
37
|
},
|
38
38
|
reference: "order_ref_1234567",
|
39
|
-
|
40
|
-
|
39
|
+
successUrl: "https://docs.smartpay.co/example-pages/checkout-successful",
|
40
|
+
cancelUrl: "https://docs.smartpay.co/example-pages/checkout-canceled",
|
41
41
|
test: true
|
42
42
|
})
|
43
43
|
redirect_to session.redirect_url
|
data/lib/smartpay/api.rb
CHANGED
@@ -8,6 +8,35 @@ module Smartpay
|
|
8
8
|
Client.post("/checkout-sessions", Requests::CheckoutSession.new(payload).as_hash)
|
9
9
|
)
|
10
10
|
end
|
11
|
+
|
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 }))
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_order(id, expand: '' )
|
17
|
+
Responses::Base.new(Client.get("/orders/%s" % id, { expand: expand }))
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_payment(payload)
|
21
|
+
Responses::Base.new(
|
22
|
+
Client.post("/payments", Requests::Payment.new(payload).as_hash)
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
def capture(payload)
|
27
|
+
create_payment(payload)
|
28
|
+
end
|
29
|
+
|
30
|
+
def create_refund(payload)
|
31
|
+
Responses::Base.new(
|
32
|
+
Client.post("/refunds", Requests::Refund.new(payload).as_hash)
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
def refund(payload)
|
37
|
+
create_refund(payload)
|
38
|
+
end
|
39
|
+
|
11
40
|
end
|
12
41
|
end
|
13
42
|
end
|
data/lib/smartpay/client.rb
CHANGED
@@ -5,6 +5,14 @@ require "rest-client"
|
|
5
5
|
module Smartpay
|
6
6
|
class Client
|
7
7
|
class << self
|
8
|
+
def get(path, payload = {})
|
9
|
+
request_payload = default_payload.merge(payload)
|
10
|
+
response = RestClient::Request.execute(method: :get, url: api_url(path),
|
11
|
+
headers: headers.merge(params: request_payload),
|
12
|
+
timeout: timeout)
|
13
|
+
JSON.parse(response.body, symbolize_names: true)
|
14
|
+
end
|
15
|
+
|
8
16
|
def post(path, payload = {})
|
9
17
|
request_payload = default_payload.merge(payload)
|
10
18
|
response = RestClient::Request.execute(method: :post, url: api_url(path), headers: headers, timeout: timeout,
|
@@ -5,8 +5,8 @@ module Smartpay
|
|
5
5
|
class CheckoutSession
|
6
6
|
attr_accessor :payload
|
7
7
|
|
8
|
-
REQUIREMENT_KEY_NAME = [:successUrl, :cancelUrl, :
|
9
|
-
CAN_FALLBACK_KEYS = [:
|
8
|
+
REQUIREMENT_KEY_NAME = [:successUrl, :cancelUrl, :customer, :currency, :items].freeze
|
9
|
+
CAN_FALLBACK_KEYS = [:customer].freeze
|
10
10
|
|
11
11
|
def initialize(raw_payload)
|
12
12
|
@payload = raw_payload.transform_keys(&:to_sym)
|
@@ -32,9 +32,11 @@ module Smartpay
|
|
32
32
|
shipping_info[:feeCurrency] = payload.dig(:currency)
|
33
33
|
end
|
34
34
|
|
35
|
+
total_amount = get_total_amount
|
36
|
+
|
35
37
|
{
|
36
38
|
customerInfo: normalize_customer_info(payload.dig(:customerInfo) || payload.dig(:customer) || {}),
|
37
|
-
amount:
|
39
|
+
amount: total_amount,
|
38
40
|
captureMethod: payload.dig(:captureMethod),
|
39
41
|
currency: payload.dig(:currency),
|
40
42
|
description: payload.dig(:description),
|
@@ -42,9 +44,8 @@ module Smartpay
|
|
42
44
|
items: normalize_items(payload.dig(:items)),
|
43
45
|
metadata: payload.dig(:metadata) || {},
|
44
46
|
reference: payload.dig(:reference),
|
45
|
-
successUrl: payload.dig(:
|
46
|
-
cancelUrl: payload.dig(:
|
47
|
-
test: payload.dig(:test) || false
|
47
|
+
successUrl: payload.dig(:successUrl),
|
48
|
+
cancelUrl: payload.dig(:cancelUrl),
|
48
49
|
}
|
49
50
|
end
|
50
51
|
|
@@ -97,7 +98,6 @@ module Smartpay
|
|
97
98
|
quantity: line_item.dig(:quantity),
|
98
99
|
label: line_item.dig(:label),
|
99
100
|
name: line_item.dig(:name),
|
100
|
-
description: line_item.dig(:description),
|
101
101
|
amount: line_item.dig(:amount),
|
102
102
|
currency: line_item.dig(:currency),
|
103
103
|
brand: line_item.dig(:brand),
|
@@ -115,6 +115,26 @@ module Smartpay
|
|
115
115
|
}
|
116
116
|
end
|
117
117
|
end
|
118
|
+
|
119
|
+
|
120
|
+
def get_total_amount
|
121
|
+
total_amount = payload.dig(:amount) || payload.dig('amount')
|
122
|
+
|
123
|
+
if total_amount.nil?
|
124
|
+
items = payload.dig(:items)
|
125
|
+
|
126
|
+
if !items.nil? && items.count > 0
|
127
|
+
total_amount = items.inject(0) { |sum, item| sum + (item[:amount] || item['amount'] || 0) }
|
128
|
+
end
|
129
|
+
|
130
|
+
shipping_fee = payload.dig(:shippingInfo, :feeAmount) ||
|
131
|
+
payload.dig(:shippingInfo, 'feeAmount') ||
|
132
|
+
0
|
133
|
+
total_amount = shipping_fee + (total_amount || 0)
|
134
|
+
end
|
135
|
+
|
136
|
+
total_amount
|
137
|
+
end
|
118
138
|
end
|
119
139
|
end
|
120
140
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Smartpay
|
4
|
+
module Requests
|
5
|
+
class Payment
|
6
|
+
attr_accessor :payload
|
7
|
+
|
8
|
+
REQUIREMENT_KEY_NAME = [:order, :amount, :currency].freeze
|
9
|
+
|
10
|
+
def initialize(raw_payload)
|
11
|
+
@payload = raw_payload.transform_keys(&:to_sym)
|
12
|
+
end
|
13
|
+
|
14
|
+
def as_hash
|
15
|
+
check_requirement!
|
16
|
+
normalize_payload
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def check_requirement!
|
22
|
+
REQUIREMENT_KEY_NAME.each do |key_name|
|
23
|
+
raise Errors::InvalidRequestPayloadError, key_name unless payload.include?(key_name)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def normalize_payload
|
28
|
+
{
|
29
|
+
order: payload.dig(:order),
|
30
|
+
amount: payload.dig(:amount),
|
31
|
+
currency: payload.dig(:currency),
|
32
|
+
reference: payload.dig(:reference),
|
33
|
+
description: payload.dig(:description),
|
34
|
+
metadata: payload.dig(:metadata) || {},
|
35
|
+
}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Smartpay
|
4
|
+
module Requests
|
5
|
+
class Refund
|
6
|
+
attr_accessor :payload
|
7
|
+
|
8
|
+
REQUIREMENT_KEY_NAME = [:payment, :amount, :currency].freeze
|
9
|
+
|
10
|
+
def initialize(raw_payload)
|
11
|
+
@payload = raw_payload.transform_keys(&:to_sym)
|
12
|
+
end
|
13
|
+
|
14
|
+
def as_hash
|
15
|
+
check_requirement!
|
16
|
+
normalize_payload
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def check_requirement!
|
22
|
+
REQUIREMENT_KEY_NAME.each do |key_name|
|
23
|
+
raise Errors::InvalidRequestPayloadError, key_name unless payload.include?(key_name)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def normalize_payload
|
28
|
+
{
|
29
|
+
payment: payload.dig(:payment),
|
30
|
+
amount: payload.dig(:amount),
|
31
|
+
currency: payload.dig(:currency),
|
32
|
+
reason: payload.dig(:reason),
|
33
|
+
reference: payload.dig(:reference),
|
34
|
+
description: payload.dig(:description),
|
35
|
+
metadata: payload.dig(:metadata) || {},
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Smartpay
|
4
|
+
module Responses
|
5
|
+
class Base
|
6
|
+
attr_reader :response
|
7
|
+
|
8
|
+
def initialize(response)
|
9
|
+
@response = response
|
10
|
+
end
|
11
|
+
|
12
|
+
def as_hash
|
13
|
+
@response
|
14
|
+
end
|
15
|
+
|
16
|
+
def as_json
|
17
|
+
@response.to_json
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -2,28 +2,18 @@
|
|
2
2
|
|
3
3
|
module Smartpay
|
4
4
|
module Responses
|
5
|
-
class CheckoutSession
|
6
|
-
attr_reader :response
|
7
|
-
|
8
|
-
def initialize(response)
|
9
|
-
@response = response
|
10
|
-
end
|
5
|
+
class CheckoutSession < Base
|
11
6
|
|
12
7
|
def redirect_url(options = {})
|
13
|
-
url =
|
14
|
-
promotion_code = options[:promotion_code] || response[:metadata][:__promotion_code__] || nil
|
15
|
-
qs = "session-id=#{URI.encode_www_form_component(response[:id])}&public-key=#{URI.encode_www_form_component(public_key)}"
|
16
|
-
qs = "#{qs}&promotion-code=#{URI.encode_www_form_component(promotion_code)}" if promotion_code
|
17
|
-
|
18
|
-
"#{url}?#{qs}"
|
19
|
-
end
|
8
|
+
url = response[:url]
|
20
9
|
|
21
|
-
|
22
|
-
|
23
|
-
end
|
10
|
+
if options && options[:promotionCode]
|
11
|
+
qs = "?promotion-code=#{options[:promotionCode]}"
|
24
12
|
|
25
|
-
|
26
|
-
|
13
|
+
return "#{url}#{qs}"
|
14
|
+
end
|
15
|
+
|
16
|
+
url
|
27
17
|
end
|
28
18
|
|
29
19
|
private
|
data/lib/smartpay/version.rb
CHANGED
data/lib/smartpay.rb
CHANGED
@@ -8,9 +8,15 @@ require_relative "smartpay/client"
|
|
8
8
|
require_relative "smartpay/api"
|
9
9
|
require_relative "smartpay/errors/invalid_request_payload_error"
|
10
10
|
require_relative "smartpay/requests/checkout_session"
|
11
|
+
require_relative "smartpay/requests/payment"
|
12
|
+
require_relative "smartpay/requests/refund"
|
13
|
+
require_relative "smartpay/responses/base"
|
11
14
|
require_relative "smartpay/responses/checkout_session"
|
12
15
|
|
13
16
|
module Smartpay
|
17
|
+
REJECT_REQUEST_BY_CUSTOMER = 'requested_by_customer'
|
18
|
+
REJECT_FRAUDULENT = 'fraudulent'
|
19
|
+
|
14
20
|
class << self
|
15
21
|
attr_accessor :configuration
|
16
22
|
|
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.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Smartpay
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -66,6 +66,9 @@ files:
|
|
66
66
|
- lib/smartpay/configuration.rb
|
67
67
|
- lib/smartpay/errors/invalid_request_payload_error.rb
|
68
68
|
- lib/smartpay/requests/checkout_session.rb
|
69
|
+
- lib/smartpay/requests/payment.rb
|
70
|
+
- lib/smartpay/requests/refund.rb
|
71
|
+
- lib/smartpay/responses/base.rb
|
69
72
|
- lib/smartpay/responses/checkout_session.rb
|
70
73
|
- lib/smartpay/version.rb
|
71
74
|
homepage: https://smartpay.co
|