sbrf_merchant 0.2.0 → 1.0.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/CHANGELOG.md +5 -0
- data/README.md +50 -27
- data/lib/sbrf_merchant/api/action.rb +6 -6
- data/lib/sbrf_merchant/order.rb +84 -0
- data/lib/sbrf_merchant/response/order_status.rb +0 -1
- data/lib/sbrf_merchant/version.rb +1 -1
- data/lib/sbrf_merchant.rb +1 -1
- data/sbrf_merchant.gemspec +1 -1
- metadata +3 -3
- data/lib/sbrf_merchant/order/one_stage.rb +0 -69
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0a432c1d76b9afe5994042bd2f89f68e38bfc2b
|
4
|
+
data.tar.gz: 3ca43386c3ebf92e68767b471d8a8288a1bcb0ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 154e51703e5758d3917478a853143bdf42e5308856cd7a4bc4b2b7391067b537b390116496d798af41064c642717966abbfda3ab813b0d2074df24e0062a879e
|
7
|
+
data.tar.gz: ce34420640e00c27428b4f84e1e171d8ae392caffb38f1a3cdd74bf9f98347abe9ac6ee7104a10f841817c094e3a07f7996064bd04bdd2b658bc78b919ddad9a
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# Changelog 1.0.0
|
2
|
+
- Replace Order::OneStage class with Order class
|
3
|
+
- Add methods for working with two stage orders
|
4
|
+
# Changelog 0.2.0
|
5
|
+
- Replace external gems with Ruby standard library features
|
1
6
|
# Changelog 0.1.3
|
2
7
|
- Fix unexpected behaviour in Response::Base#success?
|
3
8
|
|
data/README.md
CHANGED
@@ -5,23 +5,31 @@
|
|
5
5
|
[](https://codeclimate.com/github/abstractart/sbrf_merchant)
|
7
7
|
[](https://codeclimate.com/github/abstractart/sbrf_merchant/test_coverage)
|
8
|
-
## Installation
|
9
8
|
|
10
|
-
|
9
|
+
Ruby клиент для работы с платёжным шлюзом Сбербанка.
|
10
|
+
|
11
|
+
Ключевые особенности:
|
12
|
+
- Простой (~200 LOC).
|
13
|
+
- Лёгкий (всего одна зависимость - JSON gem).
|
14
|
+
- Написан в ОО стиле без "магии". Подходит для написания unit тестов.
|
15
|
+
|
16
|
+
## Установка
|
17
|
+
|
18
|
+
### RubyGems.org ###
|
11
19
|
|
12
20
|
```sh
|
13
21
|
% gem install sbrf_merchant
|
14
22
|
```
|
15
23
|
|
16
|
-
###
|
24
|
+
### Bundler ###
|
17
25
|
|
18
26
|
```ruby
|
19
27
|
# Gemfile
|
20
28
|
gem 'sbrf_merchant'
|
21
29
|
```
|
22
30
|
|
23
|
-
##
|
24
|
-
|
31
|
+
## Конфигурация
|
32
|
+
Перед использованием необходимо проинициализировать библиотеку
|
25
33
|
```ruby
|
26
34
|
SbrfMerchant.configure do |config|
|
27
35
|
config.userName = '<Merchant Username>'
|
@@ -29,48 +37,63 @@ SbrfMerchant.configure do |config|
|
|
29
37
|
config.host = '<Sberbank API Host>'
|
30
38
|
end
|
31
39
|
```
|
32
|
-
##
|
33
|
-
[RU](https://securepayments.sberbank.ru/wiki/doku.php/integration:api:start)
|
34
|
-
|
35
|
-
|
40
|
+
## Документация
|
41
|
+
- [Site(RU)](https://securepayments.sberbank.ru/wiki/doku.php/integration:api:start)
|
42
|
+
- [PDF(RU)](http://cs.petrsu.ru/~vadim/sd2018/Merchant-Manual-SBRF.pdf)
|
43
|
+
## Использование
|
44
|
+
### Терминология
|
36
45
|
|
37
|
-
**orderId** -
|
46
|
+
- **orderId** - ID заказа в Сбербанке
|
47
|
+
- **orderNumber** - ID заказа в Вашей системе
|
38
48
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
49
|
+
### Инициализация объекта заказа
|
50
|
+
Если необходимо зарегистрировать новый заказ
|
51
|
+
```ruby
|
52
|
+
SbrfMerchant::Order.new(orderNumber: orderNumber)
|
53
|
+
```
|
54
|
+
Если необходимо поработать с уже существующим
|
55
|
+
```ruby
|
56
|
+
SbrfMerchant::Order.new(orderNumber: orderNumber, orderId: orderId)
|
57
|
+
```
|
58
|
+
### Аргументы вызываемых методов
|
59
|
+
- передаются через keywords
|
60
|
+
- имена аргументов такие же как и в документации
|
61
|
+
### Ответы API
|
62
|
+
Ответы API возвращаются как объекты. Доступ через reader(getter) методы. Также в классах есть методы упрощающие работу с телом ответа (проверка успешности запроса, определение статуса заказа)
|
63
|
+
### Примеры работы
|
64
|
+
#### Регистрация заказа
|
43
65
|
```ruby
|
44
66
|
require 'securerandom'
|
45
|
-
order = SbrfMerchant::Order
|
46
|
-
response = order.
|
67
|
+
order = SbrfMerchant::Order.new(orderNumber: SecureRandom.hex)
|
68
|
+
response = order.register_one_stage(amount: 10000, returnUrl: 'http:/localhost:3000')
|
47
69
|
|
48
|
-
order.orderId #
|
70
|
+
order.orderId # "<orderId>"
|
49
71
|
response.success? # true
|
50
72
|
response.formUrl # "https://3dsec.sberbank.ru/payment/merchants/sbersafe/payment_ru.html?mdOrder=<orderId>"
|
51
73
|
```
|
52
|
-
|
74
|
+
Для создания двустадийного заказа используте метод ```register_two_stage```
|
75
|
+
#### Статус заказа
|
53
76
|
```ruby
|
54
|
-
order = SbrfMerchant::Order::OneStage.new(orderNumber: orderNumber, orderId: orderId)
|
55
77
|
response = order.get_info
|
56
78
|
response.not_paid? # true or false
|
57
79
|
```
|
58
|
-
|
80
|
+
#### Возврат средств
|
59
81
|
```ruby
|
60
|
-
|
61
82
|
refund_amount = 1000
|
62
|
-
order = SbrfMerchant::Order::OneStage.new(orderNumber: orderNumber, orderId: orderId)
|
63
83
|
response = order.refund(refund_amount)
|
64
84
|
response.success? # true or false
|
65
85
|
```
|
66
|
-
|
86
|
+
#### Отмена заказа
|
67
87
|
```ruby
|
68
|
-
|
69
|
-
order = SbrfMerchant::Order::OneStage.new(orderNumber: orderNumber, orderId: orderId)
|
70
88
|
response = order.cancel
|
71
89
|
response.success? # true or false
|
72
|
-
|
73
|
-
|
90
|
+
```
|
91
|
+
#### Завершение заказа (двухстадийная оплата)
|
92
|
+
```ruby
|
93
|
+
complete_amount = 1000
|
94
|
+
response = order.complete(complete_amount)
|
95
|
+
response.success? # true or false
|
96
|
+
```
|
74
97
|
## Copyright
|
75
98
|
Copyright (c) 2018 Eugene Kozlov. See [LICENSE][] for details.
|
76
99
|
|
@@ -2,12 +2,12 @@ module SbrfMerchant
|
|
2
2
|
module Api
|
3
3
|
module Action
|
4
4
|
REST = '/payment/rest/'.freeze
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
REFUND_ORDER = "#{REST}refund.do".freeze
|
6
|
+
REGISTER_ORDER = "#{REST}register.do".freeze
|
7
|
+
ORDER_STATUS = "#{REST}getOrderStatusExtended.do".freeze
|
8
|
+
CANCEL_ORDER = "#{REST}reverse.do".freeze
|
9
|
+
REGISTER_PRE_AUTH = "#{REST}registerPreAuth.do".freeze
|
10
|
+
COMPLETE_ORDER = "#{REST}deposit.do".freeze
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'sbrf_merchant/api/client'
|
2
|
+
require 'sbrf_merchant/api/action'
|
3
|
+
require 'sbrf_merchant/response/base'
|
4
|
+
require 'sbrf_merchant/response/create_order'
|
5
|
+
require 'sbrf_merchant/response/order_status'
|
6
|
+
|
7
|
+
module SbrfMerchant
|
8
|
+
class Order
|
9
|
+
attr_reader :api_client, :orderId, :orderNumber
|
10
|
+
|
11
|
+
def initialize(orderId: nil, orderNumber: nil, api_client: SbrfMerchant.api_client)
|
12
|
+
@orderId = orderId
|
13
|
+
@orderNumber = orderNumber
|
14
|
+
@api_client = api_client
|
15
|
+
end
|
16
|
+
|
17
|
+
def register_one_stage(**args)
|
18
|
+
register(SbrfMerchant::Api::Action::REGISTER_ORDER, args)
|
19
|
+
end
|
20
|
+
|
21
|
+
def register_two_stage(**args)
|
22
|
+
register(SbrfMerchant::Api::Action::REGISTER_PRE_AUTH, args)
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_info
|
26
|
+
Response::OrderStatus.new(
|
27
|
+
api_client.process_request(
|
28
|
+
SbrfMerchant::Api::Action::ORDER_STATUS,
|
29
|
+
default_request_params
|
30
|
+
)
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
def cancel
|
35
|
+
Response::Base.new(
|
36
|
+
api_client.process_request(
|
37
|
+
SbrfMerchant::Api::Action::CANCEL_ORDER,
|
38
|
+
default_request_params
|
39
|
+
)
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
def refund(amount)
|
44
|
+
Response::Base.new(
|
45
|
+
api_client.process_request(
|
46
|
+
SbrfMerchant::Api::Action::REFUND_ORDER,
|
47
|
+
default_request_params.merge(amount: amount)
|
48
|
+
)
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
def complete(amount)
|
53
|
+
Response::Base.new(
|
54
|
+
api_client.process_request(
|
55
|
+
SbrfMerchant::Api::Action::COMPLETE_ORDER,
|
56
|
+
default_request_params.merge(amount: amount)
|
57
|
+
)
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def default_request_params
|
64
|
+
params = {}
|
65
|
+
|
66
|
+
params[:orderId] = orderId if orderId
|
67
|
+
params[:orderNumber] = orderNumber if orderNumber
|
68
|
+
|
69
|
+
params
|
70
|
+
end
|
71
|
+
|
72
|
+
def register(path, args)
|
73
|
+
response = Response::CreateOrder.new(
|
74
|
+
api_client.process_request(
|
75
|
+
path,
|
76
|
+
args.merge(default_request_params)
|
77
|
+
)
|
78
|
+
)
|
79
|
+
@orderId = response.orderId
|
80
|
+
|
81
|
+
response
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/lib/sbrf_merchant.rb
CHANGED
data/sbrf_merchant.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.description = 'Sberbank Merchant API Client for Ruby'
|
13
13
|
spec.homepage = 'https://github.com/abstractart/sbrf_merchant'
|
14
14
|
spec.license = 'MIT'
|
15
|
-
spec.required_ruby_version = '>= 2.
|
15
|
+
spec.required_ruby_version = '>= 2.1.0'
|
16
16
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
18
|
f.match(%r{^(test|spec|features)/})
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sbrf_merchant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eugene Kozlov
|
@@ -132,7 +132,7 @@ files:
|
|
132
132
|
- lib/sbrf_merchant/api/client.rb
|
133
133
|
- lib/sbrf_merchant/api/error_code.rb
|
134
134
|
- lib/sbrf_merchant/api/order_status.rb
|
135
|
-
- lib/sbrf_merchant/order
|
135
|
+
- lib/sbrf_merchant/order.rb
|
136
136
|
- lib/sbrf_merchant/response/base.rb
|
137
137
|
- lib/sbrf_merchant/response/create_order.rb
|
138
138
|
- lib/sbrf_merchant/response/order_status.rb
|
@@ -150,7 +150,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
150
150
|
requirements:
|
151
151
|
- - ">="
|
152
152
|
- !ruby/object:Gem::Version
|
153
|
-
version: 2.
|
153
|
+
version: 2.1.0
|
154
154
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
155
|
requirements:
|
156
156
|
- - ">="
|
@@ -1,69 +0,0 @@
|
|
1
|
-
require 'sbrf_merchant/api/client'
|
2
|
-
require 'sbrf_merchant/api/action'
|
3
|
-
require 'sbrf_merchant/response/base'
|
4
|
-
require 'sbrf_merchant/response/create_order'
|
5
|
-
require 'sbrf_merchant/response/order_status'
|
6
|
-
|
7
|
-
module SbrfMerchant
|
8
|
-
module Order
|
9
|
-
class OneStage
|
10
|
-
attr_reader :api_client, :orderId, :orderNumber
|
11
|
-
|
12
|
-
def initialize(orderId: nil, orderNumber: nil, api_client: SbrfMerchant.api_client)
|
13
|
-
@orderId = orderId
|
14
|
-
@orderNumber = orderNumber
|
15
|
-
@api_client = api_client
|
16
|
-
end
|
17
|
-
|
18
|
-
def register(**args)
|
19
|
-
response = Response::CreateOrder.new(
|
20
|
-
api_client.process_request(
|
21
|
-
SbrfMerchant::Api::Action::OneStage::REGISTER_ORDER,
|
22
|
-
args.merge(default_request_params)
|
23
|
-
)
|
24
|
-
)
|
25
|
-
@orderId = response.orderId
|
26
|
-
|
27
|
-
response
|
28
|
-
end
|
29
|
-
|
30
|
-
def get_info
|
31
|
-
Response::OrderStatus.new(
|
32
|
-
api_client.process_request(
|
33
|
-
SbrfMerchant::Api::Action::OneStage::ORDER_STATUS,
|
34
|
-
default_request_params
|
35
|
-
)
|
36
|
-
)
|
37
|
-
end
|
38
|
-
|
39
|
-
def cancel
|
40
|
-
Response::Base.new(
|
41
|
-
api_client.process_request(
|
42
|
-
SbrfMerchant::Api::Action::OneStage::CANCEL_ORDER,
|
43
|
-
default_request_params
|
44
|
-
)
|
45
|
-
)
|
46
|
-
end
|
47
|
-
|
48
|
-
def refund(amount)
|
49
|
-
Response::Base.new(
|
50
|
-
api_client.process_request(
|
51
|
-
SbrfMerchant::Api::Action::OneStage::REFUND_ORDER,
|
52
|
-
default_request_params.merge(amount: amount)
|
53
|
-
)
|
54
|
-
)
|
55
|
-
end
|
56
|
-
|
57
|
-
private
|
58
|
-
|
59
|
-
def default_request_params
|
60
|
-
params = {}
|
61
|
-
|
62
|
-
params[:orderId] = orderId if orderId
|
63
|
-
params[:orderNumber] = orderNumber if orderNumber
|
64
|
-
|
65
|
-
params
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|