wx_pay 0.17.0 → 0.18.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 +4 -4
- data/lib/wx_pay/service.rb +28 -4
- data/lib/wx_pay/sign.rb +14 -2
- data/lib/wx_pay/version.rb +1 -1
- data/test/wx_pay/sign_test.rb +14 -4
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58376390f703eda446bc3b8c692d11c9aeb001e6fde882515ecb1fce1f490aa4
|
4
|
+
data.tar.gz: fa597c10df24591e2e62c460b64c4c73a5deb46e41ec4f85bd9a99cd4b05cac5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5815550a0ae5ce7568c6389329f0a4c3f856fa6de917e706f3c856bc4aed6b19fa57bd5477c40e6bf6df7ff228939e7bba05e70945d514dc4f982990fbb09af8
|
7
|
+
data.tar.gz: 3eb50fdd268f845f2a7e931f37de8672bb8128f23bfb9d99b88c1931db63b5afc85aadbb2c421e6c3d58e4b05a35484a99fcd31280fb750d81539b65ffbb89cb
|
data/lib/wx_pay/service.rb
CHANGED
@@ -361,6 +361,30 @@ module WxPay
|
|
361
361
|
r
|
362
362
|
end
|
363
363
|
|
364
|
+
DOWNLOAD_FUND_FLOW_REQUIRED_FIELDS = [:bill_date, :account_type]
|
365
|
+
def self.download_fund_flow(params, options = {})
|
366
|
+
params = {
|
367
|
+
appid: options.delete(:appid) || WxPay.appid,
|
368
|
+
mch_id: options.delete(:mch_id) || WxPay.mch_id,
|
369
|
+
nonce_str: SecureRandom.uuid.tr('-', ''),
|
370
|
+
key: options.delete(:key) || WxPay.key
|
371
|
+
}.merge(params)
|
372
|
+
|
373
|
+
check_required_options(params, DOWNLOAD_FUND_FLOW_REQUIRED_FIELDS)
|
374
|
+
|
375
|
+
options = {
|
376
|
+
ssl_client_cert: options.delete(:apiclient_cert) || WxPay.apiclient_cert,
|
377
|
+
ssl_client_key: options.delete(:apiclient_key) || WxPay.apiclient_key,
|
378
|
+
verify_ssl: OpenSSL::SSL::VERIFY_NONE
|
379
|
+
}.merge(options)
|
380
|
+
|
381
|
+
r = invoke_remote("/pay/downloadfundflow", make_payload(params, WxPay::Sign::SIGN_TYPE_HMAC_SHA256), options)
|
382
|
+
|
383
|
+
yield r if block_given?
|
384
|
+
|
385
|
+
r
|
386
|
+
end
|
387
|
+
|
364
388
|
def self.sendgroupredpack(params, options={})
|
365
389
|
params = {
|
366
390
|
wxappid: options.delete(:appid) || WxPay.appid,
|
@@ -420,13 +444,13 @@ module WxPay
|
|
420
444
|
end
|
421
445
|
end
|
422
446
|
|
423
|
-
def xmlify_payload(params)
|
424
|
-
sign = WxPay::Sign.generate(params)
|
447
|
+
def xmlify_payload(params, sign_type = WxPay::Sign::SIGN_TYPE_MD5)
|
448
|
+
sign = WxPay::Sign.generate(params, sign_type)
|
425
449
|
params.delete(:key) if params[:key]
|
426
450
|
"<xml>#{params.map { |k, v| "<#{k}>#{v}</#{k}>" }.join}<sign>#{sign}</sign></xml>"
|
427
451
|
end
|
428
452
|
|
429
|
-
def make_payload(params)
|
453
|
+
def make_payload(params, sign_type = WxPay::Sign::SIGN_TYPE_MD5)
|
430
454
|
if WxPay.sandbox_mode?
|
431
455
|
r = get_sandbox_signkey
|
432
456
|
if r['return_code'] == WxPay::Result::SUCCESS_FLAG
|
@@ -439,7 +463,7 @@ module WxPay
|
|
439
463
|
warn("WxPay Warn: fetch sandbox sign key failed #{r['return_msg']}")
|
440
464
|
end
|
441
465
|
end
|
442
|
-
xmlify_payload(params)
|
466
|
+
xmlify_payload(params, sign_type)
|
443
467
|
end
|
444
468
|
|
445
469
|
def invoke_remote(url, payload, options = {})
|
data/lib/wx_pay/sign.rb
CHANGED
@@ -2,14 +2,26 @@ require 'digest/md5'
|
|
2
2
|
|
3
3
|
module WxPay
|
4
4
|
module Sign
|
5
|
-
|
5
|
+
|
6
|
+
SIGN_TYPE_MD5 = 'MD5'
|
7
|
+
SIGN_TYPE_HMAC_SHA256 = 'HMAC-SHA256'
|
8
|
+
|
9
|
+
def self.generate(params, sign_type = SIGN_TYPE_MD5)
|
6
10
|
key = params.delete(:key)
|
7
11
|
|
8
12
|
query = params.sort.map do |k, v|
|
9
13
|
"#{k}=#{v}" if v.to_s != ''
|
10
14
|
end.compact.join('&')
|
11
15
|
|
12
|
-
|
16
|
+
string_sign_temp = "#{query}&key=#{key || WxPay.key}"
|
17
|
+
|
18
|
+
if sign_type == SIGN_TYPE_MD5
|
19
|
+
Digest::MD5.hexdigest(string_sign_temp).upcase
|
20
|
+
elsif sign_type == SIGN_TYPE_HMAC_SHA256
|
21
|
+
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), key, string_sign_temp).upcase
|
22
|
+
else
|
23
|
+
warn("WxPay Warn: unknown sign_type : #{sign_type}")
|
24
|
+
end
|
13
25
|
end
|
14
26
|
|
15
27
|
def self.verify?(params, options = {})
|
data/lib/wx_pay/version.rb
CHANGED
data/test/wx_pay/sign_test.rb
CHANGED
@@ -14,19 +14,29 @@ class WxPay::SignTest < MiniTest::Test
|
|
14
14
|
total_fee: 1
|
15
15
|
}
|
16
16
|
|
17
|
-
@
|
17
|
+
@sign_md5 = '729A68AC3DE268DBD9ADE442382E7B24'
|
18
|
+
@sign_hmac_sha256 = 'A58C01F990B45A4D0E496F835B2739E391C6C734927B1DA740DC873E607FB42A'
|
18
19
|
end
|
19
20
|
|
20
21
|
def test_generate_sign
|
21
|
-
assert_equal @
|
22
|
+
assert_equal @sign_md5, WxPay::Sign.generate(@params)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_generate_sign_md5
|
26
|
+
assert_equal @sign_md5, WxPay::Sign.generate(@params, WxPay::Sign::SIGN_TYPE_MD5)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_generate_sign_hmac_sha256
|
30
|
+
@params.merge!(key: "key")
|
31
|
+
assert_equal @sign_hmac_sha256, WxPay::Sign.generate(@params, WxPay::Sign::SIGN_TYPE_HMAC_SHA256)
|
22
32
|
end
|
23
33
|
|
24
34
|
def test_verify_sign
|
25
|
-
assert WxPay::Sign.verify?(@params.merge(:sign => @
|
35
|
+
assert WxPay::Sign.verify?(@params.merge(:sign => @sign_md5))
|
26
36
|
end
|
27
37
|
|
28
38
|
def test_verify_sign_when_fails
|
29
|
-
assert !WxPay::Sign.verify?(@params.merge(:danger => 'danger', :sign => @
|
39
|
+
assert !WxPay::Sign.verify?(@params.merge(:danger => 'danger', :sign => @sign_md5))
|
30
40
|
end
|
31
41
|
|
32
42
|
def test_accept_pars_key_to_generate_sign
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wx_pay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jasl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -132,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
132
|
version: '0'
|
133
133
|
requirements: []
|
134
134
|
rubyforge_project:
|
135
|
-
rubygems_version: 2.7.
|
135
|
+
rubygems_version: 2.7.6
|
136
136
|
signing_key:
|
137
137
|
specification_version: 4
|
138
138
|
summary: An unofficial simple wechat pay gem
|