paysto-rails 1.0.4 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/generators/templates/config/paysto.rb +3 -7
- data/lib/paysto/base.rb +13 -5
- data/lib/paysto/controller.rb +2 -2
- data/lib/paysto/version.rb +1 -1
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7700a24bc357595d65d5bcf07880a171611f7635
|
4
|
+
data.tar.gz: 8dfd72717eaeae5936ff620c5a76feb3d5d2e190
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9716185ddc6a3691b9240eb189750d995f1a7401980422b9061093d2a13024a14421a669a3f8f569290c87a5b03e5f17dbc96eaaf888b2c24b545312663eb3e2
|
7
|
+
data.tar.gz: ff1a47758b4bde9ecdc77276be927191a110810b57b5ee67fa8dd381af3b8d110af4f6d529b32eaf6be316a926375080d8c18310ccf1bcfcf88c77bed085eb1c
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
This is quick implementation for passing payments through [Paysto](https://paysto.com) gateway. It works only with «[onlineMerchant](https://paysto.com/ru/products/onlineMerchant)». Your PRs are welcome.
|
10
10
|
|
11
|
-
Check demo shop in action: [
|
11
|
+
Check demo shop in action: [ror.paysto.in](https://ror.paysto.in/). And source code [here](https://github.com/fbandrey/paysto-demo).
|
12
12
|
|
13
13
|
## Installation
|
14
14
|
|
@@ -82,7 +82,7 @@ But you may override methods as you want. For example, if you want to redirect u
|
|
82
82
|
```
|
83
83
|
class PaystoController < ApplicationController
|
84
84
|
include Paysto::Controller
|
85
|
-
|
85
|
+
|
86
86
|
def success
|
87
87
|
flash[:success] = I18n.t('paysto.success')
|
88
88
|
redirect_to any_custom_payments_path
|
@@ -15,14 +15,10 @@ Paysto.setup do |config|
|
|
15
15
|
|
16
16
|
# === Paysto server IPs.
|
17
17
|
config.ips = [
|
18
|
-
'66.226.72.66',
|
19
|
-
'66.226.74.225',
|
20
|
-
'66.226.74.226',
|
21
|
-
'66.226.74.227',
|
22
|
-
'66.226.74.228',
|
23
18
|
'23.102.21.72',
|
19
|
+
'137.135.207.41',
|
24
20
|
'23.102.17.162',
|
25
|
-
'
|
21
|
+
'168.61.92.150'
|
26
22
|
]
|
27
23
|
|
28
24
|
# === Payments tax of your tariff plan in Paysto. Default onlineMerchant "All inclusive" is 5%.
|
@@ -39,4 +35,4 @@ Paysto.setup do |config|
|
|
39
35
|
config.invoice_class_name = 'Invoice'
|
40
36
|
config.invoice_notification_class_name = 'InvoiceNotification'
|
41
37
|
|
42
|
-
end
|
38
|
+
end
|
data/lib/paysto/base.rb
CHANGED
@@ -14,6 +14,8 @@ module Paysto
|
|
14
14
|
:invoice_class_name,
|
15
15
|
:invoice_notification_class_name
|
16
16
|
|
17
|
+
RXP = Regexp.new('[^a-zA-Z0-9$&%;:?!\.,\s}(\[){\]"\'`\\/|^_~*+=<>@-]+')
|
18
|
+
|
17
19
|
class << self
|
18
20
|
|
19
21
|
# Configuring module.
|
@@ -65,7 +67,7 @@ module Paysto
|
|
65
67
|
def get_payment_type(invoice_id, time = Time.zone.now)
|
66
68
|
_payments = get_payments(time.utc - 30.minutes, time.utc + 5.minutes)
|
67
69
|
if _payments.present?
|
68
|
-
p = _payments.select{|_p| _p[2].eql?(invoice_id.to_s)}.first
|
70
|
+
p = _payments.select{ |_p| _p[2].eql?(invoice_id.to_s) }.first
|
69
71
|
_type = p[7] if p
|
70
72
|
end
|
71
73
|
_type || 'common'
|
@@ -83,8 +85,8 @@ module Paysto
|
|
83
85
|
|
84
86
|
# Check whether the MD5 sign is valid.
|
85
87
|
def md5_valid?(p)
|
86
|
-
|
87
|
-
generate_md5(
|
88
|
+
hash = p.except('action', 'controller', 'PAYSTO_MD5')
|
89
|
+
generate_md5(hash) == p['PAYSTO_MD5']
|
88
90
|
end
|
89
91
|
|
90
92
|
# Timestamp string in Paysto format for payments expiration.
|
@@ -105,11 +107,17 @@ module Paysto
|
|
105
107
|
|
106
108
|
# Generating MD5 sign according with received params.
|
107
109
|
def generate_md5(p = {}, upcase = true)
|
108
|
-
|
109
|
-
md5 = Digest::MD5.hexdigest("#{hash_str}&#{@@secret}")
|
110
|
+
md5 = Digest::MD5.hexdigest(md5_string(p))
|
110
111
|
upcase ? md5.upcase : md5
|
111
112
|
end
|
112
113
|
|
114
|
+
# Final data string to gererane MD5.
|
115
|
+
def md5_string(p = {})
|
116
|
+
str = p.to_a.sort_by{ |pair| pair.first.downcase }.map{ |pair| pair.join('=') }.join('&')
|
117
|
+
str_with_secret = [str, @@secret].join('&')
|
118
|
+
str_with_secret.gsub(RXP, '')
|
119
|
+
end
|
120
|
+
|
113
121
|
# Base set of params for requests.
|
114
122
|
def base_params
|
115
123
|
p = { 'PAYSTO_SHOP_ID' => @@id }
|
data/lib/paysto/controller.rb
CHANGED
@@ -10,7 +10,7 @@ module Paysto
|
|
10
10
|
# First step of payment workflow: Invoice, IP and MD5 verification.
|
11
11
|
# Render invoice ID if everything right or anything else if not.
|
12
12
|
def check
|
13
|
-
invoice = Paysto.invoice_class.
|
13
|
+
invoice = Paysto.invoice_class.find_by(id: params['PAYSTO_INVOICE_ID'])
|
14
14
|
if Paysto.invoice_valid?(invoice) && Paysto.ip_valid?(request.remote_ip) && Paysto.md5_valid?(params)
|
15
15
|
render text: invoice.id
|
16
16
|
else
|
@@ -21,7 +21,7 @@ module Paysto
|
|
21
21
|
# Second step of payment workflow: Payment creation.
|
22
22
|
# Render invoice ID if everything right or anything else if not.
|
23
23
|
def callback
|
24
|
-
invoice = Paysto.invoice_class.
|
24
|
+
invoice = Paysto.invoice_class.find_by(id: params['PAYSTO_INVOICE_ID'])
|
25
25
|
if invoice && invoice.need_to_be_paid?(:paysto, params['PAYSTO_REQUEST_MODE'], params['PAYSTO_SUM']) && Paysto.ip_valid?(request.remote_ip) && Paysto.md5_valid?(params)
|
26
26
|
invoice.notify(params, :paysto)
|
27
27
|
invoice.send("create_#{Paysto.payment_class_name.underscore}", Paysto.get_payment_type(invoice.id), 'paysto', Paysto.real_amount(params['PAYSTO_SUM']))
|
data/lib/paysto/version.rb
CHANGED
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paysto-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrey Baiburin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: i18n
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: Paysto.com implementation for Ruby on Rails applications
|
@@ -59,7 +59,7 @@ executables: []
|
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
-
- .gitignore
|
62
|
+
- ".gitignore"
|
63
63
|
- Gemfile
|
64
64
|
- LICENSE.txt
|
65
65
|
- README.md
|
@@ -90,17 +90,17 @@ require_paths:
|
|
90
90
|
- lib
|
91
91
|
required_ruby_version: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
|
-
- -
|
93
|
+
- - ">="
|
94
94
|
- !ruby/object:Gem::Version
|
95
95
|
version: '0'
|
96
96
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
97
|
requirements:
|
98
|
-
- -
|
98
|
+
- - ">="
|
99
99
|
- !ruby/object:Gem::Version
|
100
100
|
version: '0'
|
101
101
|
requirements: []
|
102
102
|
rubyforge_project:
|
103
|
-
rubygems_version: 2.
|
103
|
+
rubygems_version: 2.5.1
|
104
104
|
signing_key:
|
105
105
|
specification_version: 4
|
106
106
|
summary: Paysto.com implementation for Ruby on Rails applications
|