wechat-pay 1.0.1 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e659dc3c1801cab85da470df5087895bd4a12e43d428f8fad282d2aba84022d2
4
- data.tar.gz: f21c6f6ce72180bd0506bce69d2aae1e539dfbfbc1ddd69fc809d83719faa5f1
3
+ metadata.gz: 62c4aa7b22ada0f4b3251fdc6b28ba32620ca5149e7d999c458543a805dbcbef
4
+ data.tar.gz: d7f4b63d6e82df69d440154b233776e6a289b875a0ca81107440816732ec3dff
5
5
  SHA512:
6
- metadata.gz: 7e1ac7d823df910753d26f52df615e82cef3ebaa8109dd299009fca5be48f7062361af7b2698a9b4a00fa4afc08d7ea8417677fb396e189d8efea54f309b5ad0
7
- data.tar.gz: d6ec25bc79c1d1a96f0a9292b5045b7d52ebe41d0ba5c1cd50bd0cc8b6224460834833437f33d965225cce6190f74a5218ddcdace289b1702552bb79c6965cd5
6
+ metadata.gz: eddf42af769b7cf7781b991780b11deabe060e1bf4f2f86250e4a910b7483cafc779731ac03e12a6cc2ff9b9b97f81ff0e0ee8a83a177d5488d8ce68b727f6f0
7
+ data.tar.gz: 8a53231c6e6ead3ea36dffa157eba6bfeb73ae94762789d1261d852f92a60925764be70d9d1f8bf33b59a39aebc20fcff21b909e361cd64dc30621ea40f68ad9
@@ -7,585 +7,587 @@ module WechatPay
7
7
  module Direct
8
8
  include WechatPayHelper
9
9
 
