Commit 62499c52a846227c995eafd1a57a57e07e8f16dc

Authored by Jun Jiang
Committed by GitHub
2 parents 0a174775 5f14dc16
Exists in master

Merge pull request #92 from jasl/refactor-multi_account_in_sandbox_model

向后兼容性
@@ -11,7 +11,7 @@ module WxPay @@ -11,7 +11,7 @@ module WxPay
11 11
12 class<< self 12 class<< self
13 attr_accessor :appid, :mch_id, :key, :appsecret, :extra_rest_client_options, :debug_mode 13 attr_accessor :appid, :mch_id, :key, :appsecret, :extra_rest_client_options, :debug_mode
14 - attr_accessor :sandbox_mode 14 + attr_accessor :sandbox_mode, :sandbox_key
15 attr_reader :apiclient_cert, :apiclient_key 15 attr_reader :apiclient_cert, :apiclient_key
16 16
17 def set_apiclient_by_pkcs12(str, pass) 17 def set_apiclient_by_pkcs12(str, pass)
lib/wx_pay/service.rb
@@ -27,7 +27,7 @@ module WxPay @@ -27,7 +27,7 @@ module WxPay
27 ), quirks_mode: true) 27 ), quirks_mode: true)
28 end 28 end
29 29
30 - def self.get_sandbox_signkey(mch_id) 30 + def self.get_sandbox_signkey(mch_id = WxPay.mch_id)
31 params = { 31 params = {
32 mch_id: mch_id, 32 mch_id: mch_id,
33 nonce_str: SecureRandom.uuid.tr('-', '') 33 nonce_str: SecureRandom.uuid.tr('-', '')
@@ -453,11 +453,24 @@ module WxPay @@ -453,11 +453,24 @@ module WxPay
453 453
454 def xmlify_payload(params, sign_type = WxPay::Sign::SIGN_TYPE_MD5) 454 def xmlify_payload(params, sign_type = WxPay::Sign::SIGN_TYPE_MD5)
455 sign = WxPay::Sign.generate(params, sign_type) 455 sign = WxPay::Sign.generate(params, sign_type)
456 - params.delete(:key) if params[:key]  
457 - "<xml>#{params.map { |k, v| "<#{k}>#{v}</#{k}>" }.join}<sign>#{sign}</sign></xml>" 456 + "<xml>#{params.except(:key).map { |k, v| "<#{k}>#{v}</#{k}>" }.join}<sign>#{sign}</sign></xml>"
458 end 457 end
459 458
460 def make_payload(params, sign_type = WxPay::Sign::SIGN_TYPE_MD5) 459 def make_payload(params, sign_type = WxPay::Sign::SIGN_TYPE_MD5)
  460 + # TODO: Move this out
  461 + if WxPay.sandbox_mode? && !params[:key]
  462 + r = get_sandbox_signkey
  463 + if r['return_code'] == WxPay::Result::SUCCESS_FLAG
  464 + params = params.merge(
  465 + mch_id: r['mch_id'] || WxPay.mch_id,
  466 + key: r['sandbox_signkey']
  467 + )
  468 + WxPay.sandbox_key = r['sandbox_signkey']
  469 + else
  470 + warn("WxPay Warn: fetch sandbox sign key failed #{r['return_msg']}")
  471 + end
  472 + end
  473 +
461 xmlify_payload(params, sign_type) 474 xmlify_payload(params, sign_type)
462 end 475 end
463 476
lib/wx_pay/sign.rb
@@ -27,6 +27,9 @@ module WxPay @@ -27,6 +27,9 @@ module WxPay
27 def self.verify?(params, options = {}) 27 def self.verify?(params, options = {})
28 params = params.dup 28 params = params.dup
29 params = params.merge(options) 29 params = params.merge(options)
  30 + if WxPay.sandbox_mode? && !params[:key]
  31 + params[:key] = WxPay.sandbox_key
  32 + end
30 sign = params.delete('sign') || params.delete(:sign) 33 sign = params.delete('sign') || params.delete(:sign)
31 generate(params) == sign 34 generate(params) == sign
32 end 35 end