alipay 0.6.0.beta3 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -14
- data/README.md +41 -9
- data/lib/alipay/service.rb +21 -3
- data/lib/alipay/sign.rb +1 -1
- data/lib/alipay/sign/dsa.rb +2 -2
- data/lib/alipay/version.rb +1 -1
- data/test/alipay/notify_test.rb +7 -7
- data/test/alipay/service_test.rb +57 -44
- data/test/alipay/sign/rsa_test.rb +20 -0
- data/test/alipay/sign_test.rb +7 -7
- data/test/alipay/wap/notify_test.rb +8 -8
- data/test/alipay/wap/service_test.rb +7 -8
- data/test/alipay/wap/sign_test.rb +6 -6
- data/test/test_helper.rb +28 -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: 5d5f4d314f9fb4867e21f408875ef8e7a50e6579
|
4
|
+
data.tar.gz: c1d5d4d2838f56161d45c3e658a7b1d36c7416ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86934d7c497a1dd1878a77b8b631c412bbbf7ac75f136f2140887c729d7fe69b0854ca1e677600a065b889a88a5173479866eb9c93bc80cdf53810085e64df1c
|
7
|
+
data.tar.gz: 11c4634fd023d90e2ec98b41f597b1ba18d81de9a54d430fffa7116d258017d700873afd73f0cb8295ea51947566ab9d6d61901ceec1788ba318302495142ede
|
data/CHANGELOG.md
CHANGED
@@ -1,9 +1,15 @@
|
|
1
|
-
##
|
1
|
+
## v.0.6.0
|
2
2
|
|
3
|
-
|
4
|
-
- Fixed gmt_return timezone to +08:00.
|
3
|
+
New API:
|
5
4
|
|
6
|
-
|
5
|
+
- Add Alipay::Service.mobile_security_pay_url.
|
6
|
+
- All service methods accept `options` args to config pid, seller_email and key.
|
7
|
+
|
8
|
+
New Config:
|
9
|
+
|
10
|
+
- Add `Alipay.sign_type`, default is 'MD5', allow: 'MD5', 'RSA'. 'DSA' is not implemented yet.
|
11
|
+
|
12
|
+
Break Changes:
|
7
13
|
|
8
14
|
- Move `Alipay::Service::Wap` to `Alipay::Wap::Service`
|
9
15
|
- Move `Alipay::Sign::Wap` to `Alipay::Wap::Sign`
|
@@ -11,21 +17,14 @@
|
|
11
17
|
- Rename `Alipay::Service.create_forex_single_refund_url` to `Alipay::Service.forex_refund_url`
|
12
18
|
- Rename `Alipay::Service.create_forex_trade` to `Alipay::Service.create_forex_trade_url`
|
13
19
|
- Rename `Alipay::Service.create_refund_url` to `Alipay::Service.refund_fastpay_by_platform_pwd_url`
|
14
|
-
-
|
15
|
-
|
16
|
-
## v0.6.0.beta1 (2015-03-26)
|
17
|
-
|
18
|
-
Usage:
|
20
|
+
- Rename `Service::Wap.auth_and_execute` to `Service::Wap::Service.auth_and_execute_url`
|
19
21
|
|
20
|
-
|
21
|
-
- Remove `Sign::App.verify?`, use `Sign.verify_rsa?` instead.
|
22
|
-
- Remove `Notify::App.verify?`, use `Notify.verify?` instead.
|
23
|
-
- Rename `Service::Wap.auth_and_execute` to `Service::Wap.auth_and_execute_url`
|
22
|
+
Now `Alipay::Sign.verify?` and `Alipay::Wap::Sign.verify?` detect sign_type by params.
|
24
23
|
|
25
24
|
Development:
|
26
25
|
|
27
26
|
- Update Test::Unit to Minitest.
|
28
|
-
-
|
27
|
+
- Use fxied test data.
|
29
28
|
|
30
29
|
## v0.5.0 (2015-03-09)
|
31
30
|
|
data/README.md
CHANGED
@@ -4,20 +4,12 @@ A unofficial alipay ruby gem.
|
|
4
4
|
|
5
5
|
Alipay official document: https://b.alipay.com/order/techService.htm .
|
6
6
|
|
7
|
-
Master branch(v0.6.0) is in develop, checkout [v0.5.0](https://github.com/chloerei/alipay/tree/v0.5.0) if you want to use in production.
|
8
|
-
|
9
7
|
## Installation
|
10
8
|
|
11
9
|
Add this line to your application's Gemfile:
|
12
10
|
|
13
11
|
```ruby
|
14
|
-
gem 'alipay', '~> 0.6.0
|
15
|
-
```
|
16
|
-
|
17
|
-
or master branch:
|
18
|
-
|
19
|
-
```ruby
|
20
|
-
gem 'alipay', github: 'chloerei/alipay'
|
12
|
+
gem 'alipay', '~> 0.6.0'
|
21
13
|
```
|
22
14
|
|
23
15
|
And then execute:
|
@@ -368,6 +360,46 @@ Alipay::Service.forex_refund_url(
|
|
368
360
|
|
369
361
|
\* Auto set Time.now if not set.
|
370
362
|
|
363
|
+
### 快捷支付(无线)
|
364
|
+
|
365
|
+
#### Name
|
366
|
+
|
367
|
+
```ruby
|
368
|
+
mobile.securitypay.pay
|
369
|
+
```
|
370
|
+
|
371
|
+
#### Definition
|
372
|
+
|
373
|
+
```ruby
|
374
|
+
Alipay::Service.mobile_security_pay_url({ARGUMENTS}, {OPTIONS})
|
375
|
+
```
|
376
|
+
|
377
|
+
#### Example
|
378
|
+
|
379
|
+
```ruby
|
380
|
+
Alipay::Service.mobile_security_pay_url(
|
381
|
+
out_trade_no: '20150401000-0001',
|
382
|
+
notify_url: 'https://example.com/orders/20150401000-0001/notify'
|
383
|
+
subject: 'subject',
|
384
|
+
total_fee: '10.00',
|
385
|
+
body: 'text'
|
386
|
+
)
|
387
|
+
```
|
388
|
+
|
389
|
+
#### ARGUMENTS
|
390
|
+
|
391
|
+
| Key | Requirement | Description |
|
392
|
+
| --- | ----------- | ----------- |
|
393
|
+
| out_trade_no | required | Order number in your application. |
|
394
|
+
| notify_url | required | Alipay asyn notify url. |
|
395
|
+
| subject | required | Order subject. |
|
396
|
+
| total_fee | required | Order total price. |
|
397
|
+
| body | required | Order body, less than 512 bytes. |
|
398
|
+
|
399
|
+
\* This service only support RSA sign_type.
|
400
|
+
|
401
|
+
This is not a complete list of arguments, please read official document: http://download.alipay.com/public/api/base/WS_MOBILE_PAY_SDK_BASE.zip .
|
402
|
+
|
371
403
|
### 验证通知
|
372
404
|
|
373
405
|
#### Name
|
data/lib/alipay/service.rb
CHANGED
@@ -163,16 +163,34 @@ module Alipay
|
|
163
163
|
Net::HTTP.get(request_uri(params, options))
|
164
164
|
end
|
165
165
|
|
166
|
+
MOBILD_SECURITY_PAY_REQUIRED_PARAMS = %w( notify_url out_trade_no subject total_fee body )
|
167
|
+
def self.mobile_security_pay_url(params, options = {})
|
168
|
+
params = Utils.stringify_keys(params)
|
169
|
+
check_required_params(params, MOBILD_SECURITY_PAY_REQUIRED_PARAMS)
|
170
|
+
sign_type = options[:sign_type] || Alipay.sign_type
|
171
|
+
raise ArgumentError, "only support RSA sign_type" if sign_type != 'RSA'
|
172
|
+
|
173
|
+
params = {
|
174
|
+
'_input_charset' => 'utf-8',
|
175
|
+
'partner' => options[:pid] || Alipay.pid,
|
176
|
+
'seller_id' => options[:seller_email] || Alipay.seller_email,
|
177
|
+
'payment_type' => '1',
|
178
|
+
'service' => 'mobile.securitypay.pay'
|
179
|
+
}.merge(params)
|
180
|
+
|
181
|
+
request_uri(params, options).to_s
|
182
|
+
end
|
183
|
+
|
166
184
|
def self.request_uri(params, options = {})
|
167
185
|
uri = URI(GATEWAY_URL)
|
168
186
|
uri.query = URI.encode_www_form(sign_params(params, options))
|
169
187
|
uri
|
170
188
|
end
|
171
189
|
|
172
|
-
def self.sign_params(params,
|
190
|
+
def self.sign_params(params, options = {})
|
173
191
|
params.merge(
|
174
|
-
'sign_type' => (
|
175
|
-
'sign' => Alipay::Sign.generate(params,
|
192
|
+
'sign_type' => (options[:sign_type] || Alipay.sign_type),
|
193
|
+
'sign' => Alipay::Sign.generate(params, options)
|
176
194
|
)
|
177
195
|
end
|
178
196
|
|
data/lib/alipay/sign.rb
CHANGED
@@ -14,7 +14,7 @@ module Alipay
|
|
14
14
|
when 'DSA'
|
15
15
|
DSA.sign(key, string)
|
16
16
|
else
|
17
|
-
raise ArgumentError, "
|
17
|
+
raise ArgumentError, "invalid sign_type #{sign_type}, allow value: 'MD5', 'RSA', 'DSA'"
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
data/lib/alipay/sign/dsa.rb
CHANGED
@@ -2,11 +2,11 @@ module Alipay
|
|
2
2
|
module Sign
|
3
3
|
class DSA
|
4
4
|
def self.sign(key, string)
|
5
|
-
raise NotImplementedError, '
|
5
|
+
raise NotImplementedError, 'DSA sign is not implemented'
|
6
6
|
end
|
7
7
|
|
8
8
|
def self.verify?(string, sign)
|
9
|
-
raise NotImplementedError, '
|
9
|
+
raise NotImplementedError, 'DSA verify is not implemented'
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
data/lib/alipay/version.rb
CHANGED
data/test/alipay/notify_test.rb
CHANGED
@@ -3,27 +3,27 @@ require 'test_helper'
|
|
3
3
|
class Alipay::NotifyTest < Minitest::Test
|
4
4
|
def setup
|
5
5
|
@params = {
|
6
|
-
:
|
6
|
+
notify_id: '1234',
|
7
7
|
}
|
8
|
-
@unsign_params = @params.merge(:
|
8
|
+
@unsign_params = @params.merge(sign_type: 'MD5', sign: 'xxxx')
|
9
9
|
@sign_params = @params.merge(
|
10
|
-
:
|
11
|
-
:
|
10
|
+
sign_type: 'MD5',
|
11
|
+
sign: '22fc7e38e5acdfede396aa463870d111'
|
12
12
|
)
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_unsign_notify
|
16
|
-
FakeWeb.register_uri(:get, "https://mapi.alipay.com/gateway.do?service=notify_verify&partner=#{Alipay.pid}¬ify_id=1234", :
|
16
|
+
FakeWeb.register_uri(:get, "https://mapi.alipay.com/gateway.do?service=notify_verify&partner=#{Alipay.pid}¬ify_id=1234", body: "true")
|
17
17
|
assert !Alipay::Notify.verify?(@unsign_params)
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_verify_notify_when_true
|
21
|
-
FakeWeb.register_uri(:get, "https://mapi.alipay.com/gateway.do?service=notify_verify&partner=#{Alipay.pid}¬ify_id=1234", :
|
21
|
+
FakeWeb.register_uri(:get, "https://mapi.alipay.com/gateway.do?service=notify_verify&partner=#{Alipay.pid}¬ify_id=1234", body: "true")
|
22
22
|
assert Alipay::Notify.verify?(@sign_params)
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_verify_notify_when_false
|
26
|
-
FakeWeb.register_uri(:get, "https://mapi.alipay.com/gateway.do?service=notify_verify&partner=#{Alipay.pid}¬ify_id=1234", :
|
26
|
+
FakeWeb.register_uri(:get, "https://mapi.alipay.com/gateway.do?service=notify_verify&partner=#{Alipay.pid}¬ify_id=1234", body: "false")
|
27
27
|
assert !Alipay::Notify.verify?(@sign_params)
|
28
28
|
end
|
29
29
|
end
|
data/test/alipay/service_test.rb
CHANGED
@@ -3,13 +3,13 @@ require 'test_helper'
|
|
3
3
|
class Alipay::ServiceTest < Minitest::Test
|
4
4
|
def test_generate_create_partner_trade_by_buyer_url
|
5
5
|
options = {
|
6
|
-
:
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
6
|
+
out_trade_no: '1',
|
7
|
+
subject: 'test',
|
8
|
+
logistics_type: 'POST',
|
9
|
+
logistics_fee: '0',
|
10
|
+
logistics_payment: 'SELLER_PAY',
|
11
|
+
price: '0.01',
|
12
|
+
quantity: 1
|
13
13
|
}
|
14
14
|
|
15
15
|
assert_equal 'https://mapi.alipay.com/gateway.do?service=create_partner_trade_by_buyer&_input_charset=utf-8&partner=1000000000000000&seller_email=admin%40example.com&payment_type=1&out_trade_no=1&subject=test&logistics_type=POST&logistics_fee=0&logistics_payment=SELLER_PAY&price=0.01&quantity=1&sign_type=MD5&sign=09c5d8fd3d7eac18268fffa4cdffd19e', Alipay::Service.create_partner_trade_by_buyer_url(options)
|
@@ -17,61 +17,61 @@ class Alipay::ServiceTest < Minitest::Test
|
|
17
17
|
|
18
18
|
def test_generate_trade_create_by_buyer_url
|
19
19
|
options = {
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
24
|
-
:
|
25
|
-
:
|
26
|
-
:
|
20
|
+
out_trade_no: '1',
|
21
|
+
subject: 'test',
|
22
|
+
logistics_type: 'POST',
|
23
|
+
logistics_fee: '0',
|
24
|
+
logistics_payment: 'SELLER_PAY',
|
25
|
+
price: '0.01',
|
26
|
+
quantity: 1
|
27
27
|
}
|
28
28
|
assert_equal 'https://mapi.alipay.com/gateway.do?service=trade_create_by_buyer&_input_charset=utf-8&partner=1000000000000000&seller_email=admin%40example.com&payment_type=1&out_trade_no=1&subject=test&logistics_type=POST&logistics_fee=0&logistics_payment=SELLER_PAY&price=0.01&quantity=1&sign_type=MD5&sign=62b029a767accbbd5f3b085da5959506', Alipay::Service.trade_create_by_buyer_url(options)
|
29
29
|
end
|
30
30
|
|
31
31
|
def test_generate_create_direct_pay_by_user_url
|
32
32
|
options = {
|
33
|
-
:
|
34
|
-
:
|
35
|
-
:
|
36
|
-
:
|
33
|
+
out_trade_no: '1',
|
34
|
+
subject: 'test',
|
35
|
+
price: '0.01',
|
36
|
+
quantity: 1
|
37
37
|
}
|
38
38
|
assert_equal 'https://mapi.alipay.com/gateway.do?service=create_direct_pay_by_user&_input_charset=utf-8&partner=1000000000000000&seller_email=admin%40example.com&payment_type=1&out_trade_no=1&subject=test&price=0.01&quantity=1&sign_type=MD5&sign=51c7f60e85eaff5136600d1942b2744c', Alipay::Service.create_direct_pay_by_user_url(options)
|
39
39
|
end
|
40
40
|
|
41
41
|
def test_refund_fastpay_by_platform_pwd_url
|
42
42
|
data = [{
|
43
|
-
:
|
44
|
-
:
|
45
|
-
:
|
43
|
+
trade_no: '1',
|
44
|
+
amount: '0.01',
|
45
|
+
reason: 'test'
|
46
46
|
}]
|
47
47
|
options = {
|
48
|
-
:
|
49
|
-
:
|
50
|
-
:
|
51
|
-
:
|
48
|
+
batch_no: '123456789',
|
49
|
+
data: data,
|
50
|
+
notify_url: '/some_url',
|
51
|
+
refund_date: '2015-01-01 00:00:00'
|
52
52
|
}
|
53
53
|
assert_equal "https://mapi.alipay.com/gateway.do?service=refund_fastpay_by_platform_pwd&_input_charset=utf-8&partner=1000000000000000&seller_email=admin%40example.com&refund_date=2015-01-01+00%3A00%3A00&batch_num=1&detail_data=1%5E0.01%5Etest&batch_no=123456789¬ify_url=%2Fsome_url&sign_type=MD5&sign=3f5be5655b513334460a511e74a9ae57", Alipay::Service.refund_fastpay_by_platform_pwd_url(options)
|
54
54
|
end
|
55
55
|
|
56
56
|
def test_forex_refund_url
|
57
57
|
options = {
|
58
|
-
:
|
59
|
-
:
|
60
|
-
:
|
61
|
-
:
|
62
|
-
:
|
63
|
-
:
|
58
|
+
out_return_no: '1',
|
59
|
+
out_trade_no: '12345678980',
|
60
|
+
return_amount: '0.01',
|
61
|
+
currency: 'USD',
|
62
|
+
reason: 'reason',
|
63
|
+
gmt_return: '20150101000000'
|
64
64
|
}
|
65
65
|
assert_equal 'https://mapi.alipay.com/gateway.do?service=forex_refund&partner=1000000000000000&_input_charset=utf-8&gmt_return=20150101000000&out_return_no=1&out_trade_no=12345678980&return_amount=0.01¤cy=USD&reason=reason&sign_type=MD5&sign=c9681fff5505fe993d1b2b8141308d0d', Alipay::Service.forex_refund_url(options)
|
66
66
|
end
|
67
67
|
|
68
68
|
def test_generate_create_forex_trade_url
|
69
69
|
options = {
|
70
|
-
:
|
71
|
-
:
|
72
|
-
:
|
73
|
-
:
|
74
|
-
:
|
70
|
+
notify_url: 'https://example.com/notify',
|
71
|
+
subject: 'test',
|
72
|
+
out_trade_no: '1',
|
73
|
+
currency: 'EUR',
|
74
|
+
total_fee: '0.01',
|
75
75
|
}
|
76
76
|
assert_equal 'https://mapi.alipay.com/gateway.do?service=create_forex_trade&_input_charset=utf-8&partner=1000000000000000&seller_email=admin%40example.com¬ify_url=https%3A%2F%2Fexample.com%2Fnotify&subject=test&out_trade_no=1¤cy=EUR&total_fee=0.01&sign_type=MD5&sign=495a0e610134aa33f6ce021f8b8c6c8d', Alipay::Service.create_forex_trade_url(options)
|
77
77
|
end
|
@@ -86,11 +86,11 @@ class Alipay::ServiceTest < Minitest::Test
|
|
86
86
|
FakeWeb.register_uri(
|
87
87
|
:get,
|
88
88
|
%r|https://mapi\.alipay\.com/gateway\.do.*|,
|
89
|
-
:
|
89
|
+
body: response_body
|
90
90
|
)
|
91
91
|
|
92
92
|
assert_equal response_body, Alipay::Service.close_trade(
|
93
|
-
:
|
93
|
+
out_order_no: '1'
|
94
94
|
)
|
95
95
|
end
|
96
96
|
|
@@ -138,11 +138,11 @@ class Alipay::ServiceTest < Minitest::Test
|
|
138
138
|
FakeWeb.register_uri(
|
139
139
|
:get,
|
140
140
|
%r|https://mapi\.alipay\.com/gateway\.do.*|,
|
141
|
-
:
|
141
|
+
body: response_body
|
142
142
|
)
|
143
143
|
|
144
144
|
assert_equal response_body, Alipay::Service.single_trade_query(
|
145
|
-
:
|
145
|
+
out_trade_no: '1'
|
146
146
|
)
|
147
147
|
end
|
148
148
|
|
@@ -156,13 +156,26 @@ class Alipay::ServiceTest < Minitest::Test
|
|
156
156
|
FakeWeb.register_uri(
|
157
157
|
:get,
|
158
158
|
%r|https://mapi\.alipay\.com/gateway\.do.*|,
|
159
|
-
:
|
159
|
+
body: body
|
160
160
|
)
|
161
161
|
|
162
162
|
assert_equal body, Alipay::Service.send_goods_confirm_by_platform(
|
163
|
-
:
|
164
|
-
:
|
165
|
-
:
|
163
|
+
trade_no: 'trade_no',
|
164
|
+
logistics_name: 'example.com',
|
165
|
+
transport_type: 'DIRECT'
|
166
166
|
)
|
167
167
|
end
|
168
|
+
|
169
|
+
def test_mobile_security_pay_url
|
170
|
+
assert_equal 'https://mapi.alipay.com/gateway.do?_input_charset=utf-8&partner=1000000000000000&seller_id=admin%40example.com&payment_type=1&service=mobile.securitypay.pay&out_trade_no=1¬ify_url=%2Fsome_url&subject=subject&total_fee=0.01&body=test&sign_type=RSA&sign=cEpcxOIFtNJwkWL7fJx%2F%2BToy6raiLnVF3L9cBt81rUHmD9Im0pM%2FzTH57Y7v%0AXlKK8OfrM07pOLqD0mrLXsuCUU7C%2B%2BjfwUxcIixSdiwCLEsc36VsJf8Sgrt1%0Azx10SC7y2vd1Cvq0M822O86C%2FESMO1kpIdk%2BgiM%2FhjFCOKZEnLY%3D%0A', Alipay::Service.mobile_security_pay_url({
|
171
|
+
out_trade_no: '1',
|
172
|
+
notify_url: '/some_url',
|
173
|
+
subject: 'subject',
|
174
|
+
total_fee: '0.01',
|
175
|
+
body: 'test'
|
176
|
+
}, {
|
177
|
+
sign_type: 'RSA',
|
178
|
+
key: TEST_RSA_PRIVATE_KEY
|
179
|
+
})
|
180
|
+
end
|
168
181
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Alipay::Sign::RSATest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
@string = "partner=123&service=test"
|
6
|
+
@sign = "TaVXdP/0ia5NxIv9T76v6vGOrtgoaFrwnchKIWP9PQeX1UkUVxaq6ejDFmXF\nrFR+Plk+E/XzfV2DYJSVt0Am0qJRSgeg+PuvK+yWGCGm9GJgUJlS4Eyta3g+\n8DWwRWTjUyh5yzlf9JoSnbNjYpBolnMRD7B/u1JLkTMJuMx2TVM=\n"
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_sign
|
10
|
+
assert_equal @sign, Alipay::Sign::RSA.sign(TEST_RSA_PRIVATE_KEY, @string)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_verify
|
14
|
+
assert Alipay::Sign::RSA.verify?(TEST_RSA_PUBLIC_KEY, @string, @sign)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_verify_fail_when_sign_not_true
|
18
|
+
assert !Alipay::Sign::RSA.verify?(TEST_RSA_PUBLIC_KEY, "danger#{@string}", @sign)
|
19
|
+
end
|
20
|
+
end
|
data/test/alipay/sign_test.rb
CHANGED
@@ -3,8 +3,8 @@ require 'test_helper'
|
|
3
3
|
class Alipay::SignTest < Minitest::Test
|
4
4
|
def setup
|
5
5
|
@params = {
|
6
|
-
:
|
7
|
-
:
|
6
|
+
service: 'test',
|
7
|
+
partner: '123'
|
8
8
|
}
|
9
9
|
@md5_sign = 'bbd13b52823b576291595f472ebcfbc2'
|
10
10
|
|
@@ -14,17 +14,17 @@ class Alipay::SignTest < Minitest::Test
|
|
14
14
|
|
15
15
|
def test_generate_sign
|
16
16
|
assert_equal @md5_sign, Alipay::Sign.generate(@params)
|
17
|
-
assert_equal @md5_sign_2, Alipay::Sign.generate(@params, {:
|
17
|
+
assert_equal @md5_sign_2, Alipay::Sign.generate(@params, {key: @key_2})
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_verify_sign
|
21
|
-
assert Alipay::Sign.verify?(@params.merge(:
|
22
|
-
assert Alipay::Sign.verify?(@params.merge(:
|
21
|
+
assert Alipay::Sign.verify?(@params.merge(sign_type: 'MD5', sign: @md5_sign))
|
22
|
+
assert Alipay::Sign.verify?(@params.merge(sign_type: 'MD5', sign: @md5_sign_2), {key: @key_2})
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_verify_fail_when_sign_not_true
|
26
26
|
assert !Alipay::Sign.verify?(@params)
|
27
|
-
assert !Alipay::Sign.verify?(@params.merge(:
|
28
|
-
assert !Alipay::Sign.verify?(@params.merge(:
|
27
|
+
assert !Alipay::Sign.verify?(@params.merge(danger: 'danger', sign_type: 'MD5', sign: @md5_sign))
|
28
|
+
assert !Alipay::Sign.verify?(@params.merge(sign_type: 'MD5', sign: 'danger'))
|
29
29
|
end
|
30
30
|
end
|
@@ -5,28 +5,28 @@ class Alipay::Wap::NotifyTest < Minitest::Test
|
|
5
5
|
@notify_id = 'notify_id_test'
|
6
6
|
|
7
7
|
@notify_params = {
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
8
|
+
service: 'alipay.wap.trade.create.direct',
|
9
|
+
v: '1.0',
|
10
|
+
sec_id: 'MD5',
|
11
|
+
notify_data: "<notify><notify_id>#{@notify_id}</notify_id><other_key>other_value</other_key></notify>"
|
12
12
|
}
|
13
13
|
|
14
14
|
query = [ :service, :v, :sec_id, :notify_data ].map {|key| "#{key}=#{@notify_params[key]}"}.join('&')
|
15
|
-
@sign_params = @notify_params.merge(:
|
15
|
+
@sign_params = @notify_params.merge(sign: Digest::MD5.hexdigest("#{query}#{Alipay.key}"))
|
16
16
|
end
|
17
17
|
|
18
18
|
def test_unsign_notify
|
19
|
-
FakeWeb.register_uri(:get, "https://mapi.alipay.com/gateway.do?service=notify_verify&partner=#{Alipay.pid}¬ify_id=#{@notify_id}", :
|
19
|
+
FakeWeb.register_uri(:get, "https://mapi.alipay.com/gateway.do?service=notify_verify&partner=#{Alipay.pid}¬ify_id=#{@notify_id}", body: "true")
|
20
20
|
assert !Alipay::Wap::Notify.verify?(@notify_params)
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_verify_notify_when_true
|
24
|
-
FakeWeb.register_uri(:get, "https://mapi.alipay.com/gateway.do?service=notify_verify&partner=#{Alipay.pid}¬ify_id=#{@notify_id}", :
|
24
|
+
FakeWeb.register_uri(:get, "https://mapi.alipay.com/gateway.do?service=notify_verify&partner=#{Alipay.pid}¬ify_id=#{@notify_id}", body: "true")
|
25
25
|
assert Alipay::Wap::Notify.verify?(@sign_params)
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_verify_notify_when_false
|
29
|
-
FakeWeb.register_uri(:get, "https://mapi.alipay.com/gateway.do?service=notify_verify&partner=#{Alipay.pid}¬ify_id=#{@notify_id}", :
|
29
|
+
FakeWeb.register_uri(:get, "https://mapi.alipay.com/gateway.do?service=notify_verify&partner=#{Alipay.pid}¬ify_id=#{@notify_id}", body: "false")
|
30
30
|
assert !Alipay::Wap::Notify.verify?(@sign_params)
|
31
31
|
end
|
32
32
|
end
|
@@ -20,21 +20,20 @@ class Alipay::Wap::ServiceTest < Minitest::Test
|
|
20
20
|
FakeWeb.register_uri(
|
21
21
|
:get,
|
22
22
|
%r|https://wappaygw\.alipay\.com/service/rest\.htm.*|,
|
23
|
-
:
|
23
|
+
body: body
|
24
24
|
)
|
25
25
|
|
26
26
|
assert_equal token, Alipay::Wap::Service.trade_create_direct_token(
|
27
|
-
:
|
28
|
-
:
|
29
|
-
:
|
30
|
-
:
|
31
|
-
:
|
27
|
+
req_data: {
|
28
|
+
out_trade_no: '1',
|
29
|
+
subject: 'subject',
|
30
|
+
total_fee: '0.01',
|
31
|
+
call_back_url: 'https://example.com/call_back'
|
32
32
|
}
|
33
33
|
)
|
34
34
|
end
|
35
35
|
|
36
36
|
def test_auth_and_execute_url
|
37
|
-
|
38
|
-
assert_equal 'https://wappaygw.alipay.com/service/rest.htm?service=alipay.wap.auth.authAndExecute&req_data=%3Cauth_and_execute_req%3E%3Crequest_token%3Etoken_test%3C%2Frequest_token%3E%3C%2Fauth_and_execute_req%3E&partner=1000000000000000&format=xml&v=2.0&sec_id=MD5&sign=3efe60d4a9b7960ba599da6764c959df', Alipay::Wap::Service.auth_and_execute_url(params)
|
37
|
+
assert_equal 'https://wappaygw.alipay.com/service/rest.htm?service=alipay.wap.auth.authAndExecute&req_data=%3Cauth_and_execute_req%3E%3Crequest_token%3Etoken_test%3C%2Frequest_token%3E%3C%2Fauth_and_execute_req%3E&partner=1000000000000000&format=xml&v=2.0&sec_id=MD5&sign=3efe60d4a9b7960ba599da6764c959df', Alipay::Wap::Service.auth_and_execute_url(request_token: 'token_test')
|
39
38
|
end
|
40
39
|
end
|
@@ -3,17 +3,17 @@ require 'test_helper'
|
|
3
3
|
class Alipay::Wap::SignTest < Minitest::Test
|
4
4
|
def setup
|
5
5
|
@params = {
|
6
|
-
:
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
6
|
+
v: '1.0',
|
7
|
+
sec_id: 'MD5',
|
8
|
+
service: 'test',
|
9
|
+
notify_data: 'notify_data'
|
10
10
|
}
|
11
11
|
@sign = Digest::MD5.hexdigest("service=test&v=1.0&sec_id=MD5¬ify_data=notify_data#{Alipay.key}")
|
12
12
|
end
|
13
13
|
|
14
14
|
def test_verify_sign
|
15
15
|
assert !Alipay::Wap::Sign.verify?(@params)
|
16
|
-
assert !Alipay::Wap::Sign.verify?(@params.merge(:
|
17
|
-
assert Alipay::Wap::Sign.verify?(@params.merge(:
|
16
|
+
assert !Alipay::Wap::Sign.verify?(@params.merge(sec_id: 'unknow'))
|
17
|
+
assert Alipay::Wap::Sign.verify?(@params.merge(sign: @sign, whatever: 'x'))
|
18
18
|
end
|
19
19
|
end
|
data/test/test_helper.rb
CHANGED
@@ -5,3 +5,31 @@ require 'fakeweb'
|
|
5
5
|
Alipay.pid = '1000000000000000'
|
6
6
|
Alipay.key = '10000000000000000000000000000000'
|
7
7
|
Alipay.seller_email = 'admin@example.com'
|
8
|
+
|
9
|
+
TEST_RSA_PUBLIC_KEY = <<EOF
|
10
|
+
-----BEGIN PUBLIC KEY-----
|
11
|
+
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCjNVhJf9PYDFN1PFd4SXEvxmjD
|
12
|
+
0dn+xQ4lQu6o8HbGXz4de/RRVTJDL48qwxn81lar5cNSIjbnhDRXm9fZcrzuwbjq
|
13
|
+
xXOv2Ov7MZAa/WJEcfvp3XcSgxKPB54FLVvHo/rxuMK2xpps47Lpc7vppkvi3ofb
|
14
|
+
XW61S+aT0TWFkUMTnwIDAQAB
|
15
|
+
-----END PUBLIC KEY-----
|
16
|
+
EOF
|
17
|
+
|
18
|
+
TEST_RSA_PRIVATE_KEY = <<EOF
|
19
|
+
-----BEGIN PRIVATE KEY-----
|
20
|
+
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKM1WEl/09gMU3U8
|
21
|
+
V3hJcS/GaMPR2f7FDiVC7qjwdsZfPh179FFVMkMvjyrDGfzWVqvlw1IiNueENFeb
|
22
|
+
19lyvO7BuOrFc6/Y6/sxkBr9YkRx++nddxKDEo8HngUtW8ej+vG4wrbGmmzjsulz
|
23
|
+
u+mmS+Leh9tdbrVL5pPRNYWRQxOfAgMBAAECgYB7xOSjOJFK8m4IJi6fRfLULD8e
|
24
|
+
4XHUR1Qm5c9fxpwMbAYLDgmF9HodgV+tKi/3EgTAb4nkK5Y/lH6tQb47ZUvo/lKz
|
25
|
+
RlIVZ6Rm76V07g/+5exIZzTyvdD9T2fLeYQwKV/2JYUv0KSYWPvWykdaV4aNkCuw
|
26
|
+
mxTUjvhDxK/Ns31CIQJBANI1Y3gGBqbBIN9wxjx3ShBtt/U8YnipUJ92eTI7OU9p
|
27
|
+
ZsCIFPoeYG/X40miwDb5ouPnvJTtzuY4PkPokEefN9MCQQDGwurqa8RNK2APA62U
|
28
|
+
CdZbJuWimkdHEc53IKvD/l2tWVFqhVAy8bs+3LGzBNfuxUuAxOoQm9n0IVRaH5jn
|
29
|
+
l8GFAkEAijuTmsUTsKsGDAmkQvULHnyYYUuBUem92+9TycWKbX9Zk7ipWsWJE2N7
|
30
|
+
0tuU3VISXR7yM1mjGl/YCl4wKvk4AwJAE1DkBY4dkKZTeoIP/2AJXehkzq2Rmb2I
|
31
|
+
RBl/t9djgTI58FEuXxUQ7mYCOvSQi5rO4J/CY4TR5KDMksmZUYB1BQJAIEfVDxz4
|
32
|
+
5yoHL7L+6EoC5TWxUxFMN7z7FhObyKeaLKj3inEsbjfcPCA09zPUce0FSKBc/dVh
|
33
|
+
DEorJMaPK5vXiA==
|
34
|
+
-----END PRIVATE KEY-----
|
35
|
+
EOF
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alipay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.0
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rei
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- test/alipay/notify_test.rb
|
97
97
|
- test/alipay/service_test.rb
|
98
98
|
- test/alipay/sign/md5_test.rb
|
99
|
+
- test/alipay/sign/rsa_test.rb
|
99
100
|
- test/alipay/sign_test.rb
|
100
101
|
- test/alipay/utils_test.rb
|
101
102
|
- test/alipay/wap/notify_test.rb
|
@@ -118,9 +119,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
118
119
|
version: '0'
|
119
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
121
|
requirements:
|
121
|
-
- - "
|
122
|
+
- - ">="
|
122
123
|
- !ruby/object:Gem::Version
|
123
|
-
version:
|
124
|
+
version: '0'
|
124
125
|
requirements: []
|
125
126
|
rubyforge_project:
|
126
127
|
rubygems_version: 2.4.5
|
@@ -131,6 +132,7 @@ test_files:
|
|
131
132
|
- test/alipay/notify_test.rb
|
132
133
|
- test/alipay/service_test.rb
|
133
134
|
- test/alipay/sign/md5_test.rb
|
135
|
+
- test/alipay/sign/rsa_test.rb
|
134
136
|
- test/alipay/sign_test.rb
|
135
137
|
- test/alipay/utils_test.rb
|
136
138
|
- test/alipay/wap/notify_test.rb
|