rock_fintech 0.4.0 → 0.5.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/rock_fintech/client.rb +2 -2
- data/lib/rock_fintech/http/request.rb +7 -39
- data/lib/rock_fintech/http/response.rb +2 -2
- data/lib/rock_fintech/sign/md5.rb +0 -4
- data/lib/rock_fintech/sign/sign.rb +38 -0
- data/lib/rock_fintech/version.rb +1 -1
- data/lib/rock_fintech.rb +1 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11ee283007f8bb9cec689fc9d8a03d9546a0261f
|
4
|
+
data.tar.gz: 85572febaf942ac11241c62348db66cdc59d3e4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c6535386a0ac3b7f9f9bfc305df13f4aa99d7488569e5a800077c7ca6f992d14443206a90cfd4e90fb8b5b6c3a8ec21cfc51f220911edb508137cebe2c2f41ea
|
7
|
+
data.tar.gz: 682dce780f210eec25838e1608b486fab1e1fe346f942150480ea1357892291c98535b6035103f3ee34cba390ecba55cceece6311832f1fc0c62e98419d72cab
|
data/lib/rock_fintech/client.rb
CHANGED
@@ -25,8 +25,8 @@ module RockFintech
|
|
25
25
|
recursive_include_api('RockFintech::Form')
|
26
26
|
end
|
27
27
|
|
28
|
-
def
|
29
|
-
|
28
|
+
def verify_data?(data)
|
29
|
+
Sign.verify(data, @config)
|
30
30
|
end
|
31
31
|
|
32
32
|
private
|
@@ -29,7 +29,7 @@ module RockFintech
|
|
29
29
|
encode: ENCODE,
|
30
30
|
version: @version,
|
31
31
|
}.merge(@params)
|
32
|
-
sign_str = sign(sign_body)
|
32
|
+
sign_str = Sign.sign(sign_body, @config)
|
33
33
|
|
34
34
|
# 3. merge sign
|
35
35
|
post_body = sign_body.merge({sign: sign_str})
|
@@ -47,57 +47,25 @@ module RockFintech
|
|
47
47
|
http_response = RestClient.post(@uri, request_data, header)
|
48
48
|
RockFintech.logger.info "#{identifier} 返回的报文为:\n#{http_response.body.force_encoding('utf-8')}\n"
|
49
49
|
|
50
|
-
|
50
|
+
# 6. decode http response
|
51
|
+
result_str = Encrypt::RSA.decrypt(http_response.body, @config[:private_key])
|
52
|
+
res = Utils.symbolize_keys(JSON.parse(result_str))
|
53
|
+
|
51
54
|
RockFintech.logger.info "#{identifier} 返回的数据为:\n#{res}\n"
|
52
55
|
|
56
|
+
# 7. create response
|
53
57
|
@response = RockFintech::Http::Response.new(service: @service,
|
54
58
|
flow_id: @params[:out_serial_no],
|
55
59
|
http_response: http_response,
|
56
60
|
raw_body: http_response.body,
|
57
61
|
data: res,
|
58
|
-
data_valid:
|
62
|
+
data_valid: Sign.verify(res, @config))
|
59
63
|
end
|
60
64
|
|
61
65
|
def identifier
|
62
66
|
"[#{@service} - #{@params[:out_serial_no]}] "
|
63
67
|
end
|
64
68
|
|
65
|
-
private
|
66
|
-
|
67
|
-
def sign(data)
|
68
|
-
serialize_str = serialize(data)
|
69
|
-
Sign::MD5.sign(serialize_str, Sign::MD5.sign(@config[:rft_key], @config[:rft_secret]))
|
70
|
-
end
|
71
|
-
|
72
|
-
def serialize(data)
|
73
|
-
data = Hash[data.sort] # key 按照 alphabet 排序
|
74
|
-
|
75
|
-
data.each{ |k, v|
|
76
|
-
if v.kind_of?(Hash)
|
77
|
-
data[k] = serialize(v)
|
78
|
-
elsif v.kind_of?(Array)
|
79
|
-
if v[0].kind_of?(Hash)
|
80
|
-
v.each_with_index{ |ele, index|
|
81
|
-
v[index] = sign(ele)
|
82
|
-
}
|
83
|
-
else
|
84
|
-
data[k] = v.join('&')
|
85
|
-
end
|
86
|
-
end
|
87
|
-
}
|
88
|
-
|
89
|
-
data.map{|k,v| "#{k}=#{v}"}.join('&')
|
90
|
-
end
|
91
|
-
|
92
|
-
def decode_body(body)
|
93
|
-
result_str = Encrypt::RSA.decrypt(body, @config[:private_key])
|
94
|
-
Utils.symbolize_keys(JSON.parse(result_str))
|
95
|
-
end
|
96
|
-
|
97
|
-
def verify_sign(body)
|
98
|
-
sign_str = body.delete(:sign)
|
99
|
-
sign(body) == sign_str
|
100
|
-
end
|
101
69
|
end # end of class
|
102
70
|
end
|
103
71
|
end
|
@@ -17,8 +17,8 @@ module RockFintech
|
|
17
17
|
self.data = {} if self.data.nil? # 默认一定要有
|
18
18
|
|
19
19
|
unless self.data_valid
|
20
|
-
self.data[:
|
21
|
-
self.data[:
|
20
|
+
self.data[:code] = 'sign_valid_fail'
|
21
|
+
self.data[:msg] = '数据签名错误'
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
module RockFintech
|
3
|
+
module Sign
|
4
|
+
|
5
|
+
def self.sign(data, config)
|
6
|
+
serialize_str = serialize(data)
|
7
|
+
Sign::MD5.sign(serialize_str, Sign::MD5.sign(config[:rft_key], config[:rft_secret]))
|
8
|
+
end # sign
|
9
|
+
|
10
|
+
def self.verify(data, config)
|
11
|
+
sign_str = data.delete(:sign)
|
12
|
+
self.sign(data, config) == sign_str
|
13
|
+
end # verify
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def self.serialize(data)
|
18
|
+
data = Hash[data.sort] # key 按照 alphabet 排序
|
19
|
+
|
20
|
+
data.each{ |k, v|
|
21
|
+
if v.kind_of?(Hash) # 如果是 hash 接着 serialize
|
22
|
+
data[k] = serialize(v)
|
23
|
+
elsif v.kind_of?(Array)
|
24
|
+
if v[0].kind_of?(Hash) # 如果是 hash 数组对元素接着 serialize
|
25
|
+
v.each_with_index{ |ele, index|
|
26
|
+
v[index] = ele.to_json #serialize(ele)
|
27
|
+
}
|
28
|
+
else # 如果是普通元素数组
|
29
|
+
data[k] = v.join('&')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
}
|
33
|
+
|
34
|
+
data.map{|k,v| "#{k}=#{v}"}.join('&')
|
35
|
+
end # serialize
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
data/lib/rock_fintech/version.rb
CHANGED
data/lib/rock_fintech.rb
CHANGED
@@ -15,6 +15,7 @@ require "rock_fintech/version"
|
|
15
15
|
require "rock_fintech/utils"
|
16
16
|
require "rock_fintech/extensions"
|
17
17
|
require "rock_fintech/sign/md5"
|
18
|
+
require "rock_fintech/sign/sign"
|
18
19
|
require "rock_fintech/encrypt/rsa"
|
19
20
|
require "rock_fintech/http/request"
|
20
21
|
require "rock_fintech/http/response"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rock_fintech
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- chenpengyu
|
@@ -229,6 +229,7 @@ files:
|
|
229
229
|
- lib/rock_fintech/http/response.rb
|
230
230
|
- lib/rock_fintech/railtie.rb
|
231
231
|
- lib/rock_fintech/sign/md5.rb
|
232
|
+
- lib/rock_fintech/sign/sign.rb
|
232
233
|
- lib/rock_fintech/utils.rb
|
233
234
|
- lib/rock_fintech/version.rb
|
234
235
|
- rock_fintech.gemspec
|