Commit 29e1ea212f9276ffe92f942735c2302872221e03
1 parent
76960590
Exists in
master
refactor
Showing
1 changed file
with
45 additions
and
54 deletions
Show diff stats
lib/wx_pay/service.rb
@@ -8,14 +8,14 @@ module WxPay | @@ -8,14 +8,14 @@ module WxPay | ||
8 | INVOKE_UNIFIEDORDER_REQUIRED_FIELDS = %i(body out_trade_no total_fee spbill_create_ip notify_url trade_type) | 8 | INVOKE_UNIFIEDORDER_REQUIRED_FIELDS = %i(body out_trade_no total_fee spbill_create_ip notify_url trade_type) |
9 | def self.invoke_unifiedorder(params, options = {}) | 9 | def self.invoke_unifiedorder(params, options = {}) |
10 | params = { | 10 | params = { |
11 | - appid: options[:appid] || WxPay.appid, | ||
12 | - mch_id: options[:mch_id] || WxPay.mch_id, | 11 | + appid: options.delete(:appid) || WxPay.appid, |
12 | + mch_id: options.delete(:mch_id) || WxPay.mch_id, | ||
13 | nonce_str: SecureRandom.uuid.tr('-', '') | 13 | nonce_str: SecureRandom.uuid.tr('-', '') |
14 | }.merge(params) | 14 | }.merge(params) |
15 | 15 | ||
16 | check_required_options(params, INVOKE_UNIFIEDORDER_REQUIRED_FIELDS) | 16 | check_required_options(params, INVOKE_UNIFIEDORDER_REQUIRED_FIELDS) |
17 | 17 | ||
18 | - r = invoke_remote("#{GATEWAY_URL}/pay/unifiedorder", make_payload(params)) | 18 | + r = invoke_remote("#{GATEWAY_URL}/pay/unifiedorder", make_payload(params), options) |
19 | 19 | ||
20 | yield r if block_given? | 20 | yield r if block_given? |
21 | 21 | ||
@@ -25,8 +25,8 @@ module WxPay | @@ -25,8 +25,8 @@ module WxPay | ||
25 | GENERATE_APP_PAY_REQ_REQUIRED_FIELDS = %i(prepayid noncestr) | 25 | GENERATE_APP_PAY_REQ_REQUIRED_FIELDS = %i(prepayid noncestr) |
26 | def self.generate_app_pay_req(params, options = {}) | 26 | def self.generate_app_pay_req(params, options = {}) |
27 | params = { | 27 | params = { |
28 | - appid: options[:appid] || WxPay.appid, | ||
29 | - partnerid: options[:mch_id] || WxPay.mch_id, | 28 | + appid: options.delete(:appid) || WxPay.appid, |
29 | + partnerid: options.delete(:mch_id) || WxPay.mch_id, | ||
30 | package: 'Sign=WXPay', | 30 | package: 'Sign=WXPay', |
31 | timestamp: Time.now.to_i.to_s | 31 | timestamp: Time.now.to_i.to_s |
32 | }.merge(params) | 32 | }.merge(params) |
@@ -38,24 +38,25 @@ module WxPay | @@ -38,24 +38,25 @@ module WxPay | ||
38 | params | 38 | params |
39 | end | 39 | end |
40 | 40 | ||
41 | - INVOKE_REFUND_REQUIRED_FIELDS = %i(out_refund_no total_fee refund_fee) | 41 | + INVOKE_REFUND_REQUIRED_FIELDS = %i(out_refund_no total_fee refund_fee op_user_id) |
42 | def self.invoke_refund(params, options = {}) | 42 | def self.invoke_refund(params, options = {}) |
43 | params = { | 43 | params = { |
44 | - appid: options[:appid] || WxPay.appid, | ||
45 | - mch_id: options[:mch_id] || WxPay.mch_id, | 44 | + appid: options.delete(:appid) || WxPay.appid, |
45 | + mch_id: options.delete(:mch_id) || WxPay.mch_id, | ||
46 | nonce_str: SecureRandom.uuid.tr('-', ''), | 46 | nonce_str: SecureRandom.uuid.tr('-', ''), |
47 | - op_user_id: options[:mch_id] || WxPay.mch_id | ||
48 | }.merge(params) | 47 | }.merge(params) |
49 | 48 | ||
49 | + params[:op_user_id] ||= params[:mch_id] | ||
50 | + | ||
50 | check_required_options(params, INVOKE_REFUND_REQUIRED_FIELDS) | 51 | check_required_options(params, INVOKE_REFUND_REQUIRED_FIELDS) |
51 | 52 | ||
52 | - r = invoke_remote "#{GATEWAY_URL}/secapi/pay/refund", | ||
53 | - make_payload(params), | ||
54 | - { | ||
55 | - ssl_client_cert: options[:apiclient_cert] || WxPay.apiclient_cert, | ||
56 | - ssl_client_key: options[:apiclient_key] || WxPay.apiclient_key, | ||
57 | - verify_ssl: OpenSSL::SSL::VERIFY_NONE | ||
58 | - } | 53 | + options = { |
54 | + ssl_client_cert: options.delete(:apiclient_cert) || WxPay.apiclient_cert, | ||
55 | + ssl_client_key: options.delete(:apiclient_key) || WxPay.apiclient_key, | ||
56 | + verify_ssl: OpenSSL::SSL::VERIFY_NONE | ||
57 | + }.merge(options) | ||
58 | + | ||
59 | + r = invoke_remote("#{GATEWAY_URL}/secapi/pay/refund", make_payload(params), options) | ||
59 | 60 | ||
60 | yield(r) if block_given? | 61 | yield(r) if block_given? |
61 | 62 | ||
@@ -65,20 +66,20 @@ module WxPay | @@ -65,20 +66,20 @@ module WxPay | ||
65 | INVOKE_TRANSFER_REQUIRED_FIELDS = %i(partner_trade_no openid check_name amount desc spbill_create_ip) | 66 | INVOKE_TRANSFER_REQUIRED_FIELDS = %i(partner_trade_no openid check_name amount desc spbill_create_ip) |
66 | def self.invoke_transfer(params, options = {}) | 67 | def self.invoke_transfer(params, options = {}) |
67 | params = { | 68 | params = { |
68 | - mch_appid: options[:appid] || WxPay.appid, | ||
69 | - mchid: options[:mch_id] || WxPay.mch_id, | 69 | + mch_appid: options.delete(:appid) || WxPay.appid, |
70 | + mchid: options.delete(:mch_id) || WxPay.mch_id, | ||
70 | nonce_str: SecureRandom.uuid.tr('-', '') | 71 | nonce_str: SecureRandom.uuid.tr('-', '') |
71 | }.merge(params) | 72 | }.merge(params) |
72 | 73 | ||
73 | check_required_options(params, INVOKE_TRANSFER_REQUIRED_FIELDS) | 74 | check_required_options(params, INVOKE_TRANSFER_REQUIRED_FIELDS) |
74 | 75 | ||
75 | - r = invoke_remote "#{GATEWAY_URL}/mmpaymkttransfers/promotion/transfers", | ||
76 | - make_payload(params), | ||
77 | - { | ||
78 | - ssl_client_cert: options[:apiclient_cert] || WxPay.apiclient_cert, | ||
79 | - ssl_client_key: options[:apiclient_key] || WxPay.apiclient_key, | ||
80 | - verify_ssl: OpenSSL::SSL::VERIFY_NONE | ||
81 | - } | 76 | + options = { |
77 | + ssl_client_cert: options.delete(:apiclient_cert) || WxPay.apiclient_cert, | ||
78 | + ssl_client_key: options.delete(:apiclient_key) || WxPay.apiclient_key, | ||
79 | + verify_ssl: OpenSSL::SSL::VERIFY_NONE | ||
80 | + }.merge(options) | ||
81 | + | ||
82 | + r = invoke_remote("#{GATEWAY_URL}/mmpaymkttransfers/promotion/transfers", make_payload(params), options) | ||
82 | 83 | ||
83 | yield r if block_given? | 84 | yield r if block_given? |
84 | 85 | ||
@@ -88,30 +89,20 @@ module WxPay | @@ -88,30 +89,20 @@ module WxPay | ||
88 | INVOKE_REVERSE_REQUIRED_FIELDS = %i(out_trade_no) | 89 | INVOKE_REVERSE_REQUIRED_FIELDS = %i(out_trade_no) |
89 | def self.invoke_reverse(params, options = {}) | 90 | def self.invoke_reverse(params, options = {}) |
90 | params = { | 91 | params = { |
91 | - appid: options[:appid] || WxPay.appid, | ||
92 | - mch_id: options[:mch_id] || WxPay.mch_id, | 92 | + appid: options.delete(:appid) || WxPay.appid, |
93 | + mch_id: options.delete(:mch_id) || WxPay.mch_id, | ||
93 | nonce_str: SecureRandom.uuid.tr('-', '') | 94 | nonce_str: SecureRandom.uuid.tr('-', '') |
94 | }.merge(params) | 95 | }.merge(params) |
95 | 96 | ||
96 | check_required_options(params, INVOKE_REVERSE_REQUIRED_FIELDS) | 97 | check_required_options(params, INVOKE_REVERSE_REQUIRED_FIELDS) |
97 | 98 | ||
98 | - # 微信退款需要双向证书 | ||
99 | - # https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4 | ||
100 | - # https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3 | ||
101 | - | ||
102 | - WxPay.extra_rest_client_options = { | ||
103 | - ssl_client_cert: WxPay.apiclient_cert.certificate, | ||
104 | - ssl_client_key: WxPay.apiclient_cert.key, | 99 | + options = { |
100 | + ssl_client_cert: options.delete(:apiclient_cert) || WxPay.apiclient_cert, | ||
101 | + ssl_client_key: options.delete(:apiclient_key) || WxPay.apiclient_key, | ||
105 | verify_ssl: OpenSSL::SSL::VERIFY_NONE | 102 | verify_ssl: OpenSSL::SSL::VERIFY_NONE |
106 | - } | 103 | + }.merge(options) |
107 | 104 | ||
108 | - r = invoke_remote "#{GATEWAY_URL}/secapi/pay/reverse", | ||
109 | - make_payload(params), | ||
110 | - { | ||
111 | - ssl_client_cert: options[:apiclient_cert] || WxPay.apiclient_cert, | ||
112 | - ssl_client_key: options[:apiclient_key] || WxPay.apiclient_key, | ||
113 | - verify_ssl: OpenSSL::SSL::VERIFY_NONE | ||
114 | - } | 105 | + r = invoke_remote("#{GATEWAY_URL}/secapi/pay/reverse", make_payload(params), options) |
115 | 106 | ||
116 | yield(r) if block_given? | 107 | yield(r) if block_given? |
117 | 108 | ||
@@ -121,20 +112,20 @@ module WxPay | @@ -121,20 +112,20 @@ module WxPay | ||
121 | INVOKE_MICROPAY_REQUIRED_FIELDS = %i(body out_trade_no total_fee spbill_create_ip auth_code) | 112 | INVOKE_MICROPAY_REQUIRED_FIELDS = %i(body out_trade_no total_fee spbill_create_ip auth_code) |
122 | def self.invoke_micropay(params, options = {}) | 113 | def self.invoke_micropay(params, options = {}) |
123 | params = { | 114 | params = { |
124 | - appid: options[:appid] || WxPay.appid, | ||
125 | - mch_id: options[:mch_id] || WxPay.mch_id, | 115 | + appid: options.delete(:appid) || WxPay.appid, |
116 | + mch_id: options.delete(:mch_id) || WxPay.mch_id, | ||
126 | nonce_str: SecureRandom.uuid.tr('-', '') | 117 | nonce_str: SecureRandom.uuid.tr('-', '') |
127 | }.merge(params) | 118 | }.merge(params) |
128 | 119 | ||
129 | check_required_options(params, INVOKE_MICROPAY_REQUIRED_FIELDS) | 120 | check_required_options(params, INVOKE_MICROPAY_REQUIRED_FIELDS) |
130 | 121 | ||
131 | - r = invoke_remote "#{GATEWAY_URL}/pay/micropay", | ||
132 | - make_payload(params), | ||
133 | - { | ||
134 | - ssl_client_cert: options[:apiclient_cert] || WxPay.apiclient_cert, | ||
135 | - ssl_client_key: options[:apiclient_key] || WxPay.apiclient_key, | ||
136 | - verify_ssl: OpenSSL::SSL::VERIFY_NONE | ||
137 | - } | 122 | + options = { |
123 | + ssl_client_cert: options.delete(:apiclient_cert) || WxPay.apiclient_cert, | ||
124 | + ssl_client_key: options.delete(:apiclient_key) || WxPay.apiclient_key, | ||
125 | + verify_ssl: OpenSSL::SSL::VERIFY_NONE | ||
126 | + }.merge(options) | ||
127 | + | ||
128 | + r = invoke_remote("#{GATEWAY_URL}/pay/micropay", make_payload(params), options) | ||
138 | 129 | ||
139 | yield(r) if block_given? | 130 | yield(r) if block_given? |
140 | 131 | ||
@@ -144,14 +135,14 @@ module WxPay | @@ -144,14 +135,14 @@ module WxPay | ||
144 | ORDER_QUERY_REQUIRED_FIELDS = %i(out_trade_no) | 135 | ORDER_QUERY_REQUIRED_FIELDS = %i(out_trade_no) |
145 | def self.order_query(params, options = {}) | 136 | def self.order_query(params, options = {}) |
146 | params = { | 137 | params = { |
147 | - appid: options[:appid] || WxPay.appid, | ||
148 | - mch_id: options[:mch_id] || WxPay.mch_id, | 138 | + appid: options.delete(:appid) || WxPay.appid, |
139 | + mch_id: options.delete(:mch_id) || WxPay.mch_id, | ||
149 | nonce_str: SecureRandom.uuid.tr('-', '') | 140 | nonce_str: SecureRandom.uuid.tr('-', '') |
150 | }.merge(params) | 141 | }.merge(params) |
151 | 142 | ||
152 | check_required_options(params, ORDER_QUERY_REQUIRED_FIELDS) | 143 | check_required_options(params, ORDER_QUERY_REQUIRED_FIELDS) |
153 | 144 | ||
154 | - r = invoke_remote "#{GATEWAY_URL}/pay/orderquery", make_payload(params) | 145 | + r = invoke_remote("#{GATEWAY_URL}/pay/orderquery", make_payload(params), options) |
155 | 146 | ||
156 | yield(r) if block_given? | 147 | yield(r) if block_given? |
157 | 148 |