rock_fintech 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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