diff --git a/lib/wx_pay/service.rb b/lib/wx_pay/service.rb index 711a8d8..05f30a8 100644 --- a/lib/wx_pay/service.rb +++ b/lib/wx_pay/service.rb @@ -8,14 +8,14 @@ module WxPay INVOKE_UNIFIEDORDER_REQUIRED_FIELDS = %i(body out_trade_no total_fee spbill_create_ip notify_url trade_type) def self.invoke_unifiedorder(params, options = {}) params = { - appid: options[:appid] || WxPay.appid, - mch_id: options[:mch_id] || WxPay.mch_id, + appid: options.delete(:appid) || WxPay.appid, + mch_id: options.delete(:mch_id) || WxPay.mch_id, nonce_str: SecureRandom.uuid.tr('-', '') }.merge(params) check_required_options(params, INVOKE_UNIFIEDORDER_REQUIRED_FIELDS) - r = invoke_remote("#{GATEWAY_URL}/pay/unifiedorder", make_payload(params)) + r = invoke_remote("#{GATEWAY_URL}/pay/unifiedorder", make_payload(params), options) yield r if block_given? @@ -25,8 +25,8 @@ module WxPay GENERATE_APP_PAY_REQ_REQUIRED_FIELDS = %i(prepayid noncestr) def self.generate_app_pay_req(params, options = {}) params = { - appid: options[:appid] || WxPay.appid, - partnerid: options[:mch_id] || WxPay.mch_id, + appid: options.delete(:appid) || WxPay.appid, + partnerid: options.delete(:mch_id) || WxPay.mch_id, package: 'Sign=WXPay', timestamp: Time.now.to_i.to_s }.merge(params) @@ -38,24 +38,25 @@ module WxPay params end - INVOKE_REFUND_REQUIRED_FIELDS = %i(out_refund_no total_fee refund_fee) + INVOKE_REFUND_REQUIRED_FIELDS = %i(out_refund_no total_fee refund_fee op_user_id) def self.invoke_refund(params, options = {}) params = { - appid: options[:appid] || WxPay.appid, - mch_id: options[:mch_id] || WxPay.mch_id, + appid: options.delete(:appid) || WxPay.appid, + mch_id: options.delete(:mch_id) || WxPay.mch_id, nonce_str: SecureRandom.uuid.tr('-', ''), - op_user_id: options[:mch_id] || WxPay.mch_id }.merge(params) + params[:op_user_id] ||= params[:mch_id] + check_required_options(params, INVOKE_REFUND_REQUIRED_FIELDS) - r = invoke_remote "#{GATEWAY_URL}/secapi/pay/refund", - make_payload(params), - { - ssl_client_cert: options[:apiclient_cert] || WxPay.apiclient_cert, - ssl_client_key: options[:apiclient_key] || WxPay.apiclient_key, - verify_ssl: OpenSSL::SSL::VERIFY_NONE - } + options = { + ssl_client_cert: options.delete(:apiclient_cert) || WxPay.apiclient_cert, + ssl_client_key: options.delete(:apiclient_key) || WxPay.apiclient_key, + verify_ssl: OpenSSL::SSL::VERIFY_NONE + }.merge(options) + + r = invoke_remote("#{GATEWAY_URL}/secapi/pay/refund", make_payload(params), options) yield(r) if block_given? @@ -65,20 +66,20 @@ module WxPay INVOKE_TRANSFER_REQUIRED_FIELDS = %i(partner_trade_no openid check_name amount desc spbill_create_ip) def self.invoke_transfer(params, options = {}) params = { - mch_appid: options[:appid] || WxPay.appid, - mchid: options[:mch_id] || WxPay.mch_id, + mch_appid: options.delete(:appid) || WxPay.appid, + mchid: options.delete(:mch_id) || WxPay.mch_id, nonce_str: SecureRandom.uuid.tr('-', '') }.merge(params) check_required_options(params, INVOKE_TRANSFER_REQUIRED_FIELDS) - r = invoke_remote "#{GATEWAY_URL}/mmpaymkttransfers/promotion/transfers", - make_payload(params), - { - ssl_client_cert: options[:apiclient_cert] || WxPay.apiclient_cert, - ssl_client_key: options[:apiclient_key] || WxPay.apiclient_key, - verify_ssl: OpenSSL::SSL::VERIFY_NONE - } + options = { + ssl_client_cert: options.delete(:apiclient_cert) || WxPay.apiclient_cert, + ssl_client_key: options.delete(:apiclient_key) || WxPay.apiclient_key, + verify_ssl: OpenSSL::SSL::VERIFY_NONE + }.merge(options) + + r = invoke_remote("#{GATEWAY_URL}/mmpaymkttransfers/promotion/transfers", make_payload(params), options) yield r if block_given? @@ -88,30 +89,20 @@ module WxPay INVOKE_REVERSE_REQUIRED_FIELDS = %i(out_trade_no) def self.invoke_reverse(params, options = {}) params = { - appid: options[:appid] || WxPay.appid, - mch_id: options[:mch_id] || WxPay.mch_id, + appid: options.delete(:appid) || WxPay.appid, + mch_id: options.delete(:mch_id) || WxPay.mch_id, nonce_str: SecureRandom.uuid.tr('-', '') }.merge(params) check_required_options(params, INVOKE_REVERSE_REQUIRED_FIELDS) - # 微信退款需要双向证书 - # https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4 - # https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3 - - WxPay.extra_rest_client_options = { - ssl_client_cert: WxPay.apiclient_cert.certificate, - ssl_client_key: WxPay.apiclient_cert.key, + options = { + ssl_client_cert: options.delete(:apiclient_cert) || WxPay.apiclient_cert, + ssl_client_key: options.delete(:apiclient_key) || WxPay.apiclient_key, verify_ssl: OpenSSL::SSL::VERIFY_NONE - } + }.merge(options) - r = invoke_remote "#{GATEWAY_URL}/secapi/pay/reverse", - make_payload(params), - { - ssl_client_cert: options[:apiclient_cert] || WxPay.apiclient_cert, - ssl_client_key: options[:apiclient_key] || WxPay.apiclient_key, - verify_ssl: OpenSSL::SSL::VERIFY_NONE - } + r = invoke_remote("#{GATEWAY_URL}/secapi/pay/reverse", make_payload(params), options) yield(r) if block_given? @@ -121,20 +112,20 @@ module WxPay INVOKE_MICROPAY_REQUIRED_FIELDS = %i(body out_trade_no total_fee spbill_create_ip auth_code) def self.invoke_micropay(params, options = {}) params = { - appid: options[:appid] || WxPay.appid, - mch_id: options[:mch_id] || WxPay.mch_id, + appid: options.delete(:appid) || WxPay.appid, + mch_id: options.delete(:mch_id) || WxPay.mch_id, nonce_str: SecureRandom.uuid.tr('-', '') }.merge(params) check_required_options(params, INVOKE_MICROPAY_REQUIRED_FIELDS) - r = invoke_remote "#{GATEWAY_URL}/pay/micropay", - make_payload(params), - { - ssl_client_cert: options[:apiclient_cert] || WxPay.apiclient_cert, - ssl_client_key: options[:apiclient_key] || WxPay.apiclient_key, - verify_ssl: OpenSSL::SSL::VERIFY_NONE - } + options = { + ssl_client_cert: options.delete(:apiclient_cert) || WxPay.apiclient_cert, + ssl_client_key: options.delete(:apiclient_key) || WxPay.apiclient_key, + verify_ssl: OpenSSL::SSL::VERIFY_NONE + }.merge(options) + + r = invoke_remote("#{GATEWAY_URL}/pay/micropay", make_payload(params), options) yield(r) if block_given? @@ -144,14 +135,14 @@ module WxPay ORDER_QUERY_REQUIRED_FIELDS = %i(out_trade_no) def self.order_query(params, options = {}) params = { - appid: options[:appid] || WxPay.appid, - mch_id: options[:mch_id] || WxPay.mch_id, + appid: options.delete(:appid) || WxPay.appid, + mch_id: options.delete(:mch_id) || WxPay.mch_id, nonce_str: SecureRandom.uuid.tr('-', '') }.merge(params) check_required_options(params, ORDER_QUERY_REQUIRED_FIELDS) - r = invoke_remote "#{GATEWAY_URL}/pay/orderquery", make_payload(params) + r = invoke_remote("#{GATEWAY_URL}/pay/orderquery", make_payload(params), options) yield(r) if block_given? -- libgit2 0.21.0