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 +4 -4
- data/README.md +39 -18
- data/lib/unitpay/controller.rb +11 -8
- data/lib/unitpay/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b2151fbaa10bcb948b81ed8a60251191f76072a
|
4
|
+
data.tar.gz: 343b94025ae0549e871b8c898c774fc2b44deba8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
- [
|
15
|
-
|
16
|
-
|
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
|
-
|
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
|
-
#
|
121
|
-
#
|
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
|
-
|
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
|
-
|
157
|
+
- Подключите на странице внешний скрипт:
|
138
158
|
|
139
159
|
```html
|
140
160
|
<script src="https://widget.unitpay.ru/unitpay.js"></script>
|
141
161
|
```
|
142
162
|
|
143
|
-
|
163
|
+
- Добавьте обработчик формы заказа:
|
144
164
|
|
145
165
|
**unitpay.js.coffe**
|
146
166
|
```coffee
|
@@ -177,7 +197,7 @@ $ ->
|
|
177
197
|
|
178
198
|
```
|
179
199
|
|
180
|
-
|
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
|
|
data/lib/unitpay/controller.rb
CHANGED
@@ -3,9 +3,10 @@ module Unitpay
|
|
3
3
|
# Skip RequestForgeryProtection
|
4
4
|
# skip_before_filter :verify_authenticity_token
|
5
5
|
|
6
|
-
class
|
7
|
-
class
|
8
|
-
class
|
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
|
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
|
41
|
+
raise PayMethodNotImplemented
|
39
42
|
end
|
40
43
|
|
41
44
|
def error
|
42
|
-
raise
|
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
|
data/lib/unitpay/version.rb
CHANGED
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.
|
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-
|
11
|
+
date: 2016-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|