10
- class<<self
11
- INVOKE_COMBINE_TRANSACTIONS_IN_APP_FIELDS = %i[combine_out_trade_no scene_info sub_orders notify_url].freeze # :nodoc:
12
- #
13
- # 直连合单app下单
14
- #
15
- # TODO: 与电商平台类似,只是参数不同,稍后重构
16
- #
17
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_1.shtml
18
- #
19
- # Example:
20
- #
21
- # ``` ruby
22
- # params = {
23
- # combine_out_trade_no: 'combine_out_trade_no',
24
- # combine_payer_info: {
25
- # openid: 'client open id'
26
- # },
27
- # sub_orders: [
28
- # {
29
- # mchid: 'mchid',
30
- # sub_mchid: 'sub mchid',
31
- # attach: 'attach',
32
- # amount: {
33
- # total_amount: 100,
34
- # currency: 'CNY'
35
- # },
36
- # out_trade_no: 'out_trade_no',
37
- # description: 'description'
38
- # }
39
- # ],
40
- # notify_url: 'the_url'
41
- # }
42
- #
43
- # WechatPay::Direct.invoke_combine_transactions_in_app(params)
44
- # ```
45
- def invoke_combine_transactions_in_app(params)
46
- WechatPay::Ecommerce.invoke_combine_transactions_in_app(params)
47
- end
48
-
49
- INVOKE_COMBINE_TRANSACTIONS_IN_JS_FIELDS = %i[combine_out_trade_no scene_info sub_orders notify_url].freeze # :nodoc:
50
- #
51
- # 直连合单js下单
52
- #
53
- # TODO: 与电商平台类似,只是参数不同,稍后重构
54
- #
55
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_3.shtml
56
- #
57
- # Example:
58
- #
59
- # ``` ruby
60
- # params = {
61
- # combine_out_trade_no: 'combine_out_trade_no',
62
- # combine_payer_info: {
63
- # openid: 'client open id'
64
- # },
65
- # sub_orders: [
66
- # {
67
- # mchid: 'mchid',
68
- # sub_mchid: 'sub mchid',
69
- # attach: 'attach',
70
- # amount: {
71
- # total_amount: 100,
72
- # currency: 'CNY'
73
- # },
74
- # out_trade_no: 'out_trade_no',
75
- # description: 'description'
76
- # }
77
- # ],
78
- # notify_url: 'the_url'
79
- # }
80
- #
81
- # WechatPay::Direct.invoke_combine_transactions_in_js(params)
82
- # ```
83
- def invoke_combine_transactions_in_js(params)
84
- WechatPay::Ecommerce.invoke_combine_transactions_in_js(params)
85
- end
86
-
87
- INVOKE_COMBINE_TRANSACTIONS_IN_H5_FIELDS = %i[combine_out_trade_no scene_info sub_orders notify_url].freeze # :nodoc:
88
- #
89
- # 直连合单h5下单
90
- #
91
- # TODO: 与电商平台类似,只是参数不同,稍后重构
92
- #
93
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_2.shtml
94
- #
95
- # Example:
96
- #
97
- # ``` ruby
98
- # params = {
99
- # combine_out_trade_no: 'combine_out_trade_no',
100
- # sub_orders: [
101
- # {
102
- # mchid: 'mchid',
103
- # sub_mchid: 'sub mchid',
104
- # attach: 'attach',
105
- # amount: {
106
- # total_amount: 100,
107
- # currency: 'CNY'
108
- # },
109
- # out_trade_no: 'out_trade_no',
110
- # description: 'description'
111
- # }
112
- # ],
113
- # notify_url: 'the_url'
114
- # }
115
- #
116
- # WechatPay::Direct.invoke_combine_transactions_in_h5(params)
117
- # ```
118
- def invoke_combine_transactions_in_h5(params)
119
- WechatPay::Ecommerce.invoke_combine_transactions_in_h5(params)
120
- end
121
-
122
- INVOKE_COMBINE_TRANSACTIONS_IN_MINIPROGRAM_FIELDS = %i[combine_out_trade_no scene_info sub_orders notify_url].freeze # :nodoc:
123
- #
124
- # 直连合单小程序下单
125
- #
126
- # TODO: 与电商平台类似,只是参数不同,稍后重构
127
- #
128
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_4.shtml
129
- #
130
- # Example:
131
- #
132
- # ``` ruby
133
- # params = {
134
- # combine_out_trade_no: 'combine_out_trade_no',
135
- # combine_payer_info: {
136
- # openid: 'client open id'
137
- # },
138
- # sub_orders: [
139
- # {
140
- # mchid: 'mchid',
141
- # sub_mchid: 'sub mchid',
142
- # attach: 'attach',
143
- # amount: {
144
- # total_amount: 100,
145
- # currency: 'CNY'
146
- # },
147
- # out_trade_no: 'out_trade_no',
148
- # description: 'description'
149
- # }
150
- # ],
151
- # notify_url: 'the_url'
152
- # }
153
- #
154
- # WechatPay::Direct.invoke_combine_transactions_in_miniprogram(params)
155
- # ```
156
- def invoke_combine_transactions_in_miniprogram(params)
157
- WechatPay::Ecommerce.invoke_combine_transactions_in_miniprogram(params)
158
- end
159
-
160
- INVOKE_COMBINE_TRANSACTIONS_IN_NATIVE_FIELDS = %i[combine_out_trade_no scene_info sub_orders notify_url].freeze # :nodoc:
161
- #
162
- # 直连合单native下单
163
- #
164
- # TODO: 与电商平台类似,只是参数不同,稍后重构
165
- #
166
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_5.shtml
167
- #
168
- # Example:
169
- #
170
- # ``` ruby
171
- # params = {
172
- # combine_out_trade_no: 'combine_out_trade_no',
173
- # sub_orders: [
174
- # {
175
- # mchid: 'mchid',
176
- # sub_mchid: 'sub mchid',
177
- # attach: 'attach',
178
- # amount: {
179
- # total_amount: 100,
180
- # currency: 'CNY'
181
- # },
182
- # out_trade_no: 'out_trade_no',
183
- # description: 'description'
184
- # }
185
- # ],
186
- # notify_url: 'the_url'
187
- # }
188
- #
189
- # WechatPay::Direct.invoke_combine_transactions_in_native(params)
190
- # ```
191
- def invoke_combine_transactions_in_native(params)
192
- WechatPay::Ecommerce.invoke_combine_transactions_in_native(params)
193
- end
194
-
195
- QUERY_COMBINE_ORDER_FIELDS = %i[combine_out_trade_no].freeze # :nodoc:
196
- #
197
- # 合单查询
198
- #
199
- # TODO: 与电商平台相同,稍后重构
200
- #
201
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_11.shtml
202
- #
203
- # ``` ruby
204
- # WechatPay::Direct.query_order(combine_out_trade_no: 'C202104302474')
205
- # ```
206
- #
207
- def query_combine_order(params)
208
- combine_out_trade_no = params.delete(:combine_out_trade_no)
209
-
210
- url = "/v3/combine-transactions/out-trade-no/#{combine_out_trade_no}"
211
-
212
- method = 'GET'
213
-
214
- make_request(
215
- method: method,
216
- path: url,
217
- extra_headers: {
218
- 'Content-Type' => 'application/x-www-form-urlencoded'
219
- }
220
- )
221
- end
222
-
223
- CLOSE_COMBINE_ORDER_FIELDS = %i[combine_out_trade_no sub_orders].freeze # :nodoc:
224
- #
225
- # 关闭合单
226
- #
227
- # TODO: 与电商平台相同,稍后重构
228
- #
229
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_11.shtml
230
- #
231
- # ``` ruby
232
- # WechatPay::Direct.close_combine_order(combine_out_trade_no: 'C202104302474')
233
- # ```
234
- def close_combine_order(params)
235
- combine_out_trade_no = params.delete(:combine_out_trade_no)
236
-
237
- url = "/v3/combine-transactions/out-trade-no/#{combine_out_trade_no}/close"
238
-
239
- payload = {
240
- combine_appid: WechatPay.app_id
241
- }.merge(params)
242
-
243
- payload_json = payload.to_json
244
-
245
- method = 'POST'
246
-
247
- make_request(
248
- method: method,
249
- for_sign: payload_json,
250
- payload: payload_json,
251
- path: url
252
- )
253
- end
254
-
255
- INVOKE_TRANSACTIONS_IN_JS_FIELDS = %i[description out_trade out_trade_no payer amount notify_url].freeze # :nodoc:
256
- #
257
- # 直连js下单
258
- #
259
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.shtml
260
- #
261
- # Example:
262
- #
263
- # ``` ruby
264
- # params = {
265
- # appid: 'Your Open id',
266
- # mchid: 'Your Mch id'',
267
- # description: '回流',
268
- # out_trade_no: 'Checking',
269
- # payer: {
270
- # openid: 'oly6s5c'
271
- # },
272
- # amount: {
273
- # total: 1
274
- # },
275
- # notify_url: ENV['NOTIFICATION_URL']
276
- # }
277
- #
278
- # WechatPay::Direct.invoke_transactions_in_js(params)
279
- # ```
280
- def invoke_transactions_in_js(params)
281
- direct_transactions_method_by_suffix('jsapi', params)
282
- end
283
-
284
- INVOKE_TRANSACTIONS_IN_MINIPROGRAM_FIELDS = %i[description out_trade out_trade_no payer amount notify_url].freeze # :nodoc:
285
- #
286
- # 直连小程序下单
287
- #
288
- # Document:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml
289
- #
290
- # Example:
291
- #
292
- # ``` ruby
293
- # params = {
294
- # appid: 'Your Open id',
295
- # mchid: 'Your Mch id'',
296
- # description: '回流',
297
- # out_trade_no: 'Checking',
298
- # payer: {
299
- # openid: 'oly6s5c'
300
- # },
301
- # amount: {
302
- # total: 1
303
- # },
304
- # notify_url: ENV['NOTIFICATION_URL']
305
- # }
306
- #
307
- # WechatPay::Direct.invoke_transactions_in_miniprogram(params)
308
- # ```
309
- def invoke_transactions_in_miniprogram(params)
310
- direct_transactions_method_by_suffix('jsapi', params)
10
+ ##
11
+ # :singleton-method: invoke_combine_transactions_in_app
12
+ #
13
+ # 直连合单app下单
14
+ #
15
+ #
16
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_1.shtml
17
+ #
18
+ # Example:
19
+ #
20
+ # ``` ruby
21
+ # params = {
22
+ # combine_out_trade_no: 'combine_out_trade_no',
23
+ # combine_payer_info: {
24
+ # openid: 'client open id'
25
+ # },
26
+ # sub_orders: [
27
+ # {
28
+ # mchid: 'mchid',
29
+ # sub_mchid: 'sub mchid',
30
+ # attach: 'attach',
31
+ # amount: {
32
+ # total_amount: 100,
33
+ # currency: 'CNY'
34
+ # },
35
+ # out_trade_no: 'out_trade_no',
36
+ # description: 'description'
37
+ # }
38
+ # ],
39
+ # notify_url: 'the_url'
40
+ # }
41
+ #
42
+ # WechatPay::Direct.invoke_combine_transactions_in_app(params)
43
+ # ```
44
+
45
+ ##
46
+ # :singleton-method: invoke_combine_transactions_in_js
47
+ #
48
+ # js合单
49
+ #
50
+ # 直连合单js下单
51
+ #
52
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_3.shtml
53
+ #
54
+ # Example:
55
+ #
56
+ # ``` ruby
57
+ # params = {
58
+ # combine_out_trade_no: 'combine_out_trade_no',
59
+ # combine_payer_info: {
60
+ # openid: 'client open id'
61
+ # },
62
+ # sub_orders: [
63
+ # {
64
+ # mchid: 'mchid',
65
+ # sub_mchid: 'sub mchid',
66
+ # attach: 'attach',
67
+ # amount: {
68
+ # total_amount: 100,
69
+ # currency: 'CNY'
70
+ # },
71
+ # out_trade_no: 'out_trade_no',
72
+ # description: 'description'
73
+ # }
74
+ # ],
75
+ # notify_url: 'the_url'
76
+ # }
77
+ #
78
+ # WechatPay::Direct.invoke_combine_transactions_in_js(params)
79
+ # ```
80
+
81
+ ##
82
+ # :singleton-method: invoke_combine_transactions_in_h5
83
+ #
84
+ # 直连合单h5下单
85
+ #
86
+ # TODO: 与电商平台类似,只是参数不同,稍后重构
87
+ #
88
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_2.shtml
89
+ #
90
+ # Example:
91
+ #
92
+ # ``` ruby
93
+ # params = {
94
+ # combine_out_trade_no: 'combine_out_trade_no',
95
+ # sub_orders: [
96
+ # {
97
+ # mchid: 'mchid',
98
+ # sub_mchid: 'sub mchid',
99
+ # attach: 'attach',
100
+ # amount: {
101
+ # total_amount: 100,
102
+ # currency: 'CNY'
103
+ # },
104
+ # out_trade_no: 'out_trade_no',
105
+ # description: 'description'
106
+ # }
107
+ # ],
108
+ # notify_url: 'the_url'
109
+ # }
110
+ #
111
+ # WechatPay::Direct.invoke_combine_transactions_in_h5(params)
112
+ # ```
113
+
114
+ ##
115
+ # :singleton-method: invoke_combine_transactions_in_miniprogram
116
+ #
117
+ # 直连合单小程序下单
118
+ #
119
+ #
120
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_4.shtml
121
+ #
122
+ # Example:
123
+ #
124
+ # ``` ruby
125
+ # params = {
126
+ # combine_out_trade_no: 'combine_out_trade_no',
127
+ # combine_payer_info: {
128
+ # openid: 'client open id'
129
+ # },
130
+ # sub_orders: [
131
+ # {
132
+ # mchid: 'mchid',
133
+ # sub_mchid: 'sub mchid',
134
+ # attach: 'attach',
135
+ # amount: {
136
+ # total_amount: 100,
137
+ # currency: 'CNY'
138
+ # },
139
+ # out_trade_no: 'out_trade_no',
140
+ # description: 'description'
141
+ # }
142
+ # ],
143
+ # notify_url: 'the_url'
144
+ # }
145
+ #
146
+ # WechatPay::Direct.invoke_combine_transactions_in_miniprogram(params)
147
+ # ```
148
+
149
+ ##
150
+ # :singleton-method: invoke_combine_transactions_in_native
151
+ #
152
+ # 直连合单native下单
153
+ #
154
+ #
155
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_5.shtml
156
+ #
157
+ # Example:
158
+ #
159
+ # ``` ruby
160
+ # params = {
161
+ # combine_out_trade_no: 'combine_out_trade_no',
162
+ # sub_orders: [
163
+ # {
164
+ # mchid: 'mchid',
165
+ # sub_mchid: 'sub mchid',
166
+ # attach: 'attach',
167
+ # amount: {
168
+ # total_amount: 100,
169
+ # currency: 'CNY'
170
+ # },
171
+ # out_trade_no: 'out_trade_no',
172
+ # description: 'description'
173
+ # }
174
+ # ],
175
+ # notify_url: 'the_url'
176
+ # }
177
+ #
178
+ # WechatPay::Direct.invoke_combine_transactions_in_native(params)
179
+ # ```
180
+ {
181
+ js: 'jsapi',
182
+ app: 'app',
183
+ h5: 'h5',
184
+ native: 'native',
185
+ miniprogram: 'jsapi'
186
+ }.each do |key, _value|
187
+ const_set("INVOKE_COMBINE_TRANSACTIONS_IN_#{key.upcase}_FIELDS",
188
+ %i[combine_out_trade_no scene_info sub_orders notify_url].freeze)
189
+ define_singleton_method("invoke_combine_transactions_in_#{key}") do |params|
190
+ WechatPay::Ecommerce.send("invoke_combine_transactions_in_#{key}", params)
311
191
  end
192
+ end
312
193
 
313
- INVOKE_TRANSACTIONS_IN_APP_FIELDS = %i[description out_trade out_trade_no payer amount notify_url].freeze # :nodoc:
314
- #
315
- # 直连APP下单
316
- #
317
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_1.shtml
318
- #
319
- # Example:
320
- #
321
- # ``` ruby
322
- # params = {
323
- # appid: 'Your Open id',
324
- # mchid: 'Your Mch id'',
325
- # description: '回流',
326
- # out_trade_no: 'Checking',
327
- # payer: {
328
- # openid: 'oly6s5c'
329
- # },
330
- # amount: {
331
- # total: 1
332
- # },
333
- # notify_url: ENV['NOTIFICATION_URL']
334
- # }
335
- #
336
- # WechatPay::Direct.invoke_transactions_in_app(params)
337
- # ```
338
- def invoke_transactions_in_app(params)
339
- direct_transactions_method_by_suffix('app', params)
340
- end
194
+ QUERY_COMBINE_ORDER_FIELDS = %i[combine_out_trade_no].freeze # :nodoc:
195
+ #
196
+ # 合单查询
197
+ #
198
+ # TODO: 与电商平台相同,稍后重构
199
+ #
200
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_11.shtml
201
+ #
202
+ # ``` ruby
203
+ # WechatPay::Direct.query_order(combine_out_trade_no: 'C202104302474')
204
+ # ```
205
+ #
206
+ def self.query_combine_order(params)
207
+ combine_out_trade_no = params.delete(:combine_out_trade_no)
208
+
209
+ url = "/v3/combine-transactions/out-trade-no/#{combine_out_trade_no}"
210
+
211
+ method = 'GET'
212
+
213
+ make_request(
214
+ method: method,
215
+ path: url,
216
+ extra_headers: {
217
+ 'Content-Type' => 'application/x-www-form-urlencoded'
218
+ }
219
+ )
220
+ end
341
221
 
