unitpay 0.1 → 0.2

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: 30615f1d644e3b6abafaccadef5ae3e1ccd9c23e
4
- data.tar.gz: e2b1c7945292348d190860ade3265e4419765281
3
+ metadata.gz: 6b2151fbaa10bcb948b81ed8a60251191f76072a
4
+ data.tar.gz: 343b94025ae0549e871b8c898c774fc2b44deba8
5
5
  SHA512:
6
- metadata.gz: 05fef55f7da174ec1cc2b728724598867a90de330503079ae226a6fd7571eb657115129107718d1e49d74711409166fe7519c68491c07ff56657adbc0b2af659
7
- data.tar.gz: da7a4f62f1a6d3b4253bc232d053413d62c145a0f3b069fa2ee14dde711c576acc638d6dfbe337d4f2b2c115e6d144f9a5d04fa1437f0e10aac590e7fa9d984a
6
+ metadata.gz: b7428b3732a1a5758e980ef6d5289545862293127849a06bd1d2263b498db0093bf7ec2ba63899a2258b953c87f3615385bc41d5622a77daed0cfb78d9c56b7f
7
+ data.tar.gz: a52d8aec1065f3f6ae18deb8a5db4423198959d08c8a5a16a71e9664714d989a6802b01804c98104f974d47d8bd8adac6014315a4b0c1d28714026f4a5ed9b97
data/README.md CHANGED
@@ -11,10 +11,9 @@ Gem для подключения к платежному шлюзу [unitpay](h
11
11
 
12
12
  - [Установка](#installation)
13
13
  - [Подключение](#setup)
14
- - [Использование](#usage)
15
- - [Получение ссылки для оплаты](#payment_url)
16
- - [Модуль для обработки запросов от unitpay (для RubyOnRails)](#rails)
17
- - [Подключение виджета для карт оплаты](#widget)
14
+ - [Получение ссылки для оплаты](#payment_url)
15
+ - [Использование в Rails](#rails)
16
+ - [Подключение виджета для карт оплаты](#widget)
18
17
 
19
18
  ##<a name="installation"></a> Установка
20
19
 
@@ -54,10 +53,7 @@ Unitpay::Service.new('unitpay_public_key', 'unitpay_secret_key', use_sign, curre
54
53
  3. Необходимо изменить `example.com` на адрес вашего приложения.
55
54
  4. Необходимо изменить `example.com` на адрес вашего приложения.
56
55
 
57
-
58
- ##<a name="usage"></a> Использование
59
-
60
- ###<a name="payment_url"></a> Получение ссылки для оплаты
56
+ ##<a name="payment_url"></a> Получение ссылки для оплаты
61
57
 
62
58
  Чтобы получить ссылку для оплаты, необходимо использовать метод `payment_url`, в который нужно передать следующие параметры:
63
59
 
@@ -74,9 +70,9 @@ service.payment_url(sum, account, desc)
74
70
  # => 'https://unitpay.ru/pay/public_key?sum=100&account=1&desc=description...'
75
71
  ```
76
72
 
77
- ###<a name="rails"></a> Модуль для обработки запросов от unitpay (для RubyOnRails)
73
+ ##<a name="rails"></a> Использование в Rails
78
74
 
79
- Добавьте роуты для **unitpay** (`config/routes.rb`)
75
+ Добавьте роуты для получения запросов от **unitpay** (`config/routes.rb`)
80
76
 
81
77
  ```ruby
82
78
  scope :unitpay do
@@ -91,6 +87,7 @@ end
91
87
  ```ruby
92
88
  class UnitpayController < ApplicationController
93
89
  include Unitpay::Controller
90
+ skip_before_filter :verify_authenticity_token
94
91
 
95
92
  def success
96
93
  # вызывается при отправке шлюзом пользователя на Success URL.
@@ -104,6 +101,8 @@ class UnitpayController < ApplicationController
104
101
  # (во время принятия платежа возникла ошибка)
105
102
  end
106
103
 
104
+ private
105
+
107
106
  def pay
108
107
  # вызывается при оповещении магазина об
109
108
  # успешной оплате пользователем заказа и после проверки сигнатуры.
@@ -115,13 +114,12 @@ class UnitpayController < ApplicationController
115
114
 
116
115
  def error
117
116
  # вызывается при оповещении магазина об ошибке при оплате заказа.
117
+ # При отсутствии логики обработки ошибок на стороне приложения оставить метод пустым.
118
118
  #
119
119
  # ВНИМАНИЕ: правильный ответ будет сгенерирован автоматически (не нужно использовать render\redirect_to)!
120
- # order = Order.find(params[:params][:account])
121
- # order.error!
120
+ # puts params[errorMessage]
121
+ # => Текст ошибки, присланный unitpay
122
122
  end
123
-
124
- private
125
123
 
126
124
  def service
127
125
  # ВНИМАНИЕ: обязательный метод! Используется при проверке сигнатуры.
@@ -130,17 +128,39 @@ class UnitpayController < ApplicationController
130
128
  end
131
129
  ```
132
130
 
133
- ###<a name="widget"></a> Подключение виджета для карт оплаты
131
+ [Описание параметров, передаваемых при запросе.
132
+ ](http://help.unitpay.ru/article/35-confirmation-payment)
133
+
134
+ ### Исключения при обработке запросов
135
+
136
+ Важно понимать, что до вызова метода `pay` происходит проверка только сигнатуры.
137
+ Прочие проверки на соответствие платежа правилам логики приложения остаются на вашей совести (например, эквивалентность суммы оплаты и суммы заказа).
138
+ Для удобства обработки таких ситуаций существует зарезервированное исключение `Unitpay::Controller::RuntimeException`. В этом случае в ответе будет передан текст вашей ошибки.
139
+
140
+ Пример:
141
+
142
+ ```ruby
143
+ def pay
144
+ order = Order.find(params[:params][:account])
145
+ if order.total_cost == params[:params][:sum]
146
+ order.payed!
147
+ else
148
+ raise Unitpay::Controller::RuntimeException.new('Неверная сумма оплаты')
149
+ end
150
+ end
151
+ ```
152
+
153
+ ##<a name="widget"></a> Подключение виджета для карт оплаты
134
154
 
135
155
  Рассмотрим один из способов реализации случая, когда необходимо показать виджет оплаты после заполнения пользователем формы заказа.
136
156
 
137
- 1. Подключите на странице внешний скрипт:
157
+ - Подключите на странице внешний скрипт:
138
158
 
139
159
  ```html
140
160
  <script src="https://widget.unitpay.ru/unitpay.js"></script>
141
161
  ```
142
162
 
143
- 2. Добавьте обработчик формы заказа
163
+ - Добавьте обработчик формы заказа:
144
164
 
145
165
  **unitpay.js.coffe**
146
166
  ```coffee
@@ -177,7 +197,7 @@ $ ->
177
197
 
178
198
  ```
179
199
 
180
- 3. Измените контроллер так, чтобы он отдавал необходимый `json` ответ
200
+ - Измените контроллер так, чтобы он отдавал необходимый `json` ответ:
181
201
 
182
202
  **orders_controller.rb**
183
203
  ```ruby
@@ -203,6 +223,7 @@ class OrdersController < ApplicationController
203
223
  # используйте strong params
204
224
  end
205
225
  end
226
+ ```
206
227
 
207
228
  ## Contributing
208
229
 
@@ -3,9 +3,10 @@ module Unitpay
3
3
  # Skip RequestForgeryProtection
4
4
  # skip_before_filter :verify_authenticity_token
5
5
 
6
- class ServiceNotImplementedError < StandardError; end
7
- class PayNotImplementedError < StandardError; end
8
- class ErrorNotImplementedError < StandardError; end
6
+ class ServiceNotImplemented < StandardError; end
7
+ class PayMethodNotImplemented < StandardError; end
8
+ class ErrorMethodNotImplemented < StandardError; end
9
+ class RuntimeException < StandardError; end
9
10
 
10
11
  def notify
11
12
  if service.valid_notify_sign?(params[:params])
@@ -14,6 +15,8 @@ module Unitpay
14
15
  else
15
16
  fail_request
16
17
  end
18
+ rescue RuntimeException => e
19
+ fail_request(e.message)
17
20
  end
18
21
 
19
22
  def success
@@ -27,7 +30,7 @@ module Unitpay
27
30
  private
28
31
 
29
32
  def service
30
- raise ServiceNotImplementedError
33
+ raise ServiceNotImplemented
31
34
  end
32
35
 
33
36
  def check
@@ -35,19 +38,19 @@ module Unitpay
35
38
  end
36
39
 
37
40
  def pay
38
- raise PayNotImplementedError
41
+ raise PayMethodNotImplemented
39
42
  end
40
43
 
41
44
  def error
42
- raise ErrorNotImplementedError
45
+ raise ErrorMethodNotImplemented
43
46
  end
44
47
 
45
48
  def success_request
46
49
  render json: { result: { message: 'Запрос успешно обработан' } }
47
50
  end
48
51
 
49
- def fail_request
50
- render json: { error: { message: 'Неверная сигнатура' } }
52
+ def fail_request(message = 'Неверная сигнатура')
53
+ render json: { error: { message: message } }
51
54
  end
52
55
  end
53
56
  end
@@ -1,3 +1,3 @@
1
1
  module Unitpay
2
- VERSION = '0.1'
2
+ VERSION = '0.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unitpay
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - ssnikolay
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-01-03 00:00:00.000000000 Z
11
+ date: 2016-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler