yl_pay 1.0.9 → 1.1.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/lib/yl_pay/service.rb +4 -3
- data/lib/yl_pay/utils.rb +61 -23
- data/lib/yl_pay/version.rb +1 -1
- 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: '095acc4705d19ce1dde710d46997e44bce982309'
|
4
|
+
data.tar.gz: 5ae7cfe1f7f1cd698a6a7ce93f85cf22aaad9714
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 206256b29d9175a0472edf336c8e03cf94fce73329574ae77df7bb8cc777c08a0e6c303d33734523eb00292b059beb09c34df69d7107fc873a9c94291e050da5
|
7
|
+
data.tar.gz: a586e9828b54d33be0b327976be7694861fb860db51a8acad36a0b8d1058f3c1305605220f19207cc3e26d57f5f432a68ca2a276deddf27abc5111d9a793b1cc
|
data/lib/yl_pay/service.rb
CHANGED
@@ -32,7 +32,7 @@ module YlPay
|
|
32
32
|
def self.check_notify_sign(params)
|
33
33
|
sign = params.delete('Sign')
|
34
34
|
notify_sign = YlPay::Utils.notify_sign(params)
|
35
|
-
Rails.logger.info "NOTIFY_SIGN: #{notify_sign}&Sign=#{sign}"
|
35
|
+
# Rails.logger.info "NOTIFY_SIGN: #{notify_sign}&Sign=#{sign}"
|
36
36
|
YlPay::Sign.verify?(notify_sign, sign)
|
37
37
|
end
|
38
38
|
|
@@ -66,9 +66,10 @@ module YlPay
|
|
66
66
|
"TradeCode=#{trade_code}&" + YlPay::Utils.uri_params(params) + "&Sign=#{rsa_sign}"
|
67
67
|
end
|
68
68
|
|
69
|
-
def invoke_remote(url, payload
|
69
|
+
def invoke_remote(url, payload)
|
70
70
|
remote_url = url + "?#{payload}"
|
71
|
-
|
71
|
+
p remote_url
|
72
|
+
# Rails.logger.info "REMOTE_URL: #{remote_url}"
|
72
73
|
Faraday.get(remote_url).body
|
73
74
|
end
|
74
75
|
|
data/lib/yl_pay/utils.rb
CHANGED
@@ -1,44 +1,82 @@
|
|
1
1
|
module YlPay
|
2
|
+
require 'uri'
|
2
3
|
require 'base64'
|
4
|
+
require 'active_support/core_ext/string'
|
3
5
|
|
4
6
|
class Utils
|
7
|
+
PARAM_SIGN_FIELD = %w(version merchant_id merch_order_id amount order_desc trade_time exp_time notify_url
|
8
|
+
return_url ext_data misc_data notify_flag client_ip)
|
9
|
+
NOTIFY_SIGN_FIELD = %w(version merchant_id merch_order_id amount ext_data order_id status pay_time settle_date)
|
10
|
+
BACK_SIGN_FIELD = %w(version merchant_id merch_order_id amount trade_time order_id verify_time)
|
11
|
+
|
5
12
|
def self.param_sign(params)
|
6
|
-
|
7
|
-
|
8
|
-
"NotifyUrl=#{params[:notify_url]}&ReturnUrl=#{params[:return_url]}&ExtData=#{params[:ext_data]}&"\
|
9
|
-
"MiscData=#{params[:misc_data]}&NotifyFlag=#{params[:notify_flag]}&ClientIp=#{params[:client_ip]}"
|
13
|
+
hash_params = params_sign_to_hash(params, PARAM_SIGN_FIELD)
|
14
|
+
sign_uri hash_params
|
10
15
|
end
|
11
16
|
|
12
17
|
def self.back_sign(params)
|
13
|
-
|
14
|
-
|
18
|
+
hash_params = params_to_hash(params, BACK_SIGN_FIELD)
|
19
|
+
sign_uri hash_params
|
15
20
|
end
|
16
21
|
|
17
22
|
def self.notify_sign(params)
|
18
|
-
|
19
|
-
|
20
|
-
|
23
|
+
hash_params = params_to_hash(params, NOTIFY_SIGN_FIELD)
|
24
|
+
sign_uri hash_params
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.sign_uri(hash)
|
28
|
+
string_to_uri(stringify_keys(hash))
|
21
29
|
end
|
22
30
|
|
23
|
-
# 提交参数中包含中文的需要做base64
|
31
|
+
# 提交参数中包含中文的需要做base64转码, 对url进行urlencode处理
|
24
32
|
def self.uri_params(params)
|
25
|
-
|
26
|
-
new_params = params.collect do |param|
|
27
|
-
if container.include? param[0]
|
28
|
-
param[1] = Base64.strict_encode64(param[1])
|
29
|
-
end
|
30
|
-
param
|
31
|
-
end
|
33
|
+
new_params = param_base64_field(params)
|
32
34
|
new_params = Hash[new_params]
|
33
35
|
new_params[:notify_url] = CGI.escape(new_params[:notify_url]) if new_params.key?(:notify_url)
|
34
36
|
new_params[:return_url] = CGI.escape(new_params[:return_url]) if new_params.key?(:return_url)
|
35
37
|
param_sign new_params
|
36
38
|
end
|
39
|
+
|
40
|
+
PARAM_BASE64_FIELD = [:order_desc, :ext_data, :misc_data]
|
41
|
+
def self.param_base64_field(params)
|
42
|
+
params.collect do |param|
|
43
|
+
if PARAM_BASE64_FIELD.include? param[0]
|
44
|
+
param[1] = Base64.strict_encode64(param[1])
|
45
|
+
end
|
46
|
+
param
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# hash的键需要大写, 里面获取值参数也是大写 params['A': 'b']
|
51
|
+
def self.params_to_hash(params, target_params)
|
52
|
+
target_params.collect!(&:camelize)
|
53
|
+
hash = {}
|
54
|
+
target_params.collect do |k|
|
55
|
+
hash.merge!("#{k}": params[k])
|
56
|
+
end
|
57
|
+
hash
|
58
|
+
end
|
59
|
+
|
60
|
+
# 针对param_sign hash的键大写,里面获取值参数小写 params[:A: 'b']
|
61
|
+
def self.params_sign_to_hash(params, target_params)
|
62
|
+
hash = {}
|
63
|
+
target_params.collect do |k|
|
64
|
+
k1 = k.camelize
|
65
|
+
hash.merge!("#{k1}": params[k.to_sym])
|
66
|
+
end
|
67
|
+
hash
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.string_to_uri(params)
|
71
|
+
params.map{|entry| entry * '='} * '&'
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.stringify_keys(hash)
|
75
|
+
new_hash = {}
|
76
|
+
hash.each do |key, value|
|
77
|
+
new_hash[(key.to_s rescue key) || key] = value.to_s
|
78
|
+
end
|
79
|
+
new_hash
|
80
|
+
end
|
37
81
|
end
|
38
82
|
end
|
39
|
-
|
40
|
-
# def self.param_sign_auto(params)
|
41
|
-
# return_str = ''
|
42
|
-
# params.each { |k, v| return_str << "#{k.to_s.split('_').collect(&:capitalize).join}=#{v}&" }
|
43
|
-
# return_str.split.join(' ').chop
|
44
|
-
# end
|
data/lib/yl_pay/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yl_pay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ricky
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|