342
- INVOKE_TRANSACTIONS_IN_H5_FIELDS = %i[description out_trade out_trade_no payer amount notify_url].freeze # :nodoc:
343
- #
344
- # 直连h5下单
345
- #
346
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_3_1.shtml
347
- #
348
- # Example:
349
- #
350
- # ```
351
- # params = {
352
- # appid: 'Your Open id',
353
- # mchid: 'Your Mch id'',
354
- # description: '回流',
355
- # out_trade_no: 'Checking',
356
- # payer: {
357
- # openid: 'oly6s5c'
358
- # },
359
- # amount: {
360
- # total: 1
361
- # },
362
- # notify_url: ENV['NOTIFICATION_URL']
363
- # }
364
- #
365
- # WechatPay::Direct.invoke_transactions_in_h5(params)
366
- # ```
367
- def invoke_transactions_in_h5(params)
368
- direct_transactions_method_by_suffix('h5', params)
369
- end
222
+ CLOSE_COMBINE_ORDER_FIELDS = %i[combine_out_trade_no sub_orders].freeze # :nodoc:
223
+ #
224
+ # 关闭合单
225
+ #
226
+ # TODO: 与电商平台相同,稍后重构
227
+ #
228
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_11.shtml
229
+ #
230
+ # ``` ruby
231
+ # WechatPay::Direct.close_combine_order(combine_out_trade_no: 'C202104302474')
232
+ # ```
233
+ def self.close_combine_order(params)
234
+ combine_out_trade_no = params.delete(:combine_out_trade_no)
235
+
236
+ url = "/v3/combine-transactions/out-trade-no/#{combine_out_trade_no}/close"
237
+
238
+ payload = {
239
+ combine_appid: WechatPay.app_id
240
+ }.merge(params)
241
+
242
+ payload_json = payload.to_json
243
+
244
+ method = 'POST'
245
+
246
+ make_request(
247
+ method: method,
248
+ for_sign: payload_json,
249
+ payload: payload_json,
250
+ path: url
251
+ )
252
+ end
370
253
 
