sbrf_merchant 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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