alipay 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +17 -1
- data/lib/alipay/service.rb +25 -0
- data/lib/alipay/utils.rb +7 -0
- data/lib/alipay/version.rb +1 -1
- data/test/alipay/service_test.rb +14 -0
- data/test/alipay/utils_test.rb +4 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d60076cf2356166bd875f3a1fa236752fb52dfe
|
4
|
+
data.tar.gz: 4516e869df857e7615bf7942b87d50523323c1c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f5a78cf5dea50ff39cadb14ee4e2d905623659c8b6cc37a82a3373b99cb09757bafa541234c54b5c5105eb4beed24ad9a319e3bfff6e175abe385e3748d418b
|
7
|
+
data.tar.gz: 9d9789a9e2e074108ccec8a0eefc82cec93efa8425e90abba1ecfd4f2b3c55a6f8aaf0babf27abd2db9bc97594ee885c7a9c68c69181b06a1ce253dfbbc8a5ec
|
data/README.md
CHANGED
@@ -15,7 +15,7 @@ Please read alipay official document first: https://b.alipay.com/order/techServi
|
|
15
15
|
Add this line to your application's Gemfile:
|
16
16
|
|
17
17
|
```ruby
|
18
|
-
gem 'alipay', '~> 0.0.
|
18
|
+
gem 'alipay', '~> 0.0.3'
|
19
19
|
```
|
20
20
|
|
21
21
|
or development version
|
@@ -81,6 +81,22 @@ Alipay::Service.send_goods_confirm_by_platform(options)
|
|
81
81
|
# => '<!xml version="1.0" encoding="utf-8"?><alipay><is_success>T</is_success></alipay>'
|
82
82
|
```
|
83
83
|
|
84
|
+
### Refund
|
85
|
+
|
86
|
+
```ruby
|
87
|
+
batch_no = Alipay::Utils.generate_batch_no # refund batch no, you SHOULD store it to db to avoid alipay duplicate refund
|
88
|
+
options = {
|
89
|
+
batch_no: batch_no,
|
90
|
+
data: [{:trade_no => 'TRADE_NO', :amount => '10.0', :reason => 'REFUND_REASON'}],
|
91
|
+
notify_url: 'YOUR_ORDER_NOTIFY_URL' # https://writings.io/orders/20130801000001/alipay_refund_notify
|
92
|
+
}
|
93
|
+
|
94
|
+
Alipay::Service.create_refund_url(options)
|
95
|
+
```
|
96
|
+
|
97
|
+
Batch No. Generate Demo: http://git.io/GcXKJw
|
98
|
+
Notify Url Demo: http://git.io/pst4Tw
|
99
|
+
|
84
100
|
### Verify notify
|
85
101
|
|
86
102
|
```ruby
|
data/lib/alipay/service.rb
CHANGED
@@ -57,6 +57,31 @@ module Alipay
|
|
57
57
|
"#{GATEWAY_URL}?#{query_string(options)}"
|
58
58
|
end
|
59
59
|
|
60
|
+
CREATE_REFUND_URL_REQUIRED_OPTIONS = %w( batch_no data notify_url )
|
61
|
+
# 支付宝即时到帐批量退款有密接口(此为异步接口,有密指通过此接口打开 url 后需要用户输入支付宝的支付密码进行退款)
|
62
|
+
def self.create_refund_url(options)
|
63
|
+
options = Utils.stringify_keys(options)
|
64
|
+
check_required_options(options, CREATE_REFUND_URL_REQUIRED_OPTIONS)
|
65
|
+
|
66
|
+
data = options.delete('data')
|
67
|
+
detail_data = data.map do|item|
|
68
|
+
item = Utils.stringify_keys(item)
|
69
|
+
"#{item['trade_no']}^#{item['amount']}^#{item['reason']}"
|
70
|
+
end.join('#')
|
71
|
+
|
72
|
+
options = {
|
73
|
+
'service' => 'refund_fastpay_by_platform_pwd', # 接口名称
|
74
|
+
'_input_charset' => 'utf-8',
|
75
|
+
'partner' => Alipay.pid,
|
76
|
+
'seller_email' => Alipay.seller_email,
|
77
|
+
'refund_date' => Time.now.strftime('%Y-%m-%d %H:%M:%S'), # 申请退款时间
|
78
|
+
'batch_num' => data.size, # 总笔数
|
79
|
+
'detail_data' => detail_data # 转换后的单笔数据集字符串
|
80
|
+
}.merge(options)
|
81
|
+
|
82
|
+
"#{GATEWAY_URL}?#{query_string(options)}"
|
83
|
+
end
|
84
|
+
|
60
85
|
SEND_GOODS_CONFIRM_BY_PLATFORM_REQUIRED_OPTIONS = %w( service partner _input_charset trade_no logistics_name )
|
61
86
|
def self.send_goods_confirm_by_platform(options)
|
62
87
|
options = {
|
data/lib/alipay/utils.rb
CHANGED
@@ -7,5 +7,12 @@ module Alipay
|
|
7
7
|
end
|
8
8
|
new_hash
|
9
9
|
end
|
10
|
+
|
11
|
+
# 退款批次号,支付宝通过此批次号来防止重复退款操作,所以此号生成后最好直接保存至数据库,不要在显示页面的时候生成
|
12
|
+
# 共 24 位(8 位当前日期 + 9 位纳秒 + 1 位随机数)
|
13
|
+
def self.generate_batch_no
|
14
|
+
time = Time.now
|
15
|
+
time.strftime('%Y%m%d%H%M%S') + time.nsec.to_s + Random.new.rand(1..9).to_s
|
16
|
+
end
|
10
17
|
end
|
11
18
|
end
|
data/lib/alipay/version.rb
CHANGED
data/test/alipay/service_test.rb
CHANGED
@@ -37,6 +37,20 @@ class Alipay::ServiceTest < Test::Unit::TestCase
|
|
37
37
|
assert_not_nil Alipay::Service.create_direct_pay_by_user_url(options)
|
38
38
|
end
|
39
39
|
|
40
|
+
def test_generate_create_refund_url
|
41
|
+
data = [{
|
42
|
+
:trade_no => '1',
|
43
|
+
:amount => '0.01',
|
44
|
+
:reason => 'test'
|
45
|
+
}]
|
46
|
+
options = {
|
47
|
+
:batch_no => '123456789',
|
48
|
+
:data => data,
|
49
|
+
:notify_url => '/some_url'
|
50
|
+
}
|
51
|
+
assert_not_nil Alipay::Service.create_refund_url(options)
|
52
|
+
end
|
53
|
+
|
40
54
|
|
41
55
|
def test_should_send_goods_confirm_by_platform
|
42
56
|
body = <<-EOF
|
data/test/alipay/utils_test.rb
CHANGED
@@ -5,4 +5,8 @@ class Alipay::UtilsTest < Test::Unit::TestCase
|
|
5
5
|
hash = { 'a' => 1, :b => 2 }
|
6
6
|
assert_equal({ 'a' => 1, 'b' => 2 }.sort, Alipay::Utils.stringify_keys(hash).sort)
|
7
7
|
end
|
8
|
+
|
9
|
+
def test_generate_batch_no
|
10
|
+
assert_equal(24, Alipay::Utils.generate_batch_no.size)
|
11
|
+
end
|
8
12
|
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.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rei
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|