371
- INVOKE_TRANSACTIONS_IN_NATIVE_FIELDS = %i[description out_trade out_trade_no payer amount notify_url].freeze # :nodoc:
372
- #
373
- # 直连native下单
374
- #
375
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_1.shtml
376
- #
377
- # Example:
378
- #
379
- # ``` ruby
380
- # params = {
381
- # appid: 'Your Open id',
382
- # mchid: 'Your Mch id'',
383
- # description: '回流',
384
- # out_trade_no: 'Checking',
385
- # payer: {
386
- # openid: 'oly6s5c'
387
- # },
388
- # amount: {
389
- # total: 1
390
- # },
391
- # notify_url: ENV['NOTIFICATION_URL']
392
- # }
393
- #
394
- # WechatPay::Direct.invoke_transactions_in_native(params)
395
- # ```
396
- def invoke_transactions_in_native(params)
397
- direct_transactions_method_by_suffix('native', params)
398
- end
399
-
400
- QUERY_ORDER_FIELDS = %i[out_trade_no transaction_id].freeze # :nodoc:
401
- #
402
- # 直连订单查询
403
- #
404
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_2.shtml
405
- #
406
- # Example:
407
- #
408
- # ``` ruby
409
- # WechatPay::Direct.query_order(transaction_id: '4323400972202104305133344444') # by transaction_id
410
- # WechatPay::Direct.query_order(out_trade_no: 'N202104302474') # by out_trade_no
411
- # ```
412
- #
413
- def query_order(params)
414
- if params[:transaction_id]
415
- params.delete(:out_trade_no)
416
- transaction_id = params.delete(:transaction_id)
417
- path = "/v3/pay/transactions/id/#{transaction_id}"
418
- else
419
- params.delete(:transaction_id)
420
- out_trade_no = params.delete(:out_trade_no)
421
- path = "/v3/pay/transactions/out-trade-no/#{out_trade_no}"
422
- end
423
-
424
- params = params.merge({
425
- mchid: WechatPay.mch_id
426
- })
427
-
428
- method = 'GET'
429
- query = build_query(params)
430
- url = "#{path}?#{query}"
431
-
432
- make_request(
433
- method: method,
434
- path: url,
435
- extra_headers: {
436
- 'Content-Type' => 'application/x-www-form-urlencoded'
437
- }
438
- )
254
+ ##
255
+ # :singleton-method: invoke_transactions_in_js
256
+ #
257
+ # 直连js下单
258
+ #
259
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.shtml
260
+ #
261
+ # Example:
262
+ #
263
+ # ``` ruby
264
+ # params = {
265
+ # appid: 'Your Open id',
266
+ # mchid: 'Your Mch id'',
267
+ # description: '回流',
268
+ # out_trade_no: 'Checking',
269
+ # payer: {
270
+ # openid: 'oly6s5c'
271
+ # },
272
+ # amount: {
273
+ # total: 1
274
+ # },
275
+ # notify_url: ENV['NOTIFICATION_URL']
276
+ # }
277
+ #
278
+ # WechatPay::Direct.invoke_transactions_in_js(params)
279
+ # ```
280
+
281
+ ##
282
+ # :singleton-method: invoke_transactions_in_miniprogram
283
+ #
284
+ # 直连小程序下单
285
+ #
286
+ # Document:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml
287
+ #
288
+ # Example:
289
+ #
290
+ # ``` ruby
291
+ # params = {
292
+ # appid: 'Your Open id',
293
+ # mchid: 'Your Mch id'',
294
+ # description: '回流',
295
+ # out_trade_no: 'Checking',
296
+ # payer: {
297
+ # openid: 'oly6s5c'
298
+ # },
299
+ # amount: {
300
+ # total: 1
301
+ # },
302
+ # notify_url: ENV['NOTIFICATION_URL']
303
+ # }
304
+ #
305
+ # WechatPay::Direct.invoke_transactions_in_miniprogram(params)
306
+ # ```
307
+
308
+ ##
309
+ # :singleton-method: invoke_transactions_in_app
310
+ #
311
+ # 直连APP下单
312
+ #
313
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_1.shtml
314
+ #
315
+ # Example:
316
+ #
317
+ # ``` ruby
318
+ # params = {
319
+ # appid: 'Your Open id',
320
+ # mchid: 'Your Mch id'',
321
+ # description: '回流',
322
+ # out_trade_no: 'Checking',
323
+ # payer: {
324
+ # openid: 'oly6s5c'
325
+ # },
326
+ # amount: {
327
+ # total: 1
328
+ # },
329
+ # notify_url: ENV['NOTIFICATION_URL']
330
+ # }
331
+ #
332
+ # WechatPay::Direct.invoke_transactions_in_app(params)
333
+ # ```
334
+
335
+ ##
336
+ # :singleton-method: invoke_transactions_in_h5
337
+ #
338
+ # 直连h5下单
339
+ #
340
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_3_1.shtml
341
+ #
342
+ # Example:
343
+ #
344
+ # ```
345
+ # params = {
346
+ # appid: 'Your Open id',
347
+ # mchid: 'Your Mch id'',
348
+ # description: '回流',
349
+ # out_trade_no: 'Checking',
350
+ # payer: {
351
+ # openid: 'oly6s5c'
352
+ # },
353
+ # amount: {
354
+ # total: 1
355
+ # },
356
+ # notify_url: ENV['NOTIFICATION_URL']
357
+ # }
358
+ #
359
+ # WechatPay::Direct.invoke_transactions_in_h5(params)
360
+ # ```
361
+
362
+ ##
363
+ # :singleton-method: invoke_transactions_in_native
364
+ #
365
+ # 直连native下单
366
+ #
367
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_1.shtml
368
+ #
369
+ # Example:
370
+ #
371
+ # ``` ruby
372
+ # params = {
373
+ # appid: 'Your Open id',
374
+ # mchid: 'Your Mch id'',
375
+ # description: '回流',
376
+ # out_trade_no: 'Checking',
377
+ # payer: {
378
+ # openid: 'oly6s5c'
379
+ # },
380
+ # amount: {
381
+ # total: 1
382
+ # },
383
+ # notify_url: ENV['NOTIFICATION_URL']
384
+ # }
385
+ #
386
+ # WechatPay::Direct.invoke_transactions_in_native(params)
387
+ # ```
388
+ {
389
+ js: 'jsapi',
390
+ app: 'app',
391
+ h5: 'h5',
392
+ miniprogram: 'jsapi',
393
+ native: 'native'
394
+ }.each do |key, value|
395
+ const_set("INVOKE_TRANSACTIONS_IN_#{key.upcase}_FIELDS", %i[description out_trade out_trade_no payer amount notify_url].freeze)
396
+ define_singleton_method "invoke_transactions_in_#{key}" do |params|
397
+ direct_transactions_method_by_suffix(value, params)
439
398
  end
