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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6a6f8d675873a5f9a0efdf2ab640a379306cb8fe
4
- data.tar.gz: 6ded6355ba85cebfa88ddba68ef5eb80b454048c
3
+ metadata.gz: e0a432c1d76b9afe5994042bd2f89f68e38bfc2b
4
+ data.tar.gz: 3ca43386c3ebf92e68767b471d8a8288a1bcb0ed
5
5
  SHA512:
6
- metadata.gz: 7a3e2c10f273bdadcb4b340f46d459796d8291b3bee82c9c75102623e47afe33d477d872f218e4b996b8adebb9dd17733ccae02c6c359b8c207a6c456dec5a8f
7
- data.tar.gz: bc6a30710db9aa2f0220eddfd23ed35bd876f4dd069a9455221d4362b5c1aab4dc02d4deced54a8b3d94d9da442f60e70dfacc9b5f3d8cb345419776d41be992
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
  [![Code Climate](https://codeclimate.com/github/abstractart/sbrf_merchant/badges/gpa.svg
6
6
  )](https://codeclimate.com/github/abstractart/sbrf_merchant)
7
7
  [![Test Coverage](https://api.codeclimate.com/v1/badges/db86deaba446bac68ae1/test_coverage)](https://codeclimate.com/github/abstractart/sbrf_merchant/test_coverage)
8
- ## Installation
9
8
 
10
- ### Manually from RubyGems.org ###
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
- ### Or if you are using Bundler ###
24
+ ### Bundler ###
17
25
 
18
26
  ```ruby
19
27
  # Gemfile
20
28
  gem 'sbrf_merchant'
21
29
  ```
22
30
 
23
- ## Configuration
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
- ## API Documentation
33
- [RU](https://securepayments.sberbank.ru/wiki/doku.php/integration:api:start)
34
-
35
- # Usage Examples
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** - order identificator in Sberbank Payment Gateway
46
+ - **orderId** - ID заказа в Сбербанке
47
+ - **orderNumber** - ID заказа в Вашей системе
38
48
 
39
- **orderNumber** - order identificator in your system
40
-
41
- ## OneStage Order
42
- ### Register
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::OneStage.new(orderNumber: SecureRandom.hex)
46
- response = order.register(amount: 10000, returnUrl: 'http:/localhost:3000')
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 # returns unique Id in Sberbank system
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
- ### Status
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
- ### Refund
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
- ### Cancel
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
- module OneStage
6
- REFUND_ORDER = "#{REST}refund.do".freeze
7
- REGISTER_ORDER = "#{REST}register.do".freeze
8
- ORDER_STATUS = "#{REST}getOrderStatusExtended.do".freeze
9
- CANCEL_ORDER = "#{REST}reverse.do".freeze
10
- end
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
@@ -1,6 +1,5 @@
1
1
  require 'sbrf_merchant/api/order_status'
2
2
 
3
-
4
3
  module SbrfMerchant
5
4
  module Response
6
5
  class OrderStatus < Response::Base
@@ -1,3 +1,3 @@
1
1
  module SbrfMerchant
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '1.0.0'.freeze
3
3
  end
data/lib/sbrf_merchant.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'sbrf_merchant/order/one_stage'
1
+ require 'sbrf_merchant/order'
2
2
 
3
3
  module SbrfMerchant
4
4
  class << self
@@ -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.0.0'
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.2.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/one_stage.rb
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.0.0
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