payanyway 1.2.6 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|