wechat-pay 1.0.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b07e4346fb61d83569dadb3b0dd467a6b719375fa3b471d6df0ed58a2307b3d2
4
- data.tar.gz: f72bff18f57427e1c8946ddf82bcdb9f20c0057f80fb11beb9eb71183a6499c0
3
+ metadata.gz: 97a1465d8d7d51844df252100062b9a93e3fca7ec95ba71b3c6efde5be055fdd
4
+ data.tar.gz: 79f475e4b12bd326b67ba5eb20600f2c085fbdfbafcab8dc3c6dfc74e904f948
5
5
  SHA512:
6
- metadata.gz: 124e7291a418fd0759ca7906973bf2134fa4330d0db0c2b8cb0612964247ee51de5f7ed74203b99492019a544f513a8b2e005f5f1f81a339e4f4bf91890fedc4
7
- data.tar.gz: c1b0543c3cffc19563d0f42ed624f43f0a4bfcd5bbf990923457be6c9cfa49dbcb67ad864a444970f4929e81ee4e7fdeb1e5f2727ca24b1f05e2627546f79d78
6
+ metadata.gz: a4fcb7ab75a019b3de65aae0946bc8db4b3812a651c8ab6652fb2e47bbb31afaf98a10f6d5b6028f81385ac69c319f7f46e872b72b21c1ab0930d8fe36f579b4
7
+ data.tar.gz: 208c39a3eb250aaa7fc13c49d34bc75d093698641b28cb5b992bf33aa825f8c175b8ca3fc4ab9503a11c86f81e0df7628f60fc5669571dc5cb56fb80d8737299
@@ -0,0 +1,35 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ pull_request:
12
+ branches: [ master ]
13
+
14
+ jobs:
15
+ test:
16
+
17
+ runs-on: ubuntu-latest
18
+ strategy:
19
+ matrix:
20
+ ruby-version: ['2.6', '2.7', '3.0']
21
+
22
+ steps:
23
+ - uses: actions/checkout@v2
24
+ - name: Set up Ruby
25
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
26
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
27
+ # uses: ruby/setup-ruby@v1
28
+ uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
29
+ with:
30
+ ruby-version: ${{ matrix.ruby-version }}
31
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
32
+ - name: Run rubocop
33
+ run: bundle exec rubocop
34
+ - name: Run tests
35
+ run: bundle exec rake
data/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ Gemfile.lock
3
+ doc/
4
+ .yardoc/
5
+ rdoc/
6
+ /*.pem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --force-color
2
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,21 @@
1
+ AllCops:
2
+ NewCops: enable
3
+ SuggestExtensions: false
4
+
5
+ Style/AsciiComments:
6
+ Enabled: false
7
+
8
+ Metrics/BlockLength:
9
+ Enabled: false
10
+
11
+ Metrics/AbcSize:
12
+ Enabled: false
13
+
14
+ Metrics/MethodLength:
15
+ Max: 30
16
+
17
+ Layout/LineLength:
18
+ Enabled: false
19
+
20
+ Metrics/ModuleLength:
21
+ Max: 200
data/.yardopts ADDED
@@ -0,0 +1,3 @@
1
+ --markup markdown
2
+ --protected
3
+ --no-private
data/CHANGELOG.md ADDED
@@ -0,0 +1,15 @@
1
+ # Next Release
2
+
3
+ ## 1.1.0 (07/26/2021)
4
+
5
+ * Fix `Accept-Encoding` issue in wechat.
6
+
7
+
8
+ ## 1.0.8 (05/26/2021)
9
+
10
+ * Add api `invoke_transactions_in_native` to `WechatPay::Ecommerce`
11
+
12
+ ## 1.0.7 (05/16/2021)
13
+
14
+ * Change `WechatPay::Ecommerce.get_certificates` to `WechatPay::Ecommerce.certificates`
15
+ * Refactor code and document.
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Declare your gem's dependencies in tenpay.gemspec.
6
+ # Bundler will treat runtime dependencies like base dependencies, and
7
+ # development dependencies will be added by default to the :development group.
8
+ gemspec
9
+
10
+ # Declare any dependencies that are still in development here instead of in
11
+ # your gemspec. These might include edge Rails or gems from your path or
12
+ # Git. Remember to move these dependencies to your gemspec before releasing
13
+ # your gem to rubygems.org.
14
+
15
+ # To use debugger
data/README.md ADDED
@@ -0,0 +1,92 @@
1
+ # Wechat Pay
2
+
3
+ A simple Wechat pay ruby gem, without unnecessary magic or wrapper. Just a simple wrapper for api V3. Refer to [wx_pay](https://github.com/jasl/wx_pay)
4
+
5
+ Please read official document first: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/pages/index.shtml
6
+
7
+ If you want check the present public api, you can find them in the [Document](https://www.rubydoc.info/github/lanzhiheng/wechat-pay/master/index)。
8
+
9
+ Summary:
10
+
11
+ `WechatPay::Direct` will contain the public api for direct connection merchant(直连商户)and `WechatPay::Ecommerce` will contain the public api for ecommerce(服务商,电商平台)。For more detail you can refer to the wechat document.
12
+
13
+ - 直连商户: https://pay.weixin.qq.com/wiki/doc/apiv3/index.shtml
14
+ - 服务商: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/index.shtml
15
+ - 电商平台(电商收付通): https://pay.weixin.qq.com/wiki/doc/apiv3_partner/open/pay/chapter3_3_3.shtml
16
+
17
+ If you find any issue in this repo, don't shy to create issues https://github.com/lanzhiheng/wechat-pay/issues
18
+
19
+ For more Information,you can check my posts: https://www.lanzhiheng.com/posts/preview/ruby-gem-for-wechat-pay-v3
20
+
21
+ # Installation
22
+
23
+ Add this line to your Gemfile:
24
+
25
+ ```
26
+ gem 'wechat-pay'
27
+ ```
28
+
29
+ or development version
30
+
31
+ ```
32
+ gem 'wechat-pay', :github => 'lanzhiheng/wechat-pay'
33
+ ```
34
+
35
+ And then execute:
36
+
37
+ ```
38
+ $ bundle
39
+ ```
40
+
41
+ # Usage
42
+
43
+ ## Configuration
44
+
45
+ Create `config/initializer/wechat_pay.rb`and put following configurations into it
46
+
47
+ ``` ruby
48
+ WechatPay.apiclient_key = File.read('apiclient_key.pem')
49
+ WechatPay.platform_cert = File.read('platform_cert.pem') # You should comment this line before downloaded platform_cert.
50
+ WechatPay.apiclient_cert = File.read('apiclient_cert.pem')
51
+ WechatPay.app_id = 'Your App Id'
52
+ WechatPay.mch_id = 'Your Mch Id'
53
+ WechatPay.mch_key = 'Your Mch Key'
54
+ ```
55
+
56
+ ## Download
57
+
58
+ I will provide a simple script for you to download the platform_cert
59
+
60
+ ``` ruby
61
+ def download_certificate
62
+ download_path = 'Your Download Path'
63
+ raise '必须提供证书下载路径' if download_path.blank?
64
+
65
+ response = WechatPay::Ecommerce.certificates
66
+
67
+ raise '证书下载失败' unless response.code == 200
68
+
69
+ result = JSON.parse(response.body)
70
+ # 需要按生效日期进行排序,获取最新的证书
71
+ array = result['data'].sort_by { |item| -Time.parse(item['effective_time']).to_i }
72
+ current_data = array.first
73
+ encrypt_certificate = current_data['encrypt_certificate']
74
+ associated_data = encrypt_certificate['associated_data']
75
+ nonce = encrypt_certificate['nonce']
76
+ ciphertext = encrypt_certificate['ciphertext']
77
+
78
+ content = WechatPay::Sign.decrypt_the_encrypt_params(
79
+ associated_data: associated_data,
80
+ nonce: nonce,
81
+ ciphertext: ciphertext
82
+ )
83
+
84
+ File.open(download_path, 'w') do |f|
85
+ f.write(content)
86
+ end
87
+
88
+ puts '证书下载成功'
89
+ end
90
+ ```
91
+
92
+
data/Rakefile ADDED
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ require 'bundler/setup'
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
9
+ rescue LoadError
10
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
11
+ end
12
+
13
+ require 'rdoc/task'
14
+ Rake::RDocTask.new do |rdoc|
15
+ rdoc.rdoc_dir = 'rdoc'
16
+ rdoc.title = "wechat-pay #{WechatPay::VERSION}"
17
+ rdoc.rdoc_files.include('README*')
18
+ rdoc.rdoc_files.include('lib/**/*.rb')
19
+ end
data/lib/wechat-pay.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # rubocop:disable Naming/FileName
2
+
1
3
  # frozen_string_literal: true
