Commit 29e1ea212f9276ffe92f942735c2302872221e03

Authored by jasl
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