399
+ end
440
400
 
441
- CLOSE_ORDER_FIELDS = %i[out_trade_no].freeze # :nodoc:
442
- #
443
- # 关闭订单
444
- #
445
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_3.shtml
446
- #
447
- # Example:
448
- #
449
- # ``` ruby
450
- # WechatPay::Direct.close_order(out_trade_no: 'N3344445')
451
- # ```
452
- #
453
- def close_order(params)
401
+ QUERY_ORDER_FIELDS = %i[out_trade_no transaction_id].freeze # :nodoc:
402
+ #
403
+ # 直连订单查询
404
+ #
405
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_2.shtml
406
+ #
407
+ # Example:
408
+ #
409
+ # ``` ruby
410
+ # WechatPay::Direct.query_order(transaction_id: '4323400972202104305133344444') # by transaction_id
411
+ # WechatPay::Direct.query_order(out_trade_no: 'N202104302474') # by out_trade_no
412
+ # ```
413
+ #
414
+ def self.query_order(params)
415
+ if params[:transaction_id]
416
+ params.delete(:out_trade_no)
417
+ transaction_id = params.delete(:transaction_id)
418
+ path = "/v3/pay/transactions/id/#{transaction_id}"
419
+ else
420
+ params.delete(:transaction_id)
454
421
  out_trade_no = params.delete(:out_trade_no)
