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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e554827d1ea1d0ed21937e0807e456a1d5b2f2ae
4
- data.tar.gz: 9ca88d7a339f19b0b3942c1efddeca06ad07145c
3
+ metadata.gz: '095acc4705d19ce1dde710d46997e44bce982309'
4
+ data.tar.gz: 5ae7cfe1f7f1cd698a6a7ce93f85cf22aaad9714
5
5
  SHA512:
6
- metadata.gz: 1e3a88460f38e7fceb9107386b5c85014ef843f479e45240385b6d8c527407fa8066ac5ada6c21a3f711176bdb203d65cf751c3c9c8baf2905dd769998c2eabf
7
- data.tar.gz: '0896d2d318d0a0295026c0937fb9b3f16e81420f7a8a962f8c35f59ff296a8a4f46f46d90ac71bee6c7eac136b72c0fd5e232f4d5e26ceb57a8968c4b38a09c1'
6
+ metadata.gz: 206256b29d9175a0472edf336c8e03cf94fce73329574ae77df7bb8cc777c08a0e6c303d33734523eb00292b059beb09c34df69d7107fc873a9c94291e050da5
7
+ data.tar.gz: a586e9828b54d33be0b327976be7694861fb860db51a8acad36a0b8d1058f3c1305605220f19207cc3e26d57f5f432a68ca2a276deddf27abc5111d9a793b1cc
@@ -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, options = {})
69
+ def invoke_remote(url, payload)
70
70
  remote_url = url + "?#{payload}"
71
- Rails.logger.info "REMOTE_URL: #{remote_url}"
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
- "Version=#{params[:version]}&MerchantId=#{params[:merchant_id]}&MerchOrderId=#{params[:merch_order_id]}&"\
7
- "Amount=#{params[:amount]}&OrderDesc=#{params[:order_desc]}&TradeTime=#{params[:trade_time]}&ExpTime=#{params[:exp_time]}&"\
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
- "Version=#{params['Version']}&MerchantId=#{params['MerchantId']}&MerchOrderId=#{params['MerchOrderId']}&"\
14
- "Amount=#{params['Amount']}&TradeTime=#{params['TradeTime']}&OrderId=#{params['OrderId']}&VerifyTime=#{params['VerifyTime']}"
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
- "Version=#{params['Version']}&MerchantId=#{params['MerchantId']}&MerchOrderId=#{params['MerchOrderId']}&"\
19
- "Amount=#{params['Amount']}&ExtData=#{params['ExtData']}&OrderId=#{params['OrderId']}&Status=#{params['Status']}&"\
20
- "PayTime=#{params['PayTime']}&SettleDate=#{params['SettleDate']}"
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
- container = [:order_desc, :ext_data, :misc_data]
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
@@ -1,3 +1,3 @@
1
1
  module YlPay
2
- VERSION = "1.0.9"
2
+ VERSION = "1.1.0"
3
3
  end
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.9
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-14 00:00:00.000000000 Z
11
+ date: 2017-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler