payanyway 2.1.0 → 2.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01cb3c2c06e6d8fd8308a70d57ad554f2bbc8372
4
- data.tar.gz: ddc79fad090341cf5bb6ac5f32d58600cb35c6da
3
+ metadata.gz: f21fd360b24af27284a7454e590e7d8a728d8f86
4
+ data.tar.gz: 397e913d3e2d7ff45bdb47194a3586a9dc4097b0
5
5
  SHA512:
6
- metadata.gz: 3414f4fedbd1341f29f1d9d9449799c1aecdf4307e1f50a1eacf93fb04e7e45b6a438fd25ab6309b9a1e6a9c23a6e9f736faf386bf31c1ca98ebc0bc983a2c48
7
- data.tar.gz: efb6b8178bbfc14e4a9ba724faf2c1c0b748d11e0b09eb2e0e9e035239868890b5b62d555b924cd59caa68bcda01592904de0772bacc73fc1756d5169cd448ed
6
+ metadata.gz: 5206c312a90c926b6d547332343326972ba2681ae6bbfe7b7eaf642ce0078538d3bdefbdde8735d6a1e2b30997659b8bfed4e61c3bb9683322b9344a4087cbd4
7
+ data.tar.gz: b54db4f2f3cf498a6a715536282febe168dc73658f4f1dd3043997d8c5bd3a7a1322c5f715dbfa57c35a9a66b8c21f579c0d590734350e59b4c7184b5c195976
data/README.md CHANGED
@@ -13,6 +13,7 @@
13
13
  - [Подключение](#setup)
14
14
  - [Использование](#usage)
15
15
  - [Запрос на оплату](#payment_url)
16
+ - [Получение URL для отображения виджета оплаты](#widget_url)
16
17
  - [Специальные URL'ы](#special_urls)
17
18
  - [Check URL](#check_url)
18
19
  - [Return URL и InProgress URL](#return_url)
@@ -101,6 +102,15 @@ production: <<: *config
101
102
  Payanyway::Gateway.payment_url(params, use_signature = true)
102
103
  ```
103
104
 
105
+ ###<a name="widget_url"></a> Получение URL для отображения виджета оплаты
106
+
107
+ Чтобы получить ссылку на виджет для оплаты заказа пользователем,
108
+ используйте хелпер
109
+
110
+ ```ruby
111
+ Payanyway::Gateway.widget_url(params, use_signature = true)
112
+ ```
113
+
104
114
  Описание всех возможных параметров запроса (ключей params) находится [здесь](#params).
105
115
 
106
116
  Если в настройках счета в системе **moneta.ru** выставлен флаг «Можно переопределять настройки в URL», то можно так же передавать
@@ -1,58 +1,11 @@
1
1
  module Payanyway
2
2
  module Factories
3
3
  class PaymentUrlFactory
4
- PARAMS = {
5
- 'MNT_ID' => :moneta_id,
6
- 'MNT_TEST_MODE' => :test_mode,
7
- 'MNT_CURRENCY_CODE' => :currency,
8
-
9
- 'MNT_TRANSACTION_ID' => :transaction_id,
10
- 'MNT_AMOUNT' => :amount,
11
- 'MNT_DESCRIPTION' => :description,
12
- 'MNT_SUBSCRIBER_ID' => :subscriber_id,
13
-
14
- 'MNT_SUCCESS_URL' => :success_url,
15
- 'MNT_INPROGRESS_URL' => :in_progress_url,
16
- 'MNT_FAIL_URL' => :fail_url,
17
- 'MNT_RETURN_URL' => :return_url,
18
-
19
- 'MNT_CUSTOM1' => :custom1,
20
- 'MNT_CUSTOM2' => :custom2,
21
- 'MNT_CUSTOM3' => :custom3,
22
-
23
- 'moneta.locale' => :locale,
24
- 'paymentSystem.limitIds' => :payment_system_limit_ids,
25
-
26
- # Дополнительные параметры запроса на оплату
27
- 'followup' => :followup,
28
- 'paymentSystem.unitId' => :payment_system_unit_id,
29
- 'javascriptEnabled' => :javascript_enabled,
30
- 'paymentSystem.accountId' => :payment_system_account_id
31
- # 'MNT_SIGNATURE' => добавляется при use_signature == true
32
- }.to_settings
33
-
34
- class << self
35
- def build(params, use_signature)
36
- params_for_moneta = prepare_params(params, use_signature)
37
- query_params = params_for_moneta.to_a.map { |option| option.map{ |opt| CGI::escape(opt.to_s) }.join('=') }.join('&')
38
-
39
- "#{ Payanyway::Gateway.config['payment_url'] }?#{ query_params }"
40
- end
41
-
42
- private
43
-
44
- def prepare_params(params, use_signature)
45
- params_for_moneta = PARAMS.configure_by(params)
46
- params_for_moneta = Payanyway::Gateway.config_for_moneta.merge(params_for_moneta)
47
-
48
- use_signature ? add_signature(params_for_moneta) : params_for_moneta
49
- end
50
-
51
- def add_signature(params_for_moneta)
52
- params_for_moneta.merge({
53
- 'MNT_SIGNATURE' => Payanyway::Helpers::SignatureGenerate.for_url(params_for_moneta)
54
- })
55
- end
4
+ def self.build(params, use_signature)
5
+ [
6
+ Payanyway::Gateway.config['payment_url'],
7
+ Payanyway::Factories::QueryParamsFactory.build(params, use_signature)
8
+ ].join('?')
56
9
  end
57
10
  end
58
11
  end
@@ -0,0 +1,57 @@
1
+ module Payanyway
2
+ module Factories
3
+ class QueryParamsFactory
4
+ PARAMS = {
5
+ 'MNT_ID' => :moneta_id,
6
+ 'MNT_TEST_MODE' => :test_mode,
7
+ 'MNT_CURRENCY_CODE' => :currency,
8
+
9
+ 'MNT_TRANSACTION_ID' => :transaction_id,
10
+ 'MNT_AMOUNT' => :amount,
11
+ 'MNT_DESCRIPTION' => :description,
12
+ 'MNT_SUBSCRIBER_ID' => :subscriber_id,
13
+
14
+ 'MNT_SUCCESS_URL' => :success_url,
15
+ 'MNT_INPROGRESS_URL' => :in_progress_url,
16
+ 'MNT_FAIL_URL' => :fail_url,
17
+ 'MNT_RETURN_URL' => :return_url,
18
+
19
+ 'MNT_CUSTOM1' => :custom1,
20
+ 'MNT_CUSTOM2' => :custom2,
21
+ 'MNT_CUSTOM3' => :custom3,
22
+
23
+ 'moneta.locale' => :locale,
24
+ 'paymentSystem.limitIds' => :payment_system_limit_ids,
25
+
26
+ # Дополнительные параметры запроса на оплату
27
+ 'followup' => :followup,
28
+ 'paymentSystem.unitId' => :payment_system_unit_id,
29
+ 'javascriptEnabled' => :javascript_enabled,
30
+ 'paymentSystem.accountId' => :payment_system_account_id
31
+ # 'MNT_SIGNATURE' => добавляется при use_signature == true
32
+ }.to_settings
33
+
34
+ class << self
35
+ def build(params, use_signature)
36
+ params_for_moneta = prepare_params(params, use_signature)
37
+ params_for_moneta.to_a.map { |option| option.map{ |opt| CGI::escape(opt.to_s) }.join('=') }.join('&')
38
+ end
39
+
40
+ private
41
+
42
+ def prepare_params(params, use_signature)
43
+ params_for_moneta = PARAMS.configure_by(params)
44
+ params_for_moneta = Payanyway::Gateway.config_for_moneta.merge(params_for_moneta)
45
+
46
+ use_signature ? add_signature(params_for_moneta) : params_for_moneta
47
+ end
48
+
49
+ def add_signature(params_for_moneta)
50
+ params_for_moneta.merge({
51
+ 'MNT_SIGNATURE' => Payanyway::Helpers::SignatureGenerate.for_url(params_for_moneta)
52
+ })
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,12 @@
1
+ module Payanyway
2
+ module Factories
3
+ class WidgetUrlFactory
4
+ def self.build(params, use_signature)
5
+ [
6
+ Payanyway::Gateway.config['widget_url'],
7
+ Payanyway::Factories::QueryParamsFactory.build(params, use_signature)
8
+ ].join('?')
9
+ end
10
+ end
11
+ end
12
+ end
@@ -50,6 +50,10 @@ module Payanyway
50
50
  Payanyway::Factories::PaymentUrlFactory.build(params, use_signature)
51
51
  end
52
52
 
53
+ def widget_url(params, use_signature = true)
54
+ Payanyway::Factories::WidgetUrlFactory.build(params, use_signature)
55
+ end
56
+
53
57
  class << self
54
58
  extend Forwardable
55
59
  def_delegators(:instance, *Payanyway::Gateway.instance_methods(false))
@@ -61,4 +65,4 @@ module Payanyway
61
65
  YAML.load(File.read(File.join(Rails.root, 'config/payanyway.yml')))[@env]
62
66
  end
63
67
  end
64
- end
68
+ end
@@ -1,3 +1,3 @@
1
1
  module Payanyway
2
- VERSION = '2.1.0'
2
+ VERSION = '2.2.0'
3
3
  end
@@ -2,5 +2,6 @@ test:
2
2
  moneta_id: 141290
3
3
  currency: RUB
4
4
  payment_url: https://demo.moneta.ru/assistant.htm
5
+ widget_url: https://demo.moneta.ru/assistant.widget
5
6
  test_mode: 1
6
7
  token: secret_token
@@ -1,10 +1,10 @@
1
1
  require 'uri'
2
2
 
3
- describe Payanyway::Factories::PaymentUrlFactory do
3
+ describe Payanyway::Factories::QueryParamsFactory do
4
4
  subject do
5
- parse_url = URI(described_class.build(params, false))
5
+ built_params = described_class.build(params, false)
6
6
 
7
- Hash[ URI.decode_www_form(parse_url.query) ]
7
+ Hash[ URI.decode_www_form(built_params) ]
8
8
  end
9
9
 
10
10
  context 'when reset urls' do
@@ -29,4 +29,12 @@ describe Payanyway::Gateway do
29
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
30
  end
31
31
  end
32
+
33
+ describe '#widget_url' do
34
+ let(:params) { { amount: '120.25', transaction_id: 'FF790ABCD' } }
35
+
36
+ subject { described_class.widget_url(params, false) }
37
+
38
+ it { is_expected.to eq('https://demo.moneta.ru/assistant.widget?MNT_ID=141290&MNT_CURRENCY_CODE=RUB&MNT_TEST_MODE=1&MNT_AMOUNT=120.25&MNT_TRANSACTION_ID=FF790ABCD') }
39
+ end
32
40
  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: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ssnikolay
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-31 00:00:00.000000000 Z
11
+ date: 2017-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -169,6 +169,8 @@ files:
169
169
  - lib/payanyway/controller.rb
170
170
  - lib/payanyway/engine.rb
171
171
  - lib/payanyway/factories/payment_url_factory.rb
172
+ - lib/payanyway/factories/query_params_factory.rb
173
+ - lib/payanyway/factories/widget_url_factory.rb
172
174
  - lib/payanyway/gateway.rb
173
175
  - lib/payanyway/helpers/settings.rb
174
176
  - lib/payanyway/helpers/signature_generator.rb
@@ -184,7 +186,7 @@ files:
184
186
  - spec/internal/app/controllers/application_controller.rb
185
187
  - spec/internal/app/controllers/payanyway_controller.rb
186
188
  - spec/internal/config/payanyway.yml
187
- - spec/lib/payanyway/factories/payment_url_factory_spec.rb
189
+ - spec/lib/payanyway/factories/query_params_factory_spec.rb
188
190
  - spec/lib/payanyway/gateway_spec.rb
189
191
  - spec/lib/payanyway/helpers/signature_generator_spec.rb
190
192
  - spec/lib/payanyway/request/base_spec.rb
@@ -222,7 +224,7 @@ test_files:
222
224
  - spec/internal/app/controllers/application_controller.rb
223
225
  - spec/internal/app/controllers/payanyway_controller.rb
224
226
  - spec/internal/config/payanyway.yml
225
- - spec/lib/payanyway/factories/payment_url_factory_spec.rb
227
+ - spec/lib/payanyway/factories/query_params_factory_spec.rb
226
228
  - spec/lib/payanyway/gateway_spec.rb
227
229
  - spec/lib/payanyway/helpers/signature_generator_spec.rb
228
230
  - spec/lib/payanyway/request/base_spec.rb