455
- url = "/v3/pay/transactions/out-trade-no/#{out_trade_no}/close"
456
- params = params.merge({
457
- mchid: WechatPay.mch_id
458
- })
459
-
460
- method = 'POST'
461
-
462
- make_request(
463
- method: method,
464
- path: url,
465
- for_sign: params.to_json,
466
- payload: params.to_json
467
- )
422
+ path = "/v3/pay/transactions/out-trade-no/#{out_trade_no}"
468
423
  end
469
424
 
470
- INVOKE_REFUND_FIELDS = %i[transaction_id out_trade_no out_refund_no amount].freeze # :nodoc:
471
- #
472
- # 退款申请
473
- #
474
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_9.shtml
475
- #
476
- # Example:
477
- #
478
- # ``` ruby
479
- # WechatPay::Direct.invoke_refund(transaction_id: '4323400972202104305131070170', total: 1, refund: 1, out_refund_no: 'R10000')
480
- # WechatPay::Direct.invoke_refund(out_trade_no: 'N2021', total: 1, refund: 1, out_refund_no: 'R10000').body
481
- # ```
482
- def invoke_refund(params)
483
- url = '/v3/refund/domestic/refunds'
484
- method = 'POST'
485
- amount = {
486
- refund: params.delete(:refund),
487
- total: params.delete(:total),
488
- currency: 'CNY'
489
- }
425
+ params = params.merge({
426
+ mchid: WechatPay.mch_id
427
+ })
490
428
 
491
- params = params.merge({
492
- amount: amount
493
- })
429
+ method = 'GET'
430
+ query = build_query(params)
431
+ url = "#{path}?#{query}"
494
432
 
495
- make_request(
496
- path: url,
497
- method: method,
498
- for_sign: params.to_json,
499
- payload: params.to_json
500
- )
501
- end
502
-
503
- QUERY_REFUND_FIELDS = %i[sub_mchid refund_id out_refund_no].freeze # :nodoc:
504
- #
505
- # 直连退款查询
506
- #
507
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_10.shtml
508
- #
509
- # Example:
510
- #
511
- # ``` ruby
512
- # WechatPay::Direct.query_refund(out_refund_no: 'R10000')
513
- # ```
514
- #
515
- def query_refund(params)
516
- out_refund_no = params.delete(:out_refund_no)
517
- url = "/v3/refund/domestic/refunds/#{out_refund_no}"
518
-
519
- method = 'GET'
433
+ make_request(
434
+ method: method,
435
+ path: url,
436
+ extra_headers: {
437
+ 'Content-Type' => 'application/x-www-form-urlencoded'
438
+ }
439
+ )
440
+ end
520
441
 
521
- make_request(
522
- method: method,
523
- path: url,
524
- extra_headers: {
525
- 'Content-Type' => 'application/x-www-form-urlencoded'
526
- }
527
- )
528
- end
442
+ CLOSE_ORDER_FIELDS = %i[out_trade_no].freeze # :nodoc:
443
+ #
444
+ # 关闭订单
445
+ #
446
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_3.shtml
447
+ #
448
+ # Example:
449
+ #
450
+ # ``` ruby
451
+ # WechatPay::Direct.close_order(out_trade_no: 'N3344445')
452
+ # ```
453
+ #
454
+ def self.close_order(params)
455
+ out_trade_no = params.delete(:out_trade_no)
456
+ url = "/v3/pay/transactions/out-trade-no/#{out_trade_no}/close"
457
+ params = params.merge({
458
+ mchid: WechatPay.mch_id
459
+ })
460
+
461
+ method = 'POST'
462
+
463
+ make_request(
464
+ method: method,
465
+ path: url,
466
+ for_sign: params.to_json,
467
+ payload: params.to_json
468
+ )
469
+ end
529
470
 
