rbkmoney 0.0.1 → 0.1.1
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.
- data/.gitignore +1 -0
- data/README.md +53 -3
- data/lib/generators/rbkmoney/install_generator.rb +14 -0
- data/lib/generators/rbkmoney/templates/config/rbkmoney.yml +23 -0
- data/lib/rbkmoney.rb +9 -5
- data/lib/rbkmoney/helper.rb +50 -0
- data/lib/rbkmoney/notification.rb +94 -0
- data/lib/rbkmoney/version.rb +1 -1
- data/rbkmoney.gemspec +1 -1
- metadata +8 -3
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# RBK Money
|
2
2
|
|
3
|
-
|
3
|
+
This gem helps to integrate RBK Money payments into Ruby on Rails applications.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -16,9 +16,59 @@ Or install it yourself as:
|
|
16
16
|
|
17
17
|
$ gem install rbkmoney
|
18
18
|
|
19
|
+
And finally install `rbkmoney.yml` configuration file:
|
20
|
+
|
21
|
+
$ rails g rbkmoney:install
|
22
|
+
|
19
23
|
## Usage
|
20
24
|
|
21
|
-
|
25
|
+
1. Fill in your `config/rbkmoney.yml` file with data.
|
26
|
+
|
27
|
+
2. Create your RBK Money form as follows:
|
28
|
+
|
29
|
+
<%= rbkmoney_form_tag do %>
|
30
|
+
<%= rbkmoney_setup order_id: "<YOUR_ORDER_ID>",
|
31
|
+
item_name: "<ITEM_NAME>",
|
32
|
+
user_name: "<USER_NAME>",
|
33
|
+
user_email: "<USER_EMAIL>",
|
34
|
+
amount: 1,
|
35
|
+
success_url: "<CUSTOM_SUCCESS_URL>",
|
36
|
+
fail_url: "<CUSTOM_FAIL_URL>" %>
|
37
|
+
|
38
|
+
<%= submit_tag %>
|
39
|
+
<% end %>
|
40
|
+
|
41
|
+
3. Add payment processing to your controller, e.g.:
|
42
|
+
|
43
|
+
|
44
|
+
class PaymentsController
|
45
|
+
def process
|
46
|
+
def payment
|
47
|
+
notification = RBKMoney::Notification.new(params)
|
48
|
+
|
49
|
+
if notification.acknowledge # check if payment is valid
|
50
|
+
if notification.accepted? # check if payment is accepted
|
51
|
+
if notification.completed? # check if payment is completed
|
52
|
+
order = Order.find(notification.order_id)
|
53
|
+
if order # check if order exists
|
54
|
+
if order.total == notification.amount # check payment amount
|
55
|
+
...
|
56
|
+
head :ok and return
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
head :bad_request and return
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
4. Add route for your new action, e.g.:
|
69
|
+
|
70
|
+
post 'payments/process' => 'payments#process'
|
71
|
+
|
22
72
|
|
23
73
|
## Contributing
|
24
74
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Rbkmoney
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
desc << "Description:\n Copies configuration file to your application's config folder."
|
5
|
+
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
7
|
+
|
8
|
+
def copy_files
|
9
|
+
puts "Installing config:"
|
10
|
+
copy_file "config/rbkmoney.yml", "config/rbkmoney.yml"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
development:
|
2
|
+
eshop_id: <YOUR_ESHOP_ID>
|
3
|
+
eshop_account: <YOUR_ESHOP_ACCOUNT>
|
4
|
+
currency: 'RUR'
|
5
|
+
success_url: <SUCCESS_URL>
|
6
|
+
fail_url: <FAIL_URL>
|
7
|
+
secret_key: <SECRET_KEY>
|
8
|
+
|
9
|
+
test:
|
10
|
+
eshop_id: <YOUR_ESHOP_ID>
|
11
|
+
eshop_account: <YOUR_ESHOP_ACCOUNT>
|
12
|
+
currency: 'RUR'
|
13
|
+
success_url: <SUCCESS_URL>
|
14
|
+
fail_url: <FAIL_URL>
|
15
|
+
secret_key: <SECRET_KEY>
|
16
|
+
|
17
|
+
production:
|
18
|
+
eshop_id: <YOUR_ESHOP_ID>
|
19
|
+
eshop_account: <YOUR_ESHOP_ACCOUNT>
|
20
|
+
currency: 'RUR'
|
21
|
+
success_url: <SUCCESS_URL>
|
22
|
+
fail_url: <FAIL_URL>
|
23
|
+
secret_key: <SECRET_KEY>
|
data/lib/rbkmoney.rb
CHANGED
@@ -17,23 +17,27 @@ module RBKMoney
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.eshop_id
|
20
|
-
config['eshop_id'].to_i
|
20
|
+
self.config['eshop_id'].to_i rescue nil
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.eshop_account
|
24
|
-
config['eshop_account']
|
24
|
+
self.config['eshop_account'] rescue nil
|
25
25
|
end
|
26
26
|
|
27
27
|
def self.currency
|
28
|
-
config['currency']
|
28
|
+
self.config['currency'] rescue nil
|
29
29
|
end
|
30
30
|
|
31
31
|
def self.success_url
|
32
|
-
config['success_url']
|
32
|
+
self.config['success_url'] rescue nil
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.fail_url
|
36
|
-
config['fail_url']
|
36
|
+
self.config['fail_url'] rescue nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.secret_key
|
40
|
+
self.config['secret_key'] rescue nil
|
37
41
|
end
|
38
42
|
|
39
43
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module RBKMoney
|
2
|
+
module Helpers
|
3
|
+
def rbkmoney_form_tag(url = RBKMoney::purchase_uri, options = {})
|
4
|
+
form_tag(url, options)
|
5
|
+
end
|
6
|
+
|
7
|
+
def rbkmoney_form_tag(url = RBKMoney::purchase_uri, options = {}, &block)
|
8
|
+
if block
|
9
|
+
form_tag(url, options, &block)
|
10
|
+
else
|
11
|
+
form_tag(url, options)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def rbkmoney_setup(options = {})
|
16
|
+
params = {
|
17
|
+
eshop_id: RBKMoney::eshop_id,
|
18
|
+
currency: RBKMoney::currency,
|
19
|
+
success_url: RBKMoney::success_url,
|
20
|
+
fail_url: RBKMoney::fail_url,
|
21
|
+
locale: 'ru',
|
22
|
+
custom: []
|
23
|
+
}.reject{|k,v| v.nil?}.merge(options)
|
24
|
+
|
25
|
+
form = []
|
26
|
+
form << tag(:input, :type => 'hidden', :name => 'eshopId', :value => params[:eshop_id])
|
27
|
+
form << tag(:input, :type => 'hidden', :name => 'orderId', :value => params[:order_id])
|
28
|
+
form << tag(:input, :type => 'hidden', :name => 'serviceName', :value => params[:item_name])
|
29
|
+
form << tag(:input, :type => 'hidden', :name => 'recipientAmount', :value => params[:amount])
|
30
|
+
form << tag(:input, :type => 'hidden', :name => 'recipientCurrency', :value => params[:currency])
|
31
|
+
form << tag(:input, :type => 'hidden', :name => 'successUrl', :value => params[:success_url])
|
32
|
+
form << tag(:input, :type => 'hidden', :name => 'failUrl', :value => params[:fail_url])
|
33
|
+
form << tag(:input, :type => 'hidden', :name => 'requestedLanguage', :value => params[:locale])
|
34
|
+
form << tag(:input, :type => 'hidden', :name => 'userName', :value => params[:user_name])
|
35
|
+
form << tag(:input, :type => 'hidden', :name => 'user_email', :value => params[:user_email])
|
36
|
+
|
37
|
+
params[:custom].each_with_index do |value, i|
|
38
|
+
form << tag(:input, :type => 'hidden', :name => "userField_#{i}", :value => value)
|
39
|
+
end
|
40
|
+
|
41
|
+
form.map(&:to_s).join("\n").html_safe
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class Railtie < Rails::Railtie
|
46
|
+
initializer "rbkmoney.helpers" do
|
47
|
+
ActionView::Base.send :include, Helpers
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module RBKMoney
|
2
|
+
class Notification
|
3
|
+
attr_accessor :params
|
4
|
+
|
5
|
+
def initialize(p)
|
6
|
+
@params = p
|
7
|
+
end
|
8
|
+
|
9
|
+
def accepted?
|
10
|
+
completed? or status == "3"
|
11
|
+
end
|
12
|
+
|
13
|
+
def completed?
|
14
|
+
status == "5"
|
15
|
+
end
|
16
|
+
|
17
|
+
def amount
|
18
|
+
recipient_amount.to_f
|
19
|
+
end
|
20
|
+
|
21
|
+
def eshop_id
|
22
|
+
@params['eshopId']
|
23
|
+
end
|
24
|
+
|
25
|
+
def payment_id
|
26
|
+
@params['paymentId']
|
27
|
+
end
|
28
|
+
|
29
|
+
def order_id
|
30
|
+
@params['orderId']
|
31
|
+
end
|
32
|
+
|
33
|
+
def service_name
|
34
|
+
@params['serviceName']
|
35
|
+
end
|
36
|
+
|
37
|
+
def eshop_account
|
38
|
+
@params['eshopAccount']
|
39
|
+
end
|
40
|
+
|
41
|
+
def recipient_amount
|
42
|
+
@params['recipientAmount']
|
43
|
+
end
|
44
|
+
|
45
|
+
def currency
|
46
|
+
@params['recipientCurrency']
|
47
|
+
end
|
48
|
+
|
49
|
+
def status
|
50
|
+
@params['paymentStatus']
|
51
|
+
end
|
52
|
+
|
53
|
+
def user_name
|
54
|
+
@params['userName']
|
55
|
+
end
|
56
|
+
|
57
|
+
def user_email
|
58
|
+
@params['userEmail']
|
59
|
+
end
|
60
|
+
|
61
|
+
def payment_data
|
62
|
+
@params['paymentData']
|
63
|
+
end
|
64
|
+
|
65
|
+
def received_at
|
66
|
+
Time.parse payment_data
|
67
|
+
end
|
68
|
+
|
69
|
+
def secret_key
|
70
|
+
RBKMoney::secret_key
|
71
|
+
end
|
72
|
+
|
73
|
+
def received_hash
|
74
|
+
@params['hash']
|
75
|
+
end
|
76
|
+
|
77
|
+
def user_fields
|
78
|
+
@params.select{ |p| p =~ /userField_[0-9]+/ }.map{ |k, v| v }
|
79
|
+
end
|
80
|
+
|
81
|
+
def to_s
|
82
|
+
values = [:eshop_id, :order_id, :service_name, :recipient_amount, :currency, :status, :user_name, :user_email, :payment_data, :received_hash].map { |property| "#{property}: '#{self.send property}'" }.join(', ')
|
83
|
+
"<#{values}>"
|
84
|
+
end
|
85
|
+
|
86
|
+
def generated_hash
|
87
|
+
Digest::MD5.hexdigest([eshop_id, order_id, service_name, eshop_account, recipient_amount, currency, status, user_name, user_email, payment_data, secret_key].join('::'))
|
88
|
+
end
|
89
|
+
|
90
|
+
def acknowledge
|
91
|
+
received_hash == generated_hash
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
data/lib/rbkmoney/version.rb
CHANGED
data/rbkmoney.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.version = RBKMoney::VERSION
|
9
9
|
gem.authors = ["Maksim Gladkov"]
|
10
10
|
gem.email = ["maksim.gladkov@gmail.com"]
|
11
|
-
gem.description = %q{This gem helps to integrate RBK Money payments into Ruby on Rails applications
|
11
|
+
gem.description = %q{This gem helps to integrate RBK Money payments into Ruby on Rails applications}
|
12
12
|
gem.summary = %q{RBK Money wrapper gem for Ruby on Rails}
|
13
13
|
gem.homepage = ""
|
14
14
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbkmoney
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,9 +9,9 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-02-26 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
|
-
description: This gem helps to integrate RBK Money payments into Ruby on Rails applications
|
14
|
+
description: This gem helps to integrate RBK Money payments into Ruby on Rails applications
|
15
15
|
email:
|
16
16
|
- maksim.gladkov@gmail.com
|
17
17
|
executables: []
|
@@ -23,7 +23,11 @@ files:
|
|
23
23
|
- LICENSE.txt
|
24
24
|
- README.md
|
25
25
|
- Rakefile
|
26
|
+
- lib/generators/rbkmoney/install_generator.rb
|
27
|
+
- lib/generators/rbkmoney/templates/config/rbkmoney.yml
|
26
28
|
- lib/rbkmoney.rb
|
29
|
+
- lib/rbkmoney/helper.rb
|
30
|
+
- lib/rbkmoney/notification.rb
|
27
31
|
- lib/rbkmoney/version.rb
|
28
32
|
- rbkmoney.gemspec
|
29
33
|
homepage: ''
|
@@ -51,3 +55,4 @@ signing_key:
|
|
51
55
|
specification_version: 3
|
52
56
|
summary: RBK Money wrapper gem for Ruby on Rails
|
53
57
|
test_files: []
|
58
|
+
has_rdoc:
|