2
4
 
3
5
  require 'restclient'
@@ -8,7 +10,6 @@ require 'wechat-pay/ecommerce' # 电商平台
8
10
  # # 微信支付
9
11
  #
10
12
  # 设置关键信息
11
-
12
13
  module WechatPay
13
14
  class<< self
14
15
  attr_accessor :app_id, :mch_id, :mch_key
@@ -40,3 +41,4 @@ module WechatPay
40
41
  end
41
42
  end
42
43
  end
44
+ # rubocop:enable Naming/FileName
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
  require 'wechat-pay/helper'
3
5
 
@@ -7,183 +9,80 @@ module WechatPay
7
9
  module Direct
8
10
  include WechatPayHelper
9
11
 
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
- # ```
12
+ # @private
13
+ # @!macro [attach] define_transaction_method
14
+ # 直连$1下单
15
+ #
16
+ # Document: $3
17
+ #
18
+ # Example:
19
+ #
20
+ # ``` ruby
21
+ # params = {
22
+ # appid: 'Your Open id',
23
+ # mchid: 'Your Mch id'',
24
+ # description: '回流',
25
+ # out_trade_no: 'Checking',
26
+ # payer: {
27
+ # openid: 'oly6s5c'
28
+ # },
29
+ # amount: {
30
+ # total: 1
31
+ # },
32
+ # notify_url: ENV['NOTIFICATION_URL']
33
+ # }
34
+ #
35
+ # WechatPay::Direct.invoke_transactions_in_$1(params)
36
+ # ```
37
+ # @!method invoke_transactions_in_$1
38
+ # @!scope class
39
+ def self.define_transaction_method(key, value, _document)
40
+ const_set("INVOKE_TRANSACTIONS_IN_#{key.upcase}_FIELDS",
41
+ %i[description out_trade out_trade_no payer amount notify_url].freeze)
42
+ define_singleton_method "invoke_transactions_in_#{key}" do |params|
43
+ direct_transactions_method_by_suffix(value, params)
44
+ end
45
+ end
148
46
 
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|
47
+ define_transaction_method('js', 'jsapi', 'https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml')
48
+ define_transaction_method('miniprogram', 'jsapi', 'https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml')
49
+ define_transaction_method('app', 'app', 'https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_1.shtml')
50
+ define_transaction_method('h5', 'h5', 'https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_3_1.shtml')
51
+ define_transaction_method('native', 'native', 'https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_1.shtml')
52
+
53
+ # @private
54
+ # @!macro [attach] define_combine_transaction_method
55
+ # 直连合单$1下单
56
+ #
57
+ # Document: $3
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_$1(params)
82
+ # ```
83
+ # @!method invoke_combine_transactions_in_$1
84
+ # @!scope class
85
+ def self.define_combine_transaction_method(key, _value, _document)
187
86
  const_set("INVOKE_COMBINE_TRANSACTIONS_IN_#{key.upcase}_FIELDS",
188
87
  %i[combine_out_trade_no scene_info sub_orders notify_url].freeze)
189
88
  define_singleton_method("invoke_combine_transactions_in_#{key}") do |params|
@@ -191,6 +90,12 @@ module WechatPay
191
90
  end
192
91
  end
193
92
 
93
+ define_combine_transaction_method('app', 'app', 'https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_1.shtml')
94
+ define_combine_transaction_method('js', 'jsapi', 'https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_3.shtml')
95
+ define_combine_transaction_method('h5', 'h5', 'https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_2.shtml')
96
+ define_combine_transaction_method('miniprogram', 'jsapi', 'https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_4.shtml')
97
+ define_combine_transaction_method('native', 'native', 'https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_5.shtml')
98
+
194
99
  QUERY_COMBINE_ORDER_FIELDS = %i[combine_out_trade_no].freeze # :nodoc:
195
100
  #
196
101
  # 合单查询
@@ -251,153 +156,6 @@ module WechatPay
251
156
  )
252
157
  end
253
158
 
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)
398
- end
399
- end
400
-
401
159
  QUERY_ORDER_FIELDS = %i[out_trade_no transaction_id].freeze # :nodoc:
402
160
  #
403
161
  # 直连订单查询