payanyway 1.2.6 → 2.0.0
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 +12 -10
- data/lib/payanyway/controller.rb +11 -11
- data/lib/payanyway/factories/payment_url_factory.rb +5 -1
- data/lib/payanyway/gateway.rb +2 -2
- data/lib/payanyway/request/base.rb +2 -2
- data/lib/payanyway/request/check.rb +2 -2
- data/lib/payanyway/request/pay.rb +1 -1
- data/lib/payanyway/version.rb +1 -1
- data/spec/lib/payanyway/factories/payment_url_factory_spec.rb +2 -2
- data/spec/lib/payanyway/gateway_spec.rb +9 -3
- 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: 06077962e86daa653defd01ffb1f707aaee9bfde
|
4
|
+
data.tar.gz: c6501c85c337160858dd80d8aca56d8e7ba0ac33
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e79ec02616965d5c6d2d8e6d24046bb513330650509250abc9f3031d141df4f879e24df8a602b411e9c9944aaca122dc6c5a338fe91c41e3dbee31e3a8c28e34
|
7
|
+
data.tar.gz: 1a7768deb3da108b295704f83630daccf328d715fd9cd339d0da6f03268afe06939f892b0d2e7f97bff5a1f7e220ac8e0964b2650aa99db8f83f47d0f3c66a69
|
data/README.md
CHANGED
@@ -50,7 +50,7 @@ end
|
|
50
50
|
class PayanywayController < ApplicationController
|
51
51
|
include Payanyway::Controller
|
52
52
|
|
53
|
-
def success_implementation(
|
53
|
+
def success_implementation(transaction_id)
|
54
54
|
# вызывается при отправке шлюзом пользователя на Success URL.
|
55
55
|
#
|
56
56
|
# ВНИМАНИЕ: является незащищенным действием!
|
@@ -61,12 +61,12 @@ class PayanywayController < ApplicationController
|
|
61
61
|
# вызывается при оповещении магазина об
|
62
62
|
# успешной оплате пользователем заказа. (Pay URL)
|
63
63
|
#
|
64
|
-
# params[ KEY ], где KEY ∈ [ :moneta_id, :
|
64
|
+
# params[ KEY ], где KEY ∈ [ :moneta_id, :transaction_id, :operation_id,
|
65
65
|
# :amount, :currency, :subscriber_id, :test_mode, :user, :corraccount,
|
66
66
|
# :custom1, :custom2, :custom3 ]
|
67
67
|
end
|
68
68
|
|
69
|
-
def fail_implementation(
|
69
|
+
def fail_implementation(transaction_id)
|
70
70
|
# вызывается при отправке шлюзом пользователя на Fail URL.
|
71
71
|
end
|
72
72
|
end
|
@@ -96,7 +96,7 @@ production: <<: *config
|
|
96
96
|
|
97
97
|
Чтобы получить ссылку на платежный шлюз для оплаты заказа пользователем,
|
98
98
|
используйте `Payanyway::Gateway.payment_url(params, use_signature = true)`, где `params[ KEY ]` такой, что `KEY` ∈
|
99
|
-
`[:
|
99
|
+
`[:transaction_id, :amount, :test_mode, :description, :subscriber_id, :custom1, :custom2, :custom3, :locale, :payment_system_unit_id, :payment_system_limit_ids]`
|
100
100
|
|
101
101
|
Если в настройках счета в системе **moneta.ru** выставлен флаг «Можно переопределять настройки в URL», то можно так же передавать
|
102
102
|
`[:success_url, :in_progress_url, :fail_url, :return_url]`.
|
@@ -110,7 +110,7 @@ class OrdersController < ApplicationController
|
|
110
110
|
def create
|
111
111
|
order = Order.create(params[:order])
|
112
112
|
redirect_to Payanyway::Gateway.payment_url(
|
113
|
-
|
113
|
+
transaction_id: order.id,
|
114
114
|
amount: order.total_amount,
|
115
115
|
description: "Оплата заказа № #{ order.number } на сумму #{ order.total_amount }руб."
|
116
116
|
)
|
@@ -118,6 +118,8 @@ class OrdersController < ApplicationController
|
|
118
118
|
end
|
119
119
|
```
|
120
120
|
|
121
|
+
*Примечание: при необходимости можно переопределить `moneta_id`, `currency`, `test_mode`, так же передав их в payment_url.*
|
122
|
+
|
121
123
|
###<a name="special_urls"></a> Специальные URL'ы
|
122
124
|
|
123
125
|
Gem **payanyway** добавляет специальные роуты для обработки запросов от шлюза.
|
@@ -129,7 +131,7 @@ class PayanywayController
|
|
129
131
|
...
|
130
132
|
def check_implementation(params)
|
131
133
|
# Вызывается при обработке проверочных запросов (Check URL)
|
132
|
-
# params[ KEY ], где KEY ∈ [ :moneta_id, :
|
134
|
+
# params[ KEY ], где KEY ∈ [ :moneta_id, :transaction_id, :operation_id,
|
133
135
|
# :amount, :currency, :subscriber_id, :test_mode, :user, :corraccount,
|
134
136
|
# :custom1, :custom2, :custom3, :payment_system_unit_id ]
|
135
137
|
|
@@ -146,7 +148,7 @@ end
|
|
146
148
|
```ruby
|
147
149
|
...
|
148
150
|
def check_implementation(params)
|
149
|
-
order = Order.find(params[:
|
151
|
+
order = Order.find(params[:transaction_id])
|
150
152
|
{
|
151
153
|
amount: order.total_amount,
|
152
154
|
state: order.state_for_payanyway, # нужно реализовать
|
@@ -180,11 +182,11 @@ end
|
|
180
182
|
```ruby
|
181
183
|
class PayanywayController
|
182
184
|
...
|
183
|
-
def return_implementation(
|
185
|
+
def return_implementation(transaction_id)
|
184
186
|
# Вызывается при добровольном отказе пользователем от оплаты (Return URL)
|
185
187
|
end
|
186
188
|
|
187
|
-
def in_progress_implementation(
|
189
|
+
def in_progress_implementation(transaction_id)
|
188
190
|
# Вызывается после успешного запроса на авторизацию средств,
|
189
191
|
# до подтверждения списания и зачисления средств (InProgress URL)
|
190
192
|
#
|
@@ -205,7 +207,7 @@ end
|
|
205
207
|
params[ KEY ], где KEY | В документации | Описание
|
206
208
|
---------------------------|:-------------------------|:-----------------------------------------
|
207
209
|
`:moneta_id` | `MNT_ID` | Идентификатор магазина в системе MONETA.RU.
|
208
|
-
`:
|
210
|
+
`:transaction_id` | `MNT_TRANSACTION_ID` | Внутренний идентификатор заказа, однозначно определяющий заказ в магазине.
|
209
211
|
`:operation_id` | `MNT_OPERATION_ID` | Номер операции в системе MONETA.RU.
|
210
212
|
`:amount` | `MNT_AMOUNT` | Фактическая сумма, полученная на оплату заказа.
|
211
213
|
`:currency` | `MNT_CURRENCY_CODE` | ISO код валюты, в которой произведена оплата заказа в магазине.
|
data/lib/payanyway/controller.rb
CHANGED
@@ -24,19 +24,19 @@ module Payanyway
|
|
24
24
|
def fail
|
25
25
|
request = Payanyway::Request::Base.new(params)
|
26
26
|
|
27
|
-
fail_implementation(request.pretty_params[:
|
27
|
+
fail_implementation(request.pretty_params[:transaction_id])
|
28
28
|
end
|
29
29
|
|
30
30
|
def return
|
31
31
|
request = Payanyway::Request::Base.new(params)
|
32
32
|
|
33
|
-
return_implementation(request.pretty_params[:
|
33
|
+
return_implementation(request.pretty_params[:transaction_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(request.pretty_params[:
|
39
|
+
in_progress_implementation(request.pretty_params[:transaction_id])
|
40
40
|
end
|
41
41
|
|
42
42
|
def check
|
@@ -58,34 +58,34 @@ module Payanyway
|
|
58
58
|
# Вызывается после успешного прохождения
|
59
59
|
# запроса об оплате от payanyway.ru
|
60
60
|
|
61
|
-
Rails.logger.info("PAYANYWAY: Success paid order #{ params[:
|
61
|
+
Rails.logger.info("PAYANYWAY: Success paid order #{ params[:transaction_id] }")
|
62
62
|
end
|
63
63
|
|
64
64
|
def success_implementation(params)
|
65
65
|
# Вызывается после успешной оплаты
|
66
66
|
|
67
|
-
Rails.logger.info("PAYANYWAY: Called success payment url for order '#{ params[:
|
67
|
+
Rails.logger.info("PAYANYWAY: Called success payment url for order '#{ params[:transaction_id] }'")
|
68
68
|
render nothing: true
|
69
69
|
end
|
70
70
|
|
71
|
-
def fail_implementation(
|
71
|
+
def fail_implementation(transaction_id)
|
72
72
|
# Вызывается после ошибки при оплате
|
73
73
|
|
74
|
-
Rails.logger.error("PAYANYWAY: Fail paid order '#{
|
74
|
+
Rails.logger.error("PAYANYWAY: Fail paid order '#{ transaction_id }'")
|
75
75
|
render nothing: true
|
76
76
|
end
|
77
77
|
|
78
|
-
def return_implementation(
|
78
|
+
def return_implementation(transaction_id)
|
79
79
|
# Вызывается при добровольном отказе пользователем от оплаты
|
80
80
|
|
81
|
-
Rails.logger.info("PAYANYWAY: Return from payanyway. Order '#{
|
81
|
+
Rails.logger.info("PAYANYWAY: Return from payanyway. Order '#{ transaction_id }'")
|
82
82
|
render nothing: true
|
83
83
|
end
|
84
84
|
|
85
|
-
def in_progress_implementation(
|
85
|
+
def in_progress_implementation(transaction_id)
|
86
86
|
# Вызывается после успешного запроса на авторизацию средств, до подтверждения списания и зачисления средств
|
87
87
|
|
88
|
-
Rails.logger.info("PAYANYWAY: Order '#{
|
88
|
+
Rails.logger.info("PAYANYWAY: Order '#{ transaction_id }' in progress")
|
89
89
|
render nothing: true
|
90
90
|
end
|
91
91
|
|
@@ -2,7 +2,11 @@ module Payanyway
|
|
2
2
|
module Factories
|
3
3
|
class PaymentUrlFactory
|
4
4
|
PARAMS = {
|
5
|
-
'
|
5
|
+
'MNT_ID' => :moneta_id,
|
6
|
+
'MNT_TEST_MODE' => :test_mode,
|
7
|
+
'MNT_CURRENCY_CODE' => :currency,
|
8
|
+
|
9
|
+
'MNT_TRANSACTION_ID' => :transaction_id,
|
6
10
|
'MNT_AMOUNT' => :amount,
|
7
11
|
'MNT_DESCRIPTION' => :description,
|
8
12
|
'MNT_SUBSCRIBER_ID' => :subscriber_id,
|
data/lib/payanyway/gateway.rb
CHANGED
@@ -25,8 +25,8 @@ module Payanyway
|
|
25
25
|
# * _use_signature_ - отправить код для идентификации отправителя и проверки целостности данных.
|
26
26
|
#
|
27
27
|
# Обязателные:
|
28
|
-
# * _params[
|
29
|
-
# * _params[amount]_
|
28
|
+
# * _params[transaction_id]_ - номер заказа в магазине.
|
29
|
+
# * _params[amount]_ - сумма заказа.
|
30
30
|
#
|
31
31
|
# Необязательные:
|
32
32
|
# * _params[test_mode]_ - Указание, что запрос происходит в тестовом режиме.
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Payanyway
|
2
2
|
module Request
|
3
3
|
class Base
|
4
|
-
@@_params = { 'MNT_TRANSACTION_ID' => :
|
4
|
+
@@_params = { 'MNT_TRANSACTION_ID' => :transaction_id }.invert.to_settings
|
5
5
|
|
6
6
|
attr_reader :pretty_params
|
7
7
|
|
@@ -11,7 +11,7 @@ module Payanyway
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def error_message
|
14
|
-
"ERROR! Invalid signature for order #{ @pretty_params[:
|
14
|
+
"ERROR! Invalid signature for order #{ @pretty_params[:transaction_id] }. Params: #{ @params.inspect }"
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -16,7 +16,7 @@ module Payanyway
|
|
16
16
|
@@_params = {
|
17
17
|
'MNT_COMMAND' => :command,
|
18
18
|
'MNT_ID' => :moneta_id,
|
19
|
-
'MNT_TRANSACTION_ID' => :
|
19
|
+
'MNT_TRANSACTION_ID' => :transaction_id,
|
20
20
|
'MNT_OPERATION_ID' => :operation_id,
|
21
21
|
'MNT_AMOUNT' => :amount,
|
22
22
|
'MNT_CURRENCY_CODE' => :currency,
|
@@ -72,7 +72,7 @@ module Payanyway
|
|
72
72
|
xml = <<-EOXML
|
73
73
|
<MNT_RESPONSE>
|
74
74
|
<MNT_ID>#{ Payanyway::Gateway.config['moneta_id'] }</MNT_ID>
|
75
|
-
<MNT_TRANSACTION_ID>#{ @pretty_params[:
|
75
|
+
<MNT_TRANSACTION_ID>#{ @pretty_params[:transaction_id] }</MNT_TRANSACTION_ID>
|
76
76
|
<MNT_RESULT_CODE>#{ result_code_of(amount, state) }</MNT_RESULT_CODE>
|
77
77
|
<MNT_DESCRIPTION>#{ description }</MNT_DESCRIPTION>
|
78
78
|
<MNT_AMOUNT>#{ amount }</MNT_AMOUNT>
|
data/lib/payanyway/version.rb
CHANGED
@@ -11,7 +11,7 @@ describe Payanyway::Factories::PaymentUrlFactory do
|
|
11
11
|
let(:params) {
|
12
12
|
{
|
13
13
|
amount: '120.25',
|
14
|
-
|
14
|
+
transaction_id: 'FF790ABCD',
|
15
15
|
success_url: 'success_url',
|
16
16
|
in_progress_url: 'in_progress_url',
|
17
17
|
fail_url: 'fail_url',
|
@@ -29,7 +29,7 @@ describe Payanyway::Factories::PaymentUrlFactory do
|
|
29
29
|
let(:params) {
|
30
30
|
{
|
31
31
|
amount: '120.25',
|
32
|
-
|
32
|
+
transaction_id: 'FF790ABCD',
|
33
33
|
locale: 'ru',
|
34
34
|
payment_system_unit_id: '1015',
|
35
35
|
payment_system_limit_ids: '1015,1017'
|
@@ -4,23 +4,29 @@ describe Payanyway::Gateway do
|
|
4
4
|
subject { described_class.payment_url(params, use_signature) }
|
5
5
|
|
6
6
|
context 'when min params' do
|
7
|
-
let(:params) { { amount: '120.25',
|
7
|
+
let(:params) { { amount: '120.25', transaction_id: 'FF790ABCD' } }
|
8
8
|
|
9
9
|
it { is_expected.to eq('https://demo.moneta.ru/assistant.htm?MNT_ID=141290&MNT_CURRENCY_CODE=RUB&MNT_TEST_MODE=1&MNT_AMOUNT=120.25&MNT_TRANSACTION_ID=FF790ABCD') }
|
10
10
|
it { is_expected.to_not be_include('MNT_SIGNATURE') }
|
11
11
|
end
|
12
12
|
|
13
13
|
context 'when have custom params' do
|
14
|
-
let(:params) { { amount: '120.25',
|
14
|
+
let(:params) { { amount: '120.25', transaction_id: 'FF790ABCD', custom1: 'utm_source' } }
|
15
15
|
|
16
16
|
it { is_expected.to eq('https://demo.moneta.ru/assistant.htm?MNT_ID=141290&MNT_CURRENCY_CODE=RUB&MNT_TEST_MODE=1&MNT_AMOUNT=120.25&MNT_TRANSACTION_ID=FF790ABCD&MNT_CUSTOM1=utm_source') }
|
17
17
|
end
|
18
18
|
|
19
19
|
context 'when use_signature == true' do
|
20
20
|
let(:use_signature) { true }
|
21
|
-
let(:params) { { amount: '120.25',
|
21
|
+
let(:params) { { amount: '120.25', transaction_id: 'FF790ABCD' } }
|
22
22
|
|
23
23
|
it { is_expected.to be_include('MNT_SIGNATURE') }
|
24
24
|
end
|
25
|
+
|
26
|
+
context 'when moneta_id is override' do
|
27
|
+
let(:params) { { amount: '120.25', transaction_id: 'FF790ABCD', moneta_id: '54321' } }
|
28
|
+
|
29
|
+
it { is_expected.to eq('https://demo.moneta.ru/assistant.htm?MNT_ID=54321&MNT_CURRENCY_CODE=RUB&MNT_TEST_MODE=1&MNT_AMOUNT=120.25&MNT_TRANSACTION_ID=FF790ABCD') }
|
30
|
+
end
|
25
31
|
end
|
26
32
|
end
|
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:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ssnikolay
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|