Commit 62499c52a846227c995eafd1a57a57e07e8f16dc
Committed by
GitHub
Exists in
master
Merge pull request #92 from jasl/refactor-multi_account_in_sandbox_model
向后兼容性
Showing
3 changed files
with
20 additions
and
4 deletions
Show diff stats
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 | ... | ... |