wx_pay 0.0.4 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/wx_pay.rb +5 -1
- data/lib/wx_pay/service.rb +31 -2
- data/lib/wx_pay/version.rb +1 -1
- data/test/test_helper.rb +1 -0
- data/test/wx_pay/service_test.rb +51 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f60e9ab955e8797883c4befead6e4de2a0f65d0e
|
4
|
+
data.tar.gz: 7a299e0d07bf2eb5f3b8c899e73d1d93805d3ecf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76b692ac8affd84e344736645d44742af351540dac7ac56cb94feed71c939d3c80b997c1d41078756612e9da4ccdf1d8cfc39fb7d83c051a2efb36cd68ba0afa
|
7
|
+
data.tar.gz: e435dbdf3d63f7245556d55e8b55443915716289c4f0fa096192ad1fb91c13a5c819149b4fcd2502b5dfdd3702dcedab38c0d6656a361ad678453e2ae73c2b95
|
data/lib/wx_pay.rb
CHANGED
@@ -4,7 +4,7 @@ require 'wx_pay/service'
|
|
4
4
|
|
5
5
|
module WxPay
|
6
6
|
class<< self
|
7
|
-
attr_accessor :appid, :mch_id, :key
|
7
|
+
attr_accessor :appid, :mch_id, :key, :apiclient_cert_path
|
8
8
|
|
9
9
|
def extra_rest_client_options=(options)
|
10
10
|
@rest_client_options = options
|
@@ -13,5 +13,9 @@ module WxPay
|
|
13
13
|
def extra_rest_client_options
|
14
14
|
@rest_client_options || {}
|
15
15
|
end
|
16
|
+
|
17
|
+
def apiclient_cert
|
18
|
+
@apiclient_cert ||= OpenSSL::PKCS12.new(WxPay.apiclient_cert_path, WxPay.mch_id)
|
19
|
+
end
|
16
20
|
end
|
17
21
|
end
|
data/lib/wx_pay/service.rb
CHANGED
@@ -3,7 +3,7 @@ require 'active_support/core_ext/hash/conversions'
|
|
3
3
|
|
4
4
|
module WxPay
|
5
5
|
module Service
|
6
|
-
GATEWAY_URL = 'https://api.mch.weixin.qq.com
|
6
|
+
GATEWAY_URL = 'https://api.mch.weixin.qq.com'
|
7
7
|
|
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)
|
@@ -15,7 +15,7 @@ module WxPay
|
|
15
15
|
|
16
16
|
check_required_options(params, INVOKE_UNIFIEDORDER_REQUIRED_FIELDS)
|
17
17
|
|
18
|
-
r = invoke_remote("#{GATEWAY_URL}/unifiedorder", make_payload(params))
|
18
|
+
r = invoke_remote("#{GATEWAY_URL}/pay/unifiedorder", make_payload(params))
|
19
19
|
|
20
20
|
yield r if block_given?
|
21
21
|
|
@@ -38,6 +38,35 @@ module WxPay
|
|
38
38
|
params
|
39
39
|
end
|
40
40
|
|
41
|
+
INVOKE_REFUND_REQUIRED_FIELDS = %i(transaction_id out_trade_no out_refund_no total_fee refund_fee)
|
42
|
+
def self.invoke_refund(params)
|
43
|
+
params = {
|
44
|
+
appid: WxPay.appid,
|
45
|
+
mch_id: WxPay.mch_id,
|
46
|
+
nonce_str: SecureRandom.uuid.tr('-', ''),
|
47
|
+
op_user_id: WxPay.mch_id
|
48
|
+
}.merge(params)
|
49
|
+
|
50
|
+
check_required_options(params, INVOKE_REFUND_REQUIRED_FIELDS)
|
51
|
+
|
52
|
+
# 微信退款需要双向证书
|
53
|
+
# https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4
|
54
|
+
# https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3
|
55
|
+
|
56
|
+
WxPay.extra_rest_client_options = {
|
57
|
+
ssl_client_cert: WxPay.apiclient_cert.certificate,
|
58
|
+
ssl_client_key: WxPay.apiclient_cert.key,
|
59
|
+
verify_ssl: OpenSSL::SSL::VERIFY_NONE
|
60
|
+
}
|
61
|
+
|
62
|
+
r = invoke_remote "#{GATEWAY_URL}/secapi/pay/refund", make_payload(params)
|
63
|
+
|
64
|
+
yield(r) if block_given?
|
65
|
+
|
66
|
+
r
|
67
|
+
end
|
68
|
+
|
69
|
+
|
41
70
|
private
|
42
71
|
|
43
72
|
def self.check_required_options(options, names)
|
data/lib/wx_pay/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -0,0 +1,51 @@
|
|
1
|
+
|
2
|
+
class ServiceTest < MiniTest::Test
|
3
|
+
def setup
|
4
|
+
@params = {
|
5
|
+
transaction_id: '1217752501201407033233368018',
|
6
|
+
op_user_id: '10000100',
|
7
|
+
out_refund_no: '1415701182',
|
8
|
+
out_trade_no: '1415757673',
|
9
|
+
refund_fee: 1,
|
10
|
+
total_fee: 1
|
11
|
+
}
|
12
|
+
|
13
|
+
@apiclient_cert = Minitest::Mock.new
|
14
|
+
@apiclient_cert.expect(:certificate, 'certificate')
|
15
|
+
@apiclient_cert.expect(:key, 'key')
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_invoke_refund
|
19
|
+
|
20
|
+
|
21
|
+
response_body = <<-EOF
|
22
|
+
<xml>
|
23
|
+
<return_code><![CDATA[SUCCESS]]></return_code>
|
24
|
+
<return_msg><![CDATA[OK]]></return_msg>
|
25
|
+
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
|
26
|
+
<mch_id><![CDATA[10000100]]></mch_id>
|
27
|
+
<nonce_str><![CDATA[NfsMFbUFpdbEhPXP]]></nonce_str>
|
28
|
+
<sign><![CDATA[B7274EB9F8925EB93100DD2085FA56C0]]></sign>
|
29
|
+
<result_code><![CDATA[SUCCESS]]></result_code>
|
30
|
+
<transaction_id><![CDATA[1008450740201411110005820873]]></transaction_id>
|
31
|
+
<out_trade_no><![CDATA[1415757673]]></out_trade_no>
|
32
|
+
<out_refund_no><![CDATA[1415701182]]></out_refund_no>
|
33
|
+
<refund_id><![CDATA[2008450740201411110000174436]]></refund_id>
|
34
|
+
<refund_channel><![CDATA[]]></refund_channel>
|
35
|
+
<refund_fee>1</refund_fee>
|
36
|
+
<coupon_refund_fee>0</coupon_refund_fee>
|
37
|
+
</xml>
|
38
|
+
EOF
|
39
|
+
|
40
|
+
FakeWeb.register_uri(
|
41
|
+
:post,
|
42
|
+
%r|https://api\.mch\.weixin\.qq\.com*|,
|
43
|
+
body: response_body
|
44
|
+
)
|
45
|
+
|
46
|
+
WxPay.stub :apiclient_cert, @apiclient_cert do
|
47
|
+
r = WxPay::Service.invoke_refund(@params)
|
48
|
+
assert_equal r.success?, true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
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.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jasl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3.2'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3.2'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,6 +110,7 @@ files:
|
|
110
110
|
- lib/wx_pay/version.rb
|
111
111
|
- test/test_helper.rb
|
112
112
|
- test/wx_pay/result_test.rb
|
113
|
+
- test/wx_pay/service_test.rb
|
113
114
|
- test/wx_pay/sign_test.rb
|
114
115
|
homepage: https://github.com/jasl/wx_pay
|
115
116
|
licenses:
|
@@ -138,5 +139,6 @@ summary: An unofficial simple wechat pay gem
|
|
138
139
|
test_files:
|
139
140
|
- test/test_helper.rb
|
140
141
|
- test/wx_pay/result_test.rb
|
142
|
+
- test/wx_pay/service_test.rb
|
141
143
|
- test/wx_pay/sign_test.rb
|
142
144
|
has_rdoc:
|