payanyway 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/payanyway.svg)](http://badge.fury.io/rb/payanyway)
|
1
2
|
[![Build Status](https://travis-ci.org/ssnikolay/payanyway.svg?branch=master)](https://travis-ci.org/ssnikolay/payanyway)
|
2
3
|
[![Code Climate](https://codeclimate.com/github/ssnikolay/payanyway.svg)](https://codeclimate.com/github/ssnikolay/payanyway)
|
3
4
|
[![Test Coverage](https://codeclimate.com/github/ssnikolay/payanyway/badges/coverage.svg)](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
|