530
- TRADEBILL_FIELDS = [:bill_date].freeze # :nodoc:
531
- #
532
- # 直连申请交易账单
533
- #
534
- # Todo: 跟商户平台接口相同
535
- #
536
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_6.shtml
537
- #
538
- # Example:
539
- #
540
- # ``` ruby
541
- # WechatPay::direct.tradebill(bill_date: '2021-04-30')
542
- # ```
543
- def tradebill(params)
544
- path = '/v3/bill/tradebill'
545
- method = 'GET'
546
-
547
- query = build_query(params)
548
- url = "#{path}?#{query}"
471
+ INVOKE_REFUND_FIELDS = %i[transaction_id out_trade_no out_refund_no amount].freeze # :nodoc:
472
+ #
473
+ # 退款申请
474
+ #
475
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_9.shtml
476
+ #
477
+ # Example:
478
+ #
479
+ # ``` ruby
480
+ # WechatPay::Direct.invoke_refund(transaction_id: '4323400972202104305131070170', total: 1, refund: 1, out_refund_no: 'R10000')
481
+ # WechatPay::Direct.invoke_refund(out_trade_no: 'N2021', total: 1, refund: 1, out_refund_no: 'R10000').body
482
+ # ```
483
+ def self.invoke_refund(params)
484
+ url = '/v3/refund/domestic/refunds'
485
+ method = 'POST'
486
+ amount = {
487
+ refund: params.delete(:refund),
488
+ total: params.delete(:total),
489
+ currency: 'CNY'
490
+ }
491
+
492
+ params = params.merge({
493
+ amount: amount
494
+ })
495
+
496
+ make_request(
497
+ path: url,
498
+ method: method,
499
+ for_sign: params.to_json,
500
+ payload: params.to_json
501
+ )
502
+ end
549
503
 
550
- make_request(
551
- path: url,
552
- method: method,
553
- extra_headers: {
554
- 'Content-Type' => 'application/x-www-form-urlencoded'
555
- }
556
- )
557
- end
504
+ QUERY_REFUND_FIELDS = %i[sub_mchid refund_id out_refund_no].freeze # :nodoc:
505
+ #
506
+ # 直连退款查询
507
+ #
508
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_10.shtml
509
+ #
510
+ # Example:
511
+ #
512
+ # ``` ruby
513
+ # WechatPay::Direct.query_refund(out_refund_no: 'R10000')
514
+ # ```
515
+ #
516
+ def self.query_refund(params)
517
+ out_refund_no = params.delete(:out_refund_no)
518
+ url = "/v3/refund/domestic/refunds/#{out_refund_no}"
519
+
520
+ method = 'GET'
521
+
522
+ make_request(
523
+ method: method,
524
+ path: url,
525
+ extra_headers: {
526
+ 'Content-Type' => 'application/x-www-form-urlencoded'
527
+ }
528
+ )
529
+ end
558
530
 
559
- FUNDFLOWBILL_FIELDS = [:bill_date].freeze # :nodoc:
560
- #
561
- # 申请资金账单
562
- #
563
- # Todo: 跟商户平台接口相同
564
- #
565
- # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_7.shtml
566
- #
567
- # Example:
568
- #
569
- # ``` ruby
570
- # WechatPay::Direct.fundflowbill(bill_date: '2021-04-30')
571
- # ```
572
- #
573
- def fundflowbill(params)
574
- path = '/v3/bill/fundflowbill'
575
- method = 'GET'
576
-
577
- query = build_query(params)
578
- url = "#{path}?#{query}"
531
+ TRADEBILL_FIELDS = [:bill_date].freeze # :nodoc:
532
+ #
533
+ # 直连申请交易账单
534
+ #
535
+ # Todo: 跟商户平台接口相同
536
+ #
537
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_6.shtml
538
+ #
539
+ # Example:
540
+ #
541
+ # ``` ruby
542
+ # WechatPay::direct.tradebill(bill_date: '2021-04-30')
543
+ # ```
544
+ def self.tradebill(params)
545
+ path = '/v3/bill/tradebill'
546
+ method = 'GET'
547
+
548
+ query = build_query(params)
549
+ url = "#{path}?#{query}"
550
+
551
+ make_request(
552
+ path: url,
553
+ method: method,
554
+ extra_headers: {
555
+ 'Content-Type' => 'application/x-www-form-urlencoded'
556
+ }
557
+ )
558
+ end
579
559
 
580
- make_request(
581
- path: url,
582
- method: method,
583
- extra_headers: {
584
- 'Content-Type' => 'application/x-www-form-urlencoded'
585
- }
586
- )
587
- end
560
+ FUNDFLOWBILL_FIELDS = [:bill_date].freeze # :nodoc:
561
+ #
562
+ # 申请资金账单
563
+ #
564
+ # Todo: 跟商户平台接口相同
565
+ #
566
+ # Document: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_7.shtml
567
+ #
568
+ # Example:
569
+ #
570
+ # ``` ruby
571
+ # WechatPay::Direct.fundflowbill(bill_date: '2021-04-30')
572
+ # ```
573
+ #
574
+ def self.fundflowbill(params)
575
+ path = '/v3/bill/fundflowbill'
576
+ method = 'GET'
577
+
578
+ query = build_query(params)
579
+ url = "#{path}?#{query}"
580
+
581
+ make_request(
582
+ path: url,
583
+ method: method,
584
+ extra_headers: {
585
+ 'Content-Type' => 'application/x-www-form-urlencoded'
586
+ }
587
+ )
588
+ end
588
589
 
590
+ class << self
589
591
  private
590
592
 
591
593
  def direct_transactions_method_by_suffix(suffix, params)