alipay 0.12.0 → 0.13.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 +4 -0
- data/README.md +53 -1
- data/lib/alipay.rb +2 -0
- data/lib/alipay/app/service.rb +27 -0
- data/lib/alipay/app/sign.rb +39 -0
- data/lib/alipay/version.rb +1 -1
- data/test/alipay/app/service_test.rb +20 -0
- data/test/alipay/app/sign_test.rb +15 -0
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50fd317ffe0f09e6373ee108b7c639a86b26124b
|
4
|
+
data.tar.gz: 59797caf889f4329bef61678c54f554725882f79
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e268d0cab27568b13cecb7c3e9b4ad0e8598fbc06cd58b4dc2269baae4b6dd9961363a8c6ccee9ecfac204688df62d327ec409e751cc499820bddc2251f7deff
|
7
|
+
data.tar.gz: 2b7cadd3ef6b1eb7192f8c0d541538a660a14433e296c6525da160ce9dec294f5bdcaad8a86b399e407b909337bd2e549315b404fa0e231bea3240c5cf61a270
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -9,7 +9,7 @@ Alipay official document: https://b.alipay.com/order/techService.htm .
|
|
9
9
|
Add this line to your application's Gemfile:
|
10
10
|
|
11
11
|
```ruby
|
12
|
-
gem 'alipay', '~> 0.
|
12
|
+
gem 'alipay', '~> 0.13.0'
|
13
13
|
```
|
14
14
|
|
15
15
|
And then execute:
|
@@ -534,6 +534,58 @@ Alipay::Mobile::Service.mobile_securitypay_pay_string(
|
|
534
534
|
|
535
535
|
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 .
|
536
536
|
|
537
|
+
### APP支付接口
|
538
|
+
|
539
|
+
#### Name
|
540
|
+
|
541
|
+
```ruby
|
542
|
+
alipay.trade.app.pay
|
543
|
+
```
|
544
|
+
|
545
|
+
#### Definition
|
546
|
+
|
547
|
+
```ruby
|
548
|
+
Alipay::App::Service.alipay_trade_app_pay({ARGUMENTS}, {OPTIONS})
|
549
|
+
```
|
550
|
+
|
551
|
+
#### Example
|
552
|
+
|
553
|
+
```ruby
|
554
|
+
biz_content = {
|
555
|
+
'body': body, 'out_trade_no': out_trade_no, 'passback_params': passback_params,
|
556
|
+
'product_code': 'QUICK_MSECURITY_PAY', 'subject': subject, 'total_amount': total_amount
|
557
|
+
}.to_json
|
558
|
+
|
559
|
+
Alipay::App::Service.alipay_trade_app_pay(
|
560
|
+
notify_url: 'https://example.com/orders/20150401000-0001/notify',
|
561
|
+
app_id: '1234567890',
|
562
|
+
biz_content: biz_content
|
563
|
+
)
|
564
|
+
# => service="alipay.trade.app.pay"&_input_charset="utf-8"&partner=...
|
565
|
+
```
|
566
|
+
|
567
|
+
#### ARGUMENTS
|
568
|
+
|
569
|
+
| Key | Requirement | Description |
|
570
|
+
| --- | ----------- | ----------- |
|
571
|
+
| app_id | required | Application-assigned id |
|
572
|
+
| out_trade_no | required | Order number in your application. |
|
573
|
+
| notify_url | required | Alipay asyn notify url. |
|
574
|
+
| subject | required | Order subject. |
|
575
|
+
| total_amount | required | Order total price. |
|
576
|
+
| body | required | Order body, less than 512 bytes. |
|
577
|
+
| biz_content | required | A list of business parameters |
|
578
|
+
|
579
|
+
\* This service only support RSA sign_type.
|
580
|
+
|
581
|
+
This is not a complete list of arguments, please read official document: https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.vwh1xQ&treeId=193&articleId=105465&docType=1 .
|
582
|
+
|
583
|
+
#### APP支付验证通知
|
584
|
+
|
585
|
+
```ruby
|
586
|
+
Alipay::App::Sign.verify?(params)
|
587
|
+
```
|
588
|
+
|
537
589
|
## Wap::Service
|
538
590
|
|
539
591
|
### 授权接口
|
data/lib/alipay.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
module Alipay
|
2
|
+
module App
|
3
|
+
module Service
|
4
|
+
ALIPAY_TRADE_APP_PAY_REQUIRED_PARAMS = %w( app_id biz_content notify_url )
|
5
|
+
|
6
|
+
def self.alipay_trade_app_pay(params, options = {})
|
7
|
+
params = Utils.stringify_keys(params)
|
8
|
+
Alipay::Service.check_required_params(params, ALIPAY_TRADE_APP_PAY_REQUIRED_PARAMS)
|
9
|
+
key = options[:key] || Alipay.key
|
10
|
+
|
11
|
+
params = {
|
12
|
+
'method' => 'alipay.trade.app.pay',
|
13
|
+
'charset' => 'utf-8',
|
14
|
+
'version' => '1.0',
|
15
|
+
'timestamp' => Time.now.utc.strftime('%Y-%m-%d %H:%M:%S').to_s,
|
16
|
+
'sign_type' => 'RSA'
|
17
|
+
}.merge(params)
|
18
|
+
|
19
|
+
string = Alipay::App::Sign.params_to_sorted_string(params)
|
20
|
+
sign = CGI.escape(Alipay::Sign::RSA.sign(key, string))
|
21
|
+
encoded_string = Alipay::App::Sign.params_to_encoded_string(params)
|
22
|
+
|
23
|
+
%Q(#{encoded_string}&sign=#{sign})
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'erb'
|
2
|
+
|
3
|
+
module Alipay
|
4
|
+
module App
|
5
|
+
module Sign
|
6
|
+
ALIPAY_RSA_PUBLIC_KEY = <<-EOF
|
7
|
+
-----BEGIN PUBLIC KEY-----
|
8
|
+
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkr
|
9
|
+
IvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsra
|
10
|
+
prwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUr
|
11
|
+
CmZYI/FCEa3/cNMW0QIDAQAB
|
12
|
+
-----END PUBLIC KEY-----
|
13
|
+
EOF
|
14
|
+
|
15
|
+
def self.verify?(params)
|
16
|
+
params = ::Alipay::Utils.stringify_keys(params)
|
17
|
+
|
18
|
+
sign_type = params.delete('sign_type')
|
19
|
+
sign = params.delete('sign')
|
20
|
+
string = ::Alipay::Sign.params_to_string(params)
|
21
|
+
|
22
|
+
case sign_type
|
23
|
+
when 'RSA'
|
24
|
+
::Alipay::Sign::RSA.verify?(ALIPAY_RSA_PUBLIC_KEY, string, sign)
|
25
|
+
else
|
26
|
+
false
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.params_to_sorted_string(params)
|
31
|
+
params.sort.map { |key, value| %Q(#{key}=#{value.to_s}) }.join('&')
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.params_to_encoded_string(params)
|
35
|
+
params.sort.map { |key, value| %Q(#{key}=#{ERB::Util.url_encode(value.to_s)}) }.join('&')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/alipay/version.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Alipay::Mobile::ServiceTest < Minitest::Test
|
4
|
+
def test_mobile_securitypay_pay_string
|
5
|
+
assert_equal %q(app_id=2015052600090779&biz_content=%7B%3Atimeout_express%3D%3E%2230m%22%2C%20%3Aseller_id%3D%3E%22%22%2C%20%3Aproduct_code%3D%3E%22QUICK_MSECURITY_PAY%22%2C%20%3Atotal_amount%3D%3E%220.01%22%2C%20%3Asubject%3D%3E%221%22%2C%20%3Abody%3D%3E%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%20%3Aout_trade_no%3D%3E%22IQJZSRC1YMQB5HU%22%7D&charset=utf-8&format=json&method=alipay.trade.app.pay¬ify_url=http%3A%2F%2Fdomain.merchant.com%2Fpayment_notify&sign_type=RSA×tamp=2016-08-25%2020%3A26%3A31&version=1.0&sign=lT%2BwWRpKYDP4QLm8Ore6ngGQv8aHGPw1OuI2e8pRf5aWO55sTAYqN01uJyKDe3Swzat8UYdvby8o9haA3LPQibYXB2sezkZxOBHpfdKVRjXe0u9qTMlACAQUQLQeXQFNfcWRgKUGNLMHARv7ajqz8tCnDN2B3mlAmKs0r4qb6IM%3D), Alipay::App::Service.alipay_trade_app_pay({
|
6
|
+
app_id: '2015052600090779',
|
7
|
+
biz_content: {:timeout_express=>"30m",:seller_id=>"",:product_code=>"QUICK_MSECURITY_PAY",:total_amount=>"0.01",:subject=>"1",:body=>"我是测试数据",:out_trade_no=>"IQJZSRC1YMQB5HU"},
|
8
|
+
charset: 'utf-8',
|
9
|
+
format: 'json',
|
10
|
+
method: 'alipay.trade.app.pay',
|
11
|
+
notify_url: 'http://domain.merchant.com/payment_notify',
|
12
|
+
sign_type: 'RSA',
|
13
|
+
timestamp: '2016-08-25 20:26:31',
|
14
|
+
version: '1.0'
|
15
|
+
}, {
|
16
|
+
sign_type: 'RSA',
|
17
|
+
key: TEST_RSA_PRIVATE_KEY
|
18
|
+
})
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Alipay::App::SignTest < Minitest::Test
|
4
|
+
def test_params_to_sorted_string
|
5
|
+
assert_equal %q(a=2&b=1), Alipay::App::Sign.params_to_sorted_string(b: 1, a: 2)
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_params_to_encoded_string
|
9
|
+
assert_equal %q(biz_content=%7B%3Aname%3D%3E%22%E9%A1%BA%E9%81%93%22%7D&out_trade_no=MEM1234567&total_amount=0.01), Alipay::App::Sign.params_to_encoded_string(
|
10
|
+
biz_content: {:name=>'顺道'},
|
11
|
+
out_trade_no: 'MEM1234567',
|
12
|
+
total_amount: '0.01'
|
13
|
+
)
|
14
|
+
end
|
15
|
+
end
|
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.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rei
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -82,6 +82,8 @@ files:
|
|
82
82
|
- Rakefile
|
83
83
|
- alipay.gemspec
|
84
84
|
- lib/alipay.rb
|
85
|
+
- lib/alipay/app/service.rb
|
86
|
+
- lib/alipay/app/sign.rb
|
85
87
|
- lib/alipay/mobile/service.rb
|
86
88
|
- lib/alipay/mobile/sign.rb
|
87
89
|
- lib/alipay/notify.rb
|
@@ -95,6 +97,8 @@ files:
|
|
95
97
|
- lib/alipay/wap/notify.rb
|
96
98
|
- lib/alipay/wap/service.rb
|
97
99
|
- lib/alipay/wap/sign.rb
|
100
|
+
- test/alipay/app/service_test.rb
|
101
|
+
- test/alipay/app/sign_test.rb
|
98
102
|
- test/alipay/mobile/service_test.rb
|
99
103
|
- test/alipay/mobile/sign_test.rb
|
100
104
|
- test/alipay/notify_test.rb
|
@@ -128,11 +132,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
132
|
version: '0'
|
129
133
|
requirements: []
|
130
134
|
rubyforge_project:
|
131
|
-
rubygems_version: 2.5.
|
135
|
+
rubygems_version: 2.5.2
|
132
136
|
signing_key:
|
133
137
|
specification_version: 4
|
134
138
|
summary: An unofficial simple alipay gem
|
135
139
|
test_files:
|
140
|
+
- test/alipay/app/service_test.rb
|
141
|
+
- test/alipay/app/sign_test.rb
|
136
142
|
- test/alipay/mobile/service_test.rb
|
137
143
|
- test/alipay/mobile/sign_test.rb
|
138
144
|
- test/alipay/notify_test.rb
|