unitpay 0.1 → 0.2

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: 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