payu_api 0.1.0 → 0.1.1
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/.rubocop.yml +7 -0
- data/README.md +19 -5
- data/lib/payu_api.rb +10 -0
- data/lib/payu_api/api_request.rb +27 -0
- data/lib/payu_api/auth_request.rb +31 -0
- data/lib/payu_api/order.rb +10 -10
- data/lib/payu_api/request.rb +26 -12
- data/lib/payu_api/response.rb +11 -5
- data/lib/payu_api/responses/auth_response.rb +15 -0
- data/lib/payu_api/version.rb +1 -1
- data/payu_api.gemspec +3 -0
- metadata +47 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f03e3bb9b1d9013eabac126fb67bca990a2c81ee
|
4
|
+
data.tar.gz: 4694854d9e6ca75a321db2d8149803e44f415874
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2c394eeb1ab1d44aac453984ffda95e2085a0f9a353d5180db20633fe3b1f6cb880b758384da8aa0532b291db9a16010b9aa01c65233fd5336a094220ba4af7
|
7
|
+
data.tar.gz: d935e7aa2f10f1406ca61c808b38ea36b257acf2dd20d83375bb82f057abc6a0271abf4c7fdb267e5f81867d80dc492fbb283a8b9e12c3ff86fc914a2bc53c2c
|
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# PayU REST API
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/payu_api)
|
4
|
+
[](https://travis-ci.org/busfor/payu_api)
|
5
|
+
|
3
6
|
Ruby wrapper for PayU REST API.
|
4
7
|
|
5
8
|
## Installation
|
@@ -20,14 +23,25 @@ Or install it yourself as:
|
|
20
23
|
|
21
24
|
## Usage
|
22
25
|
|
26
|
+
Get OAuth token:
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
response = PayuAPI.authorize(pos_id: '300046', key: '098f6b...', sandbox: true)
|
30
|
+
|
31
|
+
response.success?
|
32
|
+
# => true
|
33
|
+
|
34
|
+
response.auth_token
|
35
|
+
# => "c8d4b7..."
|
36
|
+
|
37
|
+
response.expires_in
|
38
|
+
# => 43199
|
39
|
+
```
|
40
|
+
|
23
41
|
Create client:
|
24
42
|
|
25
43
|
```ruby
|
26
|
-
client = PayuAPI::Client.new(
|
27
|
-
pos_id: '300046',
|
28
|
-
auth_token: 'c8d4b7ac61758704f38ed5564d8c0ae0',
|
29
|
-
sandbox: true
|
30
|
-
)
|
44
|
+
client = PayuAPI::Client.new(pos_id: '300046', auth_token: 'c8d4b7...', sandbox: true)
|
31
45
|
```
|
32
46
|
|
33
47
|
Creating a new order:
|
data/lib/payu_api.rb
CHANGED
@@ -5,9 +5,19 @@ require 'dry-initializer'
|
|
5
5
|
require 'payu_api/version'
|
6
6
|
require 'payu_api/errors'
|
7
7
|
require 'payu_api/request'
|
8
|
+
require 'payu_api/api_request'
|
9
|
+
require 'payu_api/auth_request'
|
8
10
|
require 'payu_api/response'
|
11
|
+
require 'payu_api/responses/auth_response'
|
9
12
|
require 'payu_api/responses/get_response'
|
10
13
|
require 'payu_api/responses/create_response'
|
11
14
|
require 'payu_api/responses/refund_response'
|
12
15
|
require 'payu_api/order'
|
13
16
|
require 'payu_api/client'
|
17
|
+
|
18
|
+
module PayuAPI
|
19
|
+
def self.authorize(pos_id:, key:, sandbox: false)
|
20
|
+
request = AuthRequest.new(pos_id: pos_id, key: key, sandbox: sandbox)
|
21
|
+
AuthResponse.new(http_response: request.call)
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module PayuAPI
|
2
|
+
class ApiRequest < Request
|
3
|
+
extend Dry::Initializer::Mixin
|
4
|
+
|
5
|
+
param :client
|
6
|
+
param :method
|
7
|
+
param :url
|
8
|
+
param :params, default: proc { nil }
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def sandbox?
|
13
|
+
client.sandbox
|
14
|
+
end
|
15
|
+
|
16
|
+
def headers
|
17
|
+
{
|
18
|
+
'Content-Type' => 'application/json',
|
19
|
+
'Authorization' => "Bearer #{client.auth_token}"
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def body
|
24
|
+
JSON.generate(params) if params
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module PayuAPI
|
2
|
+
class AuthRequest < Request
|
3
|
+
extend Dry::Initializer::Mixin
|
4
|
+
|
5
|
+
option :pos_id
|
6
|
+
option :key
|
7
|
+
option :sandbox, default: proc { false }
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def sandbox?
|
12
|
+
sandbox
|
13
|
+
end
|
14
|
+
|
15
|
+
def method
|
16
|
+
:POST
|
17
|
+
end
|
18
|
+
|
19
|
+
def url
|
20
|
+
'/pl/standard/user/oauth/authorize'
|
21
|
+
end
|
22
|
+
|
23
|
+
def headers
|
24
|
+
{ 'Content-Type' => 'application/x-www-form-urlencoded' }
|
25
|
+
end
|
26
|
+
|
27
|
+
def body
|
28
|
+
"grant_type=client_credentials&client_id=#{pos_id}&client_secret=#{key}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/payu_api/order.rb
CHANGED
@@ -2,16 +2,16 @@ module PayuAPI
|
|
2
2
|
class Order
|
3
3
|
class << self
|
4
4
|
def get(client:, order_id:)
|
5
|
-
request =
|
6
|
-
GetResponse.new(http_response: request.
|
5
|
+
request = ApiRequest.new(client: client, method: 'GET', url: "/api/v2_1/orders/#{order_id}")
|
6
|
+
GetResponse.new(http_response: request.call)
|
7
7
|
end
|
8
8
|
|
9
9
|
def create(client:, params:)
|
10
10
|
post_params = params.merge(
|
11
11
|
merchantPosId: client.pos_id
|
12
12
|
)
|
13
|
-
request =
|
14
|
-
CreateResponse.new(http_response: request.
|
13
|
+
request = ApiRequest.new(client, :POST, '/api/v2_1/orders', post_params)
|
14
|
+
CreateResponse.new(http_response: request.call)
|
15
15
|
end
|
16
16
|
|
17
17
|
def capture(client:, order_id:)
|
@@ -19,13 +19,13 @@ module PayuAPI
|
|
19
19
|
orderId: order_id,
|
20
20
|
orderStatus: 'COMPLETED'
|
21
21
|
}
|
22
|
-
request =
|
23
|
-
Response.new(http_response: request.
|
22
|
+
request = ApiRequest.new(client, :PUT, "/api/v2_1/orders/#{order_id}/status", params)
|
23
|
+
Response.new(http_response: request.call)
|
24
24
|
end
|
25
25
|
|
26
26
|
def cancel(client:, order_id:)
|
27
|
-
request =
|
28
|
-
Response.new(http_response: request.
|
27
|
+
request = ApiRequest.new(client, :DELETE, "/api/v2_1/orders/#{order_id}")
|
28
|
+
Response.new(http_response: request.call)
|
29
29
|
end
|
30
30
|
|
31
31
|
def refund(client:, order_id:, params:)
|
@@ -33,8 +33,8 @@ module PayuAPI
|
|
33
33
|
orderId: order_id,
|
34
34
|
refund: params
|
35
35
|
}
|
36
|
-
request =
|
37
|
-
RefundResponse.new(http_response: request.
|
36
|
+
request = ApiRequest.new(client, :POST, "/api/v2_1/orders/#{order_id}/refunds", post_params)
|
37
|
+
RefundResponse.new(http_response: request.call)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
data/lib/payu_api/request.rb
CHANGED
@@ -1,23 +1,17 @@
|
|
1
1
|
module PayuAPI
|
2
2
|
class Request
|
3
|
-
extend Dry::Initializer::Mixin
|
4
|
-
|
5
|
-
param :client
|
6
|
-
param :method
|
7
|
-
param :url
|
8
|
-
param :params, default: proc { nil }
|
9
|
-
|
10
3
|
API_URL = 'https://secure.payu.com/'.freeze
|
11
4
|
API_SANDBOX_URL = 'https://secure.snd.payu.com/'.freeze
|
12
5
|
|
13
6
|
# rubocop:disable Metrics/AbcSize
|
14
|
-
def
|
7
|
+
def call
|
15
8
|
connection = Faraday::Connection.new(api_url)
|
16
9
|
connection.public_send(method.to_s.downcase) do |request|
|
17
10
|
request.url url
|
18
|
-
request.
|
19
|
-
|
20
|
-
|
11
|
+
request.body = body if body
|
12
|
+
headers.each do |key, value|
|
13
|
+
request.headers[key] = value
|
14
|
+
end
|
21
15
|
end
|
22
16
|
rescue Faraday::Error => e
|
23
17
|
raise RequestError, e.message
|
@@ -26,7 +20,27 @@ module PayuAPI
|
|
26
20
|
private
|
27
21
|
|
28
22
|
def api_url
|
29
|
-
|
23
|
+
sandbox? ? API_SANDBOX_URL : API_URL
|
24
|
+
end
|
25
|
+
|
26
|
+
def sandbox?
|
27
|
+
raise NotImplementedError
|
28
|
+
end
|
29
|
+
|
30
|
+
def method
|
31
|
+
raise NotImplementedError
|
32
|
+
end
|
33
|
+
|
34
|
+
def url
|
35
|
+
raise NotImplementedError
|
36
|
+
end
|
37
|
+
|
38
|
+
def headers
|
39
|
+
{}
|
40
|
+
end
|
41
|
+
|
42
|
+
def body
|
43
|
+
nil
|
30
44
|
end
|
31
45
|
end
|
32
46
|
end
|
data/lib/payu_api/response.rb
CHANGED
@@ -16,25 +16,27 @@ module PayuAPI
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def error_code
|
19
|
+
return unless error?
|
19
20
|
body[:error] || status_code
|
20
21
|
end
|
21
22
|
|
22
23
|
def error_message
|
24
|
+
return unless error?
|
23
25
|
body[:error_description] || status_description
|
24
26
|
end
|
25
27
|
|
26
28
|
private
|
27
29
|
|
28
30
|
def http_success?
|
29
|
-
SUCCESS_HTTP_STATUSES.include?(http_status)
|
31
|
+
self.class::SUCCESS_HTTP_STATUSES.include?(http_status)
|
30
32
|
end
|
31
33
|
|
32
34
|
def http_status
|
33
|
-
http_response.status
|
35
|
+
@http_status ||= http_response.status
|
34
36
|
end
|
35
37
|
|
36
38
|
def status_success?
|
37
|
-
SUCCESS_STATUSES.include?(status_code)
|
39
|
+
self.class::SUCCESS_STATUSES.include?(status_code)
|
38
40
|
end
|
39
41
|
|
40
42
|
def status_code
|
@@ -50,13 +52,17 @@ module PayuAPI
|
|
50
52
|
end
|
51
53
|
|
52
54
|
def body
|
53
|
-
return unless
|
55
|
+
return unless raw_body
|
54
56
|
@body ||=
|
55
57
|
begin
|
56
|
-
JSON.parse(
|
58
|
+
JSON.parse(raw_body, symbolize_names: true)
|
57
59
|
rescue => e
|
58
60
|
raise InvalidResponseError, e.message
|
59
61
|
end
|
60
62
|
end
|
63
|
+
|
64
|
+
def raw_body
|
65
|
+
@raw_body ||= http_response.body
|
66
|
+
end
|
61
67
|
end
|
62
68
|
end
|
data/lib/payu_api/version.rb
CHANGED
data/payu_api.gemspec
CHANGED
@@ -25,5 +25,8 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 1.12'
|
26
26
|
spec.add_development_dependency 'rake', '~> 10.0'
|
27
27
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
28
|
+
spec.add_development_dependency 'webmock', '~> 2.1'
|
29
|
+
spec.add_development_dependency 'simplecov', '~> 0.12'
|
28
30
|
spec.add_development_dependency 'rubocop', '~> 0.42'
|
31
|
+
spec.add_development_dependency 'byebug'
|
29
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: payu_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Khrebtov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-initializer
|
@@ -80,6 +80,34 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '5.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: webmock
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.1'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.1'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simplecov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.12'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.12'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: rubocop
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +122,20 @@ dependencies:
|
|
94
122
|
- - "~>"
|
95
123
|
- !ruby/object:Gem::Version
|
96
124
|
version: '0.42'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: byebug
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
97
139
|
description: Ruby wrapper for PayU REST API
|
98
140
|
email:
|
99
141
|
- roman@alltmb.ru
|
@@ -111,11 +153,14 @@ files:
|
|
111
153
|
- bin/console
|
112
154
|
- bin/setup
|
113
155
|
- lib/payu_api.rb
|
156
|
+
- lib/payu_api/api_request.rb
|
157
|
+
- lib/payu_api/auth_request.rb
|
114
158
|
- lib/payu_api/client.rb
|
115
159
|
- lib/payu_api/errors.rb
|
116
160
|
- lib/payu_api/order.rb
|
117
161
|
- lib/payu_api/request.rb
|
118
162
|
- lib/payu_api/response.rb
|
163
|
+
- lib/payu_api/responses/auth_response.rb
|
119
164
|
- lib/payu_api/responses/create_response.rb
|
120
165
|
- lib/payu_api/responses/get_response.rb
|
121
166
|
- lib/payu_api/responses/refund_response.rb
|