payanyway 1.2.1 → 1.2.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 +138 -53
- data/lib/payanyway/controller.rb +18 -18
- data/lib/payanyway/{request/payment_url.rb → factories/payment_url_factory.rb} +2 -2
- data/lib/payanyway/gateway.rb +1 -1
- data/lib/payanyway/{response → request}/base.rb +1 -1
- data/lib/payanyway/{response → request}/check.rb +18 -10
- data/lib/payanyway/{response → request}/pay.rb +2 -2
- data/lib/payanyway/version.rb +1 -1
- data/lib/payanyway.rb +4 -3
- data/spec/controllers/payanyway_controller_spec.rb +12 -1
- data/spec/lib/payanyway/{request/payment_url_spec.rb → factories/payment_url_factory_spec.rb} +1 -1
- data/spec/lib/payanyway/{response → request}/base_spec.rb +1 -1
- data/spec/lib/payanyway/{response → request}/check_spec.rb +3 -3
- data/spec/lib/payanyway/{response → request}/pay_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- metadata +14 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22312df92c434d0cc5fbb014278ea412e847ef2f
|
4
|
+
data.tar.gz: 56360ecc662d971c93fb290b11b4e6d75a69a134
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68e88399e7e7b18faf28d8a343e72845786be52c5b465b70adde9201a7d545cc910cd0ad62bf2a3cac070b4845f9c496ba87db3009c7c18264ad586fd768d9ab
|
7
|
+
data.tar.gz: 5e6066b8f26391772aed9a00a2c09a244198e3dd60f8bc5cf04c2e5d03df7aba454f58649ff5b9eb27b56edce1dc6f1cd09e3480e37df2d88812c0b854e2b771
|
data/README.md
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
[](http://badge.fury.io/rb/payanyway)
|
1
2
|
[](https://travis-ci.org/ssnikolay/payanyway)
|
2
3
|
[](https://codeclimate.com/github/ssnikolay/payanyway)
|
3
4
|
[](https://codeclimate.com/github/ssnikolay/payanyway)
|
@@ -5,8 +6,20 @@
|
|
5
6
|
# Payanyway
|
6
7
|
|
7
8
|
Этот gem предназначен для быстрой интеграции платежного шлюза [payanyway](http://payanyway.ru) в ваше ruby приложение.
|
8
|
-
|
9
|
-
|
9
|
+
|
10
|
+
При возникновении вопросов следует ознакомиться с [документацией к шлюзу](http://moneta.ru/doc/MONETA.Assistant.ru.pdf).
|
11
|
+
|
12
|
+
- [Установка](#installation)
|
13
|
+
- [Подключение](#setup)
|
14
|
+
- [Использование](#usage)
|
15
|
+
- [Запрос на оплату](#payment_url)
|
16
|
+
- [Специальные URL'ы](#special_urls)
|
17
|
+
- [Check URL](#check_url)
|
18
|
+
- [Return URL и InProgress URL](#return_url)
|
19
|
+
- [Расшифровка параметров](#params)
|
20
|
+
- [Параметры, отвечающие за выбор платежной системы](#payment_ids)
|
21
|
+
|
22
|
+
##<a name="installation"></a> Установка
|
10
23
|
|
11
24
|
Добавьте эти строки в Gemfile вашего приложения:
|
12
25
|
|
@@ -18,11 +31,11 @@ gem 'payanyway'
|
|
18
31
|
|
19
32
|
$ bundle
|
20
33
|
|
21
|
-
Или
|
34
|
+
Или установите напрямую:
|
22
35
|
|
23
36
|
$ gem install payanyway
|
24
37
|
|
25
|
-
|
38
|
+
##<a name="setup"></a> Подключение
|
26
39
|
|
27
40
|
Добавьте engine в `config/routes.rb`
|
28
41
|
```ruby
|
@@ -36,7 +49,7 @@ end
|
|
36
49
|
```ruby
|
37
50
|
class PayanywayController
|
38
51
|
def success_implementation(order_id)
|
39
|
-
# вызывается при
|
52
|
+
# вызывается при отправке шлюзом пользователя на Success URL.
|
40
53
|
#
|
41
54
|
# ВНИМАНИЕ: является незащищенным действием!
|
42
55
|
# Для выполнения действий после успешной оплаты используйте pay_implementation
|
@@ -46,40 +59,22 @@ class PayanywayController
|
|
46
59
|
# вызывается при оповещении магазина об
|
47
60
|
# успешной оплате пользователем заказа. (Pay URL)
|
48
61
|
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
62
|
+
# params[ KEY ], где KEY ∈ [ :moneta_id, :order_id, :operation_id,
|
63
|
+
# :amount, :currency, :subscriber_id, :test_mode, :user, :corraccount,
|
64
|
+
# :custom1, :custom2, :custom3 ]
|
52
65
|
end
|
53
66
|
|
54
67
|
def fail_implementation(order_id)
|
55
|
-
# вызывается при
|
56
|
-
end
|
57
|
-
|
58
|
-
def return_implementation(order_id)
|
59
|
-
# Вызывается при добровольном отказе пользователем от оплаты (Return URL)
|
60
|
-
end
|
61
|
-
|
62
|
-
def in_progress_implementation(order_id)
|
63
|
-
# Вызывается после успешного запроса на авторизацию средств,
|
64
|
-
# до подтверждения списания и зачисления средств (InProgress URL)
|
65
|
-
#
|
66
|
-
# ВНИМАНИЕ: InProgress URL может быть использован в любом способе оплаты.
|
67
|
-
# Если к моменту, когда пользователя надо вернуть в магазин оплата
|
68
|
-
# по какой-либо причине не завершена, то его перекинет на InProgress, если он указан.
|
69
|
-
# Если InProgress URL не указан, то на Success URL.
|
70
|
-
# Если операция уже успешно выполнилась, то сразу на Success URL.
|
71
|
-
# К примеру, в случае с картами чаще всего получается так, что операция не успевает выполниться,
|
72
|
-
# поэтому InProgress будет использован с бОльшей вероятностью, чем Success URL.
|
68
|
+
# вызывается при отправке шлюзом пользователя на Fail URL.
|
73
69
|
end
|
74
70
|
end
|
75
71
|
```
|
76
72
|
|
77
73
|
Создайте конфигурационный файл: `config/payanyway.yml`
|
78
74
|
|
79
|
-
|
80
75
|
```yml
|
81
76
|
development: &config
|
82
|
-
moneta_id:
|
77
|
+
moneta_id: YOUR_MONETA_ID
|
83
78
|
currency: RUB
|
84
79
|
payment_url: https://demo.moneta.ru/assistant.htm
|
85
80
|
test_mode: 1
|
@@ -88,54 +83,144 @@ production: <<: *config
|
|
88
83
|
payment_url: https://moneta.ru/assistant.htm
|
89
84
|
test_mode: 0
|
90
85
|
```
|
91
|
-
|
86
|
+
##<a name="usage"></a> Использование
|
87
|
+
|
88
|
+
###<a name="payment_url"></a> Запрос на оплату
|
92
89
|
|
93
|
-
|
90
|
+
Чтобы получить ссылку на платежный шлюз для оплаты заказа пользователем,
|
94
91
|
используйте `Payanyway::Gateway.payment_url(params, use_signature = true)`, где `params[ KEY ]` такой, что `KEY` ∈
|
95
92
|
`[:order_id, :amount, :test_mode, :description, :subscriber_id, :custom1, :custom2, :custom3, :locale, :payment_system_unit_id, :payment_system_limit_ids]`
|
96
93
|
|
97
94
|
Если в настройках счета в системе **moneta.ru** выставлен флаг «Можно переопределять настройки в URL», то можно так же передавать
|
98
95
|
`[:success_url, :in_progress_url, :fail_url, :return_url]`.
|
99
96
|
|
100
|
-
|
97
|
+
Пример минимальной ссылки:
|
98
|
+
|
101
99
|
```ruby
|
102
100
|
class Order < ActiveRecord::Base; end
|
103
101
|
|
104
|
-
class OrdersController <
|
102
|
+
class OrdersController < ApplicationController
|
105
103
|
def create
|
106
104
|
order = Order.create(params[:order])
|
107
105
|
redirect_to Payanyway::Gateway.payment_url(
|
108
106
|
order_id: order.id,
|
109
107
|
amount: order.total_amount,
|
110
|
-
locale: 'ru',
|
111
108
|
description: "Оплата заказа № #{ order.number } на сумму #{ order.total_amount }руб."
|
112
109
|
)
|
113
110
|
end
|
114
111
|
end
|
115
112
|
```
|
116
113
|
|
117
|
-
|
114
|
+
###<a name="special_urls"></a> Специальные URL'ы
|
115
|
+
|
116
|
+
Gem **payanyway** добавляет специальные роуты для обработки запросов от шлюза.
|
117
|
+
|
118
|
+
####<a name="check_url"></a> Check URL
|
119
|
+
|
120
|
+
```ruby
|
121
|
+
class PayanywayController
|
122
|
+
...
|
123
|
+
def check_implementation(params)
|
124
|
+
# Вызывается при обработке проверочных запросов (Check URL)
|
125
|
+
# params[ KEY ], где KEY ∈ [ :moneta_id, :order_id, :operation_id,
|
126
|
+
# :amount, :currency, :subscriber_id, :test_mode, :user, :corraccount,
|
127
|
+
# :custom1, :custom2, :custom3, :payment_system_unit_id ]
|
128
|
+
|
129
|
+
# ВНИМАНИЕ: при отправке корректного ответа со стороны магазина,
|
130
|
+
# необходимо вернуть в методе параметры для генерации статус-кода.
|
131
|
+
# { amount: AMOUNT, state: STATE, description: DESCRIPTION,
|
132
|
+
# attributes: ATTRIBUTES, logger: true\false }
|
133
|
+
end
|
134
|
+
end
|
135
|
+
```
|
136
|
+
|
137
|
+
Пример метода:
|
118
138
|
|
119
|
-
|
139
|
+
```ruby
|
140
|
+
...
|
141
|
+
def check_implementation(params)
|
142
|
+
order = Order.find(params[:order_id])
|
143
|
+
{
|
144
|
+
amount: order.total_amount,
|
145
|
+
state: order.state_for_payanyway, # нужно реализовать
|
146
|
+
attributes: { name: 'John Smith', email: 'js@gmail.com' }
|
147
|
+
}
|
148
|
+
end
|
149
|
+
...
|
150
|
+
```
|
151
|
+
|
152
|
+
**Возвращаемые параметры:**
|
153
|
+
|
154
|
+
Название | Описание
|
120
155
|
---------------------------|:-----------------------------------------------------------
|
121
|
-
`:
|
122
|
-
`:
|
123
|
-
`:
|
124
|
-
`:
|
125
|
-
`:
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
`:
|
132
|
-
`:
|
133
|
-
`:
|
134
|
-
`:
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
156
|
+
`:amount` | Сумма заказа
|
157
|
+
`:state` | Состояние оплаты заказа. (см. [таблицу состояний](#states))
|
158
|
+
`:description` | Описание состояния заказа. Задается в произвольной форме.
|
159
|
+
`:attributes` | Необязательный элемент. Содержит хеш произвольных параметров, которые будут сохранены в операции.
|
160
|
+
`:logger` | Вывести XML ответ в log (`Rails.logger`)
|
161
|
+
|
162
|
+
<a name="states"></a>**Возможные состояния оплаты заказа:**
|
163
|
+
|
164
|
+
Состояние | Описание
|
165
|
+
-------------------------|:-----------------------------------------------------------
|
166
|
+
`:paid` | Заказ оплачен. Уведомление об оплате магазину доставлено.
|
167
|
+
`:in_progress` | Заказ находится в обработке. Точный статус оплаты заказа определить невозможно. (например, если пользователя отправило на InProgress URL, но уведомления на Pay URL от шлюза еще не поступало)
|
168
|
+
`:unpaid` | Заказ создан и готов к оплате. Уведомление об оплате магазину не доставлено.
|
169
|
+
`:canceled` | Заказ не является актуальным в магазине (например, заказ отменен).
|
170
|
+
|
171
|
+
####<a name="return_url"></a> Return URL и InProgress URL
|
172
|
+
|
173
|
+
```ruby
|
174
|
+
class PayanywayController
|
175
|
+
...
|
176
|
+
def return_implementation(order_id)
|
177
|
+
# Вызывается при добровольном отказе пользователем от оплаты (Return URL)
|
178
|
+
end
|
179
|
+
|
180
|
+
def in_progress_implementation(order_id)
|
181
|
+
# Вызывается после успешного запроса на авторизацию средств,
|
182
|
+
# до подтверждения списания и зачисления средств (InProgress URL)
|
183
|
+
#
|
184
|
+
# ВНИМАНИЕ: InProgress URL может быть использован в любом способе оплаты.
|
185
|
+
# Если к моменту, когда пользователя надо вернуть в магазин оплата,
|
186
|
+
# по какой-либо причине не завершена, то его перекинет на InProgress,
|
187
|
+
# если он указан, если не указан, то на Success URL.
|
188
|
+
# Если операция уже успешно выполнилась, то сразу на Success.
|
189
|
+
# В случае с картами чаще всего получается так, что операция не успевает выполниться,
|
190
|
+
# поэтому InProgress будет использован с бОльшей вероятностью, чем Success URL.
|
191
|
+
end
|
192
|
+
...
|
193
|
+
end
|
194
|
+
```
|
195
|
+
|
196
|
+
###<a name="params"></a> Расшифровка параметров, используемых в gem'e
|
197
|
+
|
198
|
+
params[ KEY ], где KEY | В документации | Описание
|
199
|
+
---------------------------|:-------------------------|:-----------------------------------------
|
200
|
+
`:moneta_id` | `MNT_ID` | Идентификатор магазина в системе MONETA.RU.
|
201
|
+
`:order_id` | `MNT_TRANSACTION_ID` | Внутренний идентификатор заказа, однозначно определяющий заказ в магазине.
|
202
|
+
`:operation_id` | `MNT_OPERATION_ID` | Номер операции в системе MONETA.RU.
|
203
|
+
`:amount` | `MNT_AMOUNT` | Фактическая сумма, полученная на оплату заказа.
|
204
|
+
`:currency` | `MNT_CURRENCY_CODE` | ISO код валюты, в которой произведена оплата заказа в магазине.
|
205
|
+
`:test_mode` | `MNT_TEST_MODE` | Флаг оплаты в тестовом режиме (1 - да, 0 - нет).
|
206
|
+
`:description` | `MNT_DESCRIPTION` | Описание оплаты.
|
207
|
+
`:subscriber_id` | `MNT_SUBSCRIBER_ID` | Внутренний идентификатор пользователя в системе магазина.
|
208
|
+
`:corraccount` | `MNT_CORRACCOUNT` | Номер счета плательщика.
|
209
|
+
`:custom[1|2|3]` | `MNT_CUSTOM1` | Поля произвольных параметров. Будут возвращены магазину в параметрах отчета о проведенной оплате.
|
210
|
+
`:user` | `MNT_USER` | Номер счета пользователя, если оплата производилась с пользовательского счета в системе «MONETA.RU».
|
211
|
+
`:locale` | `moneta.locale` | (ru\|en) Язык пользовательского интерфейса.
|
212
|
+
`:success_url` | `MNT_SUCCESS_URL` | URL страницы магазина, куда должен попасть покупатель после успешно выполненных действий.
|
213
|
+
`:in_progress_url` | `MNT_INPROGRESS_URL` | URL страницы магазина, куда должен попасть покупатель после успешного запроса на авторизацию средств, до подтверждения списания и зачисления средств.
|
214
|
+
`:fail_url` | `MNT_FAIL_URL` | URL страницы магазина, куда должен попасть покупатель после отмененной или неуспешной оплаты.
|
215
|
+
`:return_url` | `MNT_RETURN_URL` | URL страницы магазина, куда должен вернуться покупатель при добровольном отказе от оплаты.
|
216
|
+
`:attributes` | `MNT_ATTRIBUTES` | Содержит произвольные параметры, которые будут сохранены в операции.
|
217
|
+
|
218
|
+
####<a name="payment_ids"></a> Параметры, отвечающие за выбор платежной системы:
|
219
|
+
|
220
|
+
params[ KEY ], где KEY | В документации | Описание
|
221
|
+
---------------------------|:-------------------------|:-----------------------------------------
|
222
|
+
`:payment_system_unit_id` | `paymentSystem.unitId` | Конкретная [платежная система](https://www.moneta.ru/viewPaymentMethods.htm)
|
223
|
+
`:payment_system_limit_ids`| `paymentSystem.limitIds` | Список (разделенный запятыми) идентификаторов платежных систем.
|
139
224
|
|
140
225
|
|
141
226
|
## Contributing
|
data/lib/payanyway/controller.rb
CHANGED
@@ -7,44 +7,44 @@ module Payanyway
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def pay
|
10
|
-
|
11
|
-
|
12
|
-
pay_implementation(
|
13
|
-
Rails.logger.error(
|
10
|
+
request = Payanyway::Request::Pay.new(params)
|
11
|
+
request.success? ?
|
12
|
+
pay_implementation(request.pretty_params) :
|
13
|
+
Rails.logger.error(request.error_message)
|
14
14
|
|
15
|
-
render text:
|
15
|
+
render text: request.response
|
16
16
|
end
|
17
17
|
|
18
18
|
def success
|
19
|
-
|
19
|
+
request = Payanyway::Request::Base.new(params)
|
20
20
|
|
21
|
-
success_implementation(
|
21
|
+
success_implementation(request.pretty_params)
|
22
22
|
end
|
23
23
|
|
24
24
|
def fail
|
25
|
-
|
25
|
+
request = Payanyway::Request::Base.new(params)
|
26
26
|
|
27
|
-
fail_implementation(
|
27
|
+
fail_implementation(request.pretty_params[:order_id])
|
28
28
|
end
|
29
29
|
|
30
30
|
def return
|
31
|
-
|
31
|
+
request = Payanyway::Request::Base.new(params)
|
32
32
|
|
33
|
-
return_implementation(
|
33
|
+
return_implementation(request.pretty_params[:order_id])
|
34
34
|
end
|
35
35
|
|
36
36
|
def in_progress
|
37
|
-
|
37
|
+
request = Payanyway::Request::Base.new(params)
|
38
38
|
|
39
|
-
in_progress_implementation(
|
39
|
+
in_progress_implementation(request.pretty_params[:order_id])
|
40
40
|
end
|
41
41
|
|
42
42
|
def check
|
43
|
-
|
44
|
-
if
|
45
|
-
raise
|
43
|
+
request = Payanyway::Request::Check.new(params)
|
44
|
+
if request.pretty_params.present?
|
45
|
+
raise request.error_message unless request.success?
|
46
46
|
|
47
|
-
render xml:
|
47
|
+
render xml: request.response(check_implementation(request.pretty_params)).to_xml
|
48
48
|
else
|
49
49
|
# Не выдавать ошибку, если параметры пустые
|
50
50
|
# Необходимо для проверки со стороны moneta.ru
|
@@ -91,7 +91,7 @@ module Payanyway
|
|
91
91
|
|
92
92
|
def check_implementation(params)
|
93
93
|
# Ответ на запрос о проверке заказа
|
94
|
-
# { amount: AMOUNT, state: STATE, description: description, attributes: ATTRIBUTES }
|
94
|
+
# { amount: AMOUNT, state: STATE, description: description, attributes: ATTRIBUTES, logger: logger }
|
95
95
|
end
|
96
96
|
end
|
97
97
|
end
|
data/lib/payanyway/gateway.rb
CHANGED
@@ -47,7 +47,7 @@ module Payanyway
|
|
47
47
|
# * _params[return_url]_ - URL страницы магазина, куда должен вернуться покупатель при добровольном отказе от оплаты.
|
48
48
|
|
49
49
|
|
50
|
-
Payanyway::
|
50
|
+
Payanyway::Factories::PaymentUrlFactory.build(params, use_signature)
|
51
51
|
end
|
52
52
|
|
53
53
|
class << self
|
@@ -1,14 +1,16 @@
|
|
1
1
|
module Payanyway
|
2
2
|
module Response
|
3
3
|
class InvalidState < Exception; end
|
4
|
+
end
|
4
5
|
|
6
|
+
module Request
|
5
7
|
class Check < Base
|
8
|
+
SPECIAL_CODE = 100 # когда в запросе не было суммы, а мы её передает в ответе
|
6
9
|
RESPONSE_CODE = {
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
canceled: 500
|
10
|
+
paid: 200,
|
11
|
+
in_progress: 302,
|
12
|
+
unpaid: 402,
|
13
|
+
canceled: 500
|
12
14
|
}
|
13
15
|
|
14
16
|
@@_params = {
|
@@ -38,7 +40,7 @@ module Payanyway
|
|
38
40
|
@valid_signature
|
39
41
|
end
|
40
42
|
|
41
|
-
def
|
43
|
+
def response(attr)
|
42
44
|
# Возвращает Nokogiri::XML документ
|
43
45
|
# * _attr[:amount] - сумма заказа
|
44
46
|
# * _attr[:state] - статус платежа(см. RESPONSE_CODE)
|
@@ -53,14 +55,16 @@ module Payanyway
|
|
53
55
|
parent.add_child(signature_node(xml))
|
54
56
|
parent.add_child(attributes_node(attr[:attributes], xml)) if attr[:attributes].present?
|
55
57
|
|
58
|
+
add_to_logger(xml) if attr[:logger]
|
59
|
+
|
56
60
|
xml
|
57
61
|
end
|
58
62
|
|
59
63
|
private
|
60
64
|
|
61
|
-
def validate_status!(
|
62
|
-
if RESPONSE_CODE.keys.exclude?(
|
63
|
-
raise InvalidState.new("PAYANYWAY: Invalid response state! State must be eq #{ RESPONSE_CODE.keys }")
|
65
|
+
def validate_status!(state)
|
66
|
+
if RESPONSE_CODE.keys.exclude?(state.to_sym)
|
67
|
+
raise Payanyway::Response::InvalidState.new("PAYANYWAY: Invalid response state! State must be eq #{ RESPONSE_CODE.keys }")
|
64
68
|
end
|
65
69
|
end
|
66
70
|
|
@@ -87,7 +91,7 @@ module Payanyway
|
|
87
91
|
|
88
92
|
def result_code_of(amount, state)
|
89
93
|
if @pretty_params[:amount].blank? && amount.present?
|
90
|
-
|
94
|
+
SPECIAL_CODE
|
91
95
|
else
|
92
96
|
RESPONSE_CODE[state.to_sym]
|
93
97
|
end
|
@@ -108,6 +112,10 @@ module Payanyway
|
|
108
112
|
def create_new_node(name, content, xml)
|
109
113
|
Nokogiri::XML::Node.new(name, xml).tap { |node| node.content = content }
|
110
114
|
end
|
115
|
+
|
116
|
+
def add_to_logger(xml)
|
117
|
+
Rails.logger.info("PAYANYWAY: XML response for check: \r\n #{ xml.to_xml }")
|
118
|
+
end
|
111
119
|
end
|
112
120
|
end
|
113
121
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Payanyway
|
2
|
-
module
|
2
|
+
module Request
|
3
3
|
class Pay < Base
|
4
4
|
@@_params = {
|
5
5
|
'MNT_ID' => :moneta_id,
|
@@ -26,7 +26,7 @@ module Payanyway
|
|
26
26
|
@valid_signature
|
27
27
|
end
|
28
28
|
|
29
|
-
def
|
29
|
+
def response
|
30
30
|
@valid_signature ? 'SUCCESS' : 'FAIL'
|
31
31
|
end
|
32
32
|
|
data/lib/payanyway/version.rb
CHANGED
data/lib/payanyway.rb
CHANGED
@@ -4,9 +4,10 @@ require 'active_support/core_ext'
|
|
4
4
|
require 'payanyway/helpers/settings'
|
5
5
|
require 'payanyway/helpers/signature_generator'
|
6
6
|
|
7
|
-
require 'payanyway/
|
8
|
-
require 'payanyway/
|
9
|
-
require 'payanyway/
|
7
|
+
require 'payanyway/factories/payment_url_factory'
|
8
|
+
require 'payanyway/request/base'
|
9
|
+
require 'payanyway/request/pay'
|
10
|
+
require 'payanyway/request/check'
|
10
11
|
|
11
12
|
require 'payanyway/gateway'
|
12
13
|
require 'payanyway/engine'
|
@@ -48,11 +48,22 @@ describe PayanywayController do
|
|
48
48
|
|
49
49
|
context 'when valid signature' do
|
50
50
|
it 'should and message to logger' do
|
51
|
-
|
51
|
+
expect(Rails.logger).not_to receive(:info)
|
52
|
+
expect_any_instance_of(Payanyway::Controller).to receive(:check_implementation).and_return(amount: 12, state: :paid)
|
53
|
+
|
52
54
|
get :check, { 'MNT_TRANSACTION_ID' => 676, 'MNT_SIGNATURE' => '79c1c4f41a0a70bb107c976ebba25811' }
|
53
55
|
|
54
56
|
expect(Nokogiri::XML(response.body).at_css('MNT_RESPONSE')).to be_present
|
55
57
|
end
|
56
58
|
end
|
59
|
+
|
60
|
+
context 'when logger flag is true' do
|
61
|
+
it 'should add message to logger' do
|
62
|
+
expect(Rails.logger).to receive(:info).with(/PAYANYWAY: XML response for check/)
|
63
|
+
|
64
|
+
expect_any_instance_of(Payanyway::Controller).to receive(:check_implementation).and_return(amount: 12, state: :paid, logger: true)
|
65
|
+
get :check, { 'MNT_TRANSACTION_ID' => 676, 'MNT_SIGNATURE' => '79c1c4f41a0a70bb107c976ebba25811' }
|
66
|
+
end
|
67
|
+
end
|
57
68
|
end
|
58
69
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
describe Payanyway::
|
1
|
+
describe Payanyway::Request::Check do
|
2
2
|
RSpec::Matchers.define :be_eq_node do |expected|
|
3
3
|
def value_of(node)
|
4
4
|
elements = node.children.select { |e| e.instance_of? Nokogiri::XML::Element }
|
@@ -22,8 +22,8 @@ describe Payanyway::Response::Check do
|
|
22
22
|
}
|
23
23
|
end
|
24
24
|
|
25
|
-
describe '#
|
26
|
-
let(:xml) { service.
|
25
|
+
describe '#response' do
|
26
|
+
let(:xml) { service.response(amount: amount, state: state, description: description, attributes: attributes) }
|
27
27
|
let(:amount) { request_amount }
|
28
28
|
let(:state) { :unpaid }
|
29
29
|
let(:description) { 'Заказ создан, но не оплачен' }
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: payanyway
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ssnikolay
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -169,13 +169,13 @@ files:
|
|
169
169
|
- lib/payanyway.rb
|
170
170
|
- lib/payanyway/controller.rb
|
171
171
|
- lib/payanyway/engine.rb
|
172
|
+
- lib/payanyway/factories/payment_url_factory.rb
|
172
173
|
- lib/payanyway/gateway.rb
|
173
174
|
- lib/payanyway/helpers/settings.rb
|
174
175
|
- lib/payanyway/helpers/signature_generator.rb
|
175
|
-
- lib/payanyway/request/
|
176
|
-
- lib/payanyway/
|
177
|
-
- lib/payanyway/
|
178
|
-
- lib/payanyway/response/pay.rb
|
176
|
+
- lib/payanyway/request/base.rb
|
177
|
+
- lib/payanyway/request/check.rb
|
178
|
+
- lib/payanyway/request/pay.rb
|
179
179
|
- lib/payanyway/version.rb
|
180
180
|
- payanyway.gemspec
|
181
181
|
- spec/config/payanyway_spec.rb
|
@@ -183,12 +183,12 @@ files:
|
|
183
183
|
- spec/controllers/payanyway_controller_spec.rb
|
184
184
|
- spec/internal/app/controllers/application_controller.rb
|
185
185
|
- spec/internal/config/payanyway.yml
|
186
|
+
- spec/lib/payanyway/factories/payment_url_factory_spec.rb
|
186
187
|
- spec/lib/payanyway/gateway_spec.rb
|
187
188
|
- spec/lib/payanyway/helpers/signature_generator_spec.rb
|
188
|
-
- spec/lib/payanyway/request/
|
189
|
-
- spec/lib/payanyway/
|
190
|
-
- spec/lib/payanyway/
|
191
|
-
- spec/lib/payanyway/response/pay_spec.rb
|
189
|
+
- spec/lib/payanyway/request/base_spec.rb
|
190
|
+
- spec/lib/payanyway/request/check_spec.rb
|
191
|
+
- spec/lib/payanyway/request/pay_spec.rb
|
192
192
|
- spec/spec_helper.rb
|
193
193
|
homepage: ''
|
194
194
|
licenses:
|
@@ -220,10 +220,10 @@ test_files:
|
|
220
220
|
- spec/controllers/payanyway_controller_spec.rb
|
221
221
|
- spec/internal/app/controllers/application_controller.rb
|
222
222
|
- spec/internal/config/payanyway.yml
|
223
|
+
- spec/lib/payanyway/factories/payment_url_factory_spec.rb
|
223
224
|
- spec/lib/payanyway/gateway_spec.rb
|
224
225
|
- spec/lib/payanyway/helpers/signature_generator_spec.rb
|
225
|
-
- spec/lib/payanyway/request/
|
226
|
-
- spec/lib/payanyway/
|
227
|
-
- spec/lib/payanyway/
|
228
|
-
- spec/lib/payanyway/response/pay_spec.rb
|
226
|
+
- spec/lib/payanyway/request/base_spec.rb
|
227
|
+
- spec/lib/payanyway/request/check_spec.rb
|
228
|
+
- spec/lib/payanyway/request/pay_spec.rb
|
229
229
|
- spec/spec_helper.rb
|