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

向后兼容性
lib/wx_pay.rb
... ... @@ -11,7 +11,7 @@ module WxPay
11 11  
12 12 class<< self
13 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 15 attr_reader :apiclient_cert, :apiclient_key
16 16  
17 17 def set_apiclient_by_pkcs12(str, pass)
... ...
lib/wx_pay/service.rb
... ... @@ -27,7 +27,7 @@ module WxPay
27 27 ), quirks_mode: true)
28 28 end
29 29  
30   - def self.get_sandbox_signkey(mch_id)
  30 + def self.get_sandbox_signkey(mch_id = WxPay.mch_id)
31 31 params = {
32 32 mch_id: mch_id,
33 33 nonce_str: SecureRandom.uuid.tr('-', '')
... ... @@ -453,11 +453,24 @@ module WxPay
453 453  
454 454 def xmlify_payload(params, sign_type = WxPay::Sign::SIGN_TYPE_MD5)
455 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 457 end
459 458  
460 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 474 xmlify_payload(params, sign_type)
462 475 end
463 476  
... ...
lib/wx_pay/sign.rb
... ... @@ -27,6 +27,9 @@ module WxPay
27 27 def self.verify?(params, options = {})
28 28 params = params.dup
29 29 params = params.merge(options)
  30 + if WxPay.sandbox_mode? && !params[:key]
  31 + params[:key] = WxPay.sandbox_key
  32 + end
30 33 sign = params.delete('sign') || params.delete(:sign)
31 34 generate(params) == sign
32 35 end
... ...