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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f2eb674d07b211bc8b499ce2604c8f46b3b5a99
4
- data.tar.gz: 9d2a4c654a7d920338c1134baaa42df71d9147e7
3
+ metadata.gz: 11ee283007f8bb9cec689fc9d8a03d9546a0261f
4
+ data.tar.gz: 85572febaf942ac11241c62348db66cdc59d3e4c
5
5
  SHA512:
6
- metadata.gz: 6001ecd1d0b386e292e2454ffe27ddb88e1aca71e95226e18f1aa7e79f6d0ac6c607503149ba8512c04389142327431c49131da2d658eb71ef29bff1361f85a2
7
- data.tar.gz: ad97c89fffce27be5ba7ec15d52bb3b5910d5b25cac72a3674f1a058839b465cbe9e413d129588028ead950b825ffe1f13fb81ed2f098ba7226f47f48f47d3fe
6
+ metadata.gz: c6535386a0ac3b7f9f9bfc305df13f4aa99d7488569e5a800077c7ca6f992d14443206a90cfd4e90fb8b5b6c3a8ec21cfc51f220911edb508137cebe2c2f41ea
7
+ data.tar.gz: 682dce780f210eec25838e1608b486fab1e1fe346f942150480ea1357892291c98535b6035103f3ee34cba390ecba55cceece6311832f1fc0c62e98419d72cab
@@ -25,8 +25,8 @@ module RockFintech
25
25
  recursive_include_api('RockFintech::Form')
26
26
  end
27
27
 
28
- def decode_notify_data(encryptkey, data)
29
- # ::RockFintech::Http::Decode.decode_notify_data(encryptkey, data, @config)
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
- res = decode_body(http_response.body)
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: verify_sign(res))
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[:errorCode] = 'sign_valid_fail'
21
- self.data[:errorMsg] = '数据签名错误'
20
+ self.data[:code] = 'sign_valid_fail'
21
+ self.data[:msg] = '数据签名错误'
22
22
  end
23
23
  end
24
24
 
@@ -9,10 +9,6 @@ module RockFintech
9
9
  md5.hexdigest
10
10
  end
11
11
 
12
- def self.verify?(content, key, sign_str)
13
- sign(content, key) == sign_str
14
- end
15
-
16
12
  end
17
13
  end
18
14
  end
@@ -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
@@ -1,3 +1,3 @@
1
1
  module RockFintech
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
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.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