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 8 INVOKE_UNIFIEDORDER_REQUIRED_FIELDS = %i(body out_trade_no total_fee spbill_create_ip notify_url trade_type)
9 9 def self.invoke_unifiedorder(params, options = {})
10 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 13 nonce_str: SecureRandom.uuid.tr('-', '')
14 14 }.merge(params)
15 15  
16 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 20 yield r if block_given?
21 21  
... ... @@ -25,8 +25,8 @@ module WxPay
25 25 GENERATE_APP_PAY_REQ_REQUIRED_FIELDS = %i(prepayid noncestr)
26 26 def self.generate_app_pay_req(params, options = {})
27 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 30 package: 'Sign=WXPay',
31 31 timestamp: Time.now.to_i.to_s
32 32 }.merge(params)
... ... @@ -38,24 +38,25 @@ module WxPay
38 38 params
39 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 42 def self.invoke_refund(params, options = {})
43 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 46 nonce_str: SecureRandom.uuid.tr('-', ''),
47   - op_user_id: options[:mch_id] || WxPay.mch_id
48 47 }.merge(params)
49 48  
  49 + params[:op_user_id] ||= params[:mch_id]
  50 +
50 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 61 yield(r) if block_given?
61 62  
... ... @@ -65,20 +66,20 @@ module WxPay
65 66 INVOKE_TRANSFER_REQUIRED_FIELDS = %i(partner_trade_no openid check_name amount desc spbill_create_ip)
66 67 def self.invoke_transfer(params, options = {})
67 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 71 nonce_str: SecureRandom.uuid.tr('-', '')
71 72 }.merge(params)
72 73  
73 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 84 yield r if block_given?
84 85  
... ... @@ -88,30 +89,20 @@ module WxPay
88 89 INVOKE_REVERSE_REQUIRED_FIELDS = %i(out_trade_no)
89 90 def self.invoke_reverse(params, options = {})
90 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 94 nonce_str: SecureRandom.uuid.tr('-', '')
94 95 }.merge(params)
95 96  
96 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 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 107 yield(r) if block_given?
117 108  
... ... @@ -121,20 +112,20 @@ module WxPay
121 112 INVOKE_MICROPAY_REQUIRED_FIELDS = %i(body out_trade_no total_fee spbill_create_ip auth_code)
122 113 def self.invoke_micropay(params, options = {})
123 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 117 nonce_str: SecureRandom.uuid.tr('-', '')
127 118 }.merge(params)
128 119  
129 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 130 yield(r) if block_given?
140 131  
... ... @@ -144,14 +135,14 @@ module WxPay
144 135 ORDER_QUERY_REQUIRED_FIELDS = %i(out_trade_no)
145 136 def self.order_query(params, options = {})
146 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 140 nonce_str: SecureRandom.uuid.tr('-', '')
150 141 }.merge(params)
151 142  
152 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 147 yield(r) if block_given?
157 148  
... ...