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,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 |