alipay_global 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +58 -1
- data/alipay_global.gemspec +3 -3
- data/lib/alipay_global/service/trade.rb +41 -10
- data/lib/alipay_global/version.rb +1 -1
- data/test/service/trade_test.rb +20 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eddedc835b2bfbb0f10a759faea33ab63e9afd95
|
4
|
+
data.tar.gz: 04033f489681672e64d7e653bc312683eaf21d7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8706e2ede93062f2472978a777ada9277870d729ec802d5b288428e53dfd0ba2b7bacfff76d2aca4be00a9c57879c3762f012539e6bf3d0be6f4ec261e3bebc
|
7
|
+
data.tar.gz: 44cfecd9b76dd39396e98b2ec8c165244da4023fd8e55463be7da28d491452d36b4c0b466a997f232ace4257eee59e87a763309a2fe5f9ceabe653be5d5a6917
|
data/README.md
CHANGED
@@ -103,6 +103,63 @@ AlipayGlobal::Service::Trade.create(
|
|
103
103
|
|
104
104
|
\*\*\* Attention2:The request parameters can only be accepted by the Alipay system if they are signed according to the signature mechanism specified in this document.The parameter “timeout_rule”, the default value is 12h. If you want to use this parameter to change timing, you need to contact Alipay technical. Otherwise you will have an error.
|
105
105
|
|
106
|
+
```ruby
|
107
|
+
status
|
108
|
+
```
|
109
|
+
|
110
|
+
#### Definition
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
AlipayGlobal::Service::Trade.status({ARGUMENTS})
|
114
|
+
```
|
115
|
+
|
116
|
+
#### Example
|
117
|
+
|
118
|
+
```ruby
|
119
|
+
AlipayGlobal::Service::Trade.status(
|
120
|
+
out_trade_no: "SAMPLE_TRANSACTION_ID"
|
121
|
+
)
|
122
|
+
# success => { success: true, message {
|
123
|
+
trade_no: "ALIPAYS_INTERNAL_TRADE_NO",
|
124
|
+
out_trade_no: "YOUR_TRADE_NO_USED",
|
125
|
+
subject: "SUBJECT CONTENT USED IN TRANSACTION",
|
126
|
+
trade_status: "WAIT_BUYER_PAY/TRADE_FINISHED/TRADE_CLOSED"
|
127
|
+
} }
|
128
|
+
# error => { success: false, message: "ERROR_CODE. # See below" }
|
129
|
+
#for production
|
130
|
+
```
|
131
|
+
|
132
|
+
#### ARGUMENTS
|
133
|
+
|
134
|
+
| Key | Requirement | Data Type | Description |
|
135
|
+
| --- | ----------- | --------- | ----------- |
|
136
|
+
| out_trade_no | required | string | The ID for the original transaction. |
|
137
|
+
|
138
|
+
#### RESPONSE
|
139
|
+
|
140
|
+
##### Success response
|
141
|
+
|
142
|
+
| Trade status | Description |
|
143
|
+
| ------------ | ----------- |
|
144
|
+
| WAIT_BUYER_PAY | The buyer is expected to make the payment |
|
145
|
+
| TRADE_FINISHED | The payment has been made, transaction closes. |
|
146
|
+
| TRADE_CLOSED | Transaction closed without payment. |
|
147
|
+
|
148
|
+
##### Error response
|
149
|
+
Shown when there's an issue with the payment uri created or if the transaction does not exist
|
150
|
+
|
151
|
+
| Error Code | Description |
|
152
|
+
| ---------- | ----------- |
|
153
|
+
| TRADE_NOT_EXIST | This trade number does not exist in Alipay's transaction DB |
|
154
|
+
| ILLEGAL_ARGUMENT | Illegal parameters |
|
155
|
+
| ILLEGAL_SIGN | Illegal signature |
|
156
|
+
| HASH_NO_PRIVILEGE | No sufficient rights to complete the query |
|
157
|
+
| ILLEGAL_SERVICE | Service Parameter is incorrect |
|
158
|
+
| ILLEGAL_PARTNER | Incorrect Partner ID |
|
159
|
+
| ILLEGAL_SIGN_TYPE | Signature is of wrong type. |
|
160
|
+
| ILLEGAL_CHARSET | Illegal charset |
|
161
|
+
|
162
|
+
|
106
163
|
```ruby
|
107
164
|
refund
|
108
165
|
```
|
@@ -124,7 +181,7 @@ AlipayGlobal::Service::Trade.refund(
|
|
124
181
|
gmt_return: (Time.parse("2015-03-20 12:00").getlocal("+08:00")).strftime("%Y%m%d%H%M%S"),
|
125
182
|
currency: "USD"
|
126
183
|
)
|
127
|
-
# => 'https://mapi.alipay.
|
184
|
+
# => 'https://mapi.alipay.net/gateway.do?service=forex_refund...' #for production
|
128
185
|
```
|
129
186
|
|
130
187
|
#### ARGUMENTS
|
data/alipay_global.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_development_dependency "rake"
|
23
23
|
spec.add_development_dependency "minitest"
|
24
24
|
spec.add_development_dependency "fakeweb"
|
25
|
-
spec.
|
26
|
-
spec.
|
25
|
+
spec.add_dependency "nokogiri"
|
26
|
+
spec.add_dependency "rest-client", "~> 1.8.0"
|
27
27
|
|
28
|
-
end
|
28
|
+
end
|
@@ -7,6 +7,7 @@ module AlipayGlobal
|
|
7
7
|
module Service
|
8
8
|
module Trade
|
9
9
|
BOUNDARY = "AaB03x"
|
10
|
+
CREATE_QUERY_REQUIRED_PARAMS = %w( out_trade_no )
|
10
11
|
CREATE_TRADE_REQUIRED_PARAMS = %w( notify_url subject out_trade_no currency )
|
11
12
|
CREATE_TRADE_OPTIONAL_PARAMS = %w( return_url body total_fee rmb_fee order_gmt_create order_valid_time timeout_rule auth_token supplier seller_id seller_name seller_industry )
|
12
13
|
|
@@ -27,6 +28,32 @@ module AlipayGlobal
|
|
27
28
|
AlipayGlobal::Service.request_uri(params).to_s
|
28
29
|
end
|
29
30
|
|
31
|
+
def self.status(params)
|
32
|
+
resp = Net::HTTP.get(build_query_uri(params))
|
33
|
+
|
34
|
+
alipay_results = Nokogiri::XML(resp).at_xpath('//alipay')
|
35
|
+
|
36
|
+
alipay_success = alipay_results.at_xpath('//is_success').content == "T"
|
37
|
+
|
38
|
+
status_response = process_alipay_trade_response(alipay_success,alipay_results)
|
39
|
+
|
40
|
+
{ success: alipay_success , message: status_response }
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.process_alipay_trade_response(success, alipay_xml)
|
44
|
+
if success
|
45
|
+
response_xml = alipay_xml.at_xpath('//response').at_xpath('//trade')
|
46
|
+
{
|
47
|
+
trade_no: response_xml.at_xpath('//trade_no').content,
|
48
|
+
out_trade_no: response_xml.at_xpath('//out_trade_no').content,
|
49
|
+
subject: response_xml.at_xpath('//subject').content,
|
50
|
+
trade_status: response_xml.at_xpath('//trade_status').content
|
51
|
+
}
|
52
|
+
else
|
53
|
+
alipay_xml.at_xpath('//error').content
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
30
57
|
def self.refund(params)
|
31
58
|
resp = Net::HTTP.get(build_refund_uri(params))
|
32
59
|
|
@@ -40,6 +67,7 @@ module AlipayGlobal
|
|
40
67
|
end
|
41
68
|
|
42
69
|
def self.batch_refund(refunds)
|
70
|
+
#DISABLED
|
43
71
|
file = build_refund_file(refunds)
|
44
72
|
|
45
73
|
params = {
|
@@ -49,18 +77,8 @@ module AlipayGlobal
|
|
49
77
|
|
50
78
|
uri = AlipayGlobal::Service.request_uri(params)
|
51
79
|
|
52
|
-
#p uri.to_s
|
53
|
-
|
54
80
|
form_params = { 'partner' => AlipayGlobal.api_partner_id, 'service' => 'forex_refund_file', 'refund_file' => File.read(file.path) }
|
55
81
|
|
56
|
-
#IO.read(file.path)
|
57
|
-
|
58
|
-
#p form_params
|
59
|
-
|
60
|
-
#resp = Net::HTTP.post_form(uri, form_params)
|
61
|
-
|
62
|
-
#p resp.body
|
63
|
-
|
64
82
|
resp = RestClient.post uri.to_s, :partner => AlipayGlobal.api_partner_id, :file => File.new(file.path, 'rb'), :service => 'forex_refund_file'
|
65
83
|
|
66
84
|
alipay_resp = Nokogiri::XML(resp.body)
|
@@ -72,6 +90,19 @@ module AlipayGlobal
|
|
72
90
|
file.unlink
|
73
91
|
end
|
74
92
|
|
93
|
+
def self.build_query_uri(params)
|
94
|
+
params = AlipayGlobal::Utils.stringify_keys(params)
|
95
|
+
AlipayGlobal::Service.check_required_params(params, CREATE_QUERY_REQUIRED_PARAMS)
|
96
|
+
|
97
|
+
params = {
|
98
|
+
'service' => 'single_trade_query',
|
99
|
+
'_input_charset' => 'utf-8',
|
100
|
+
'partner' => AlipayGlobal.api_partner_id
|
101
|
+
}.merge(params)
|
102
|
+
|
103
|
+
AlipayGlobal::Service.request_uri(params)
|
104
|
+
end
|
105
|
+
|
75
106
|
def self.build_refund_file(refunds)
|
76
107
|
file = Tempfile.new(['refund','.txt'])
|
77
108
|
refund_content = AlipayGlobal::Utils.write_refund_content(refunds)
|
data/test/service/trade_test.rb
CHANGED
@@ -55,6 +55,26 @@ describe "AlipayGlobal::Service::Trade", "Forex trade actions" do
|
|
55
55
|
|
56
56
|
end
|
57
57
|
|
58
|
+
describe "#status" do
|
59
|
+
it "should reject non-existent trade" do
|
60
|
+
params = {
|
61
|
+
out_trade_no: "SAMPLE_TRANSACTION_ID"
|
62
|
+
}
|
63
|
+
expected_result = { success: false, message: "TRADE_NOT_EXIST" }
|
64
|
+
|
65
|
+
assert_equal "https://mapi.alipay.net/gateway.do?service=single_trade_query&_input_charset=utf-8&partner=2088101122136241&out_trade_no=SAMPLE_TRANSACTION_ID&sign_type=MD5&sign=d4d3825356fd0799ee16829acffc1460", @alipay::Service::Trade.build_query_uri(params).to_s
|
66
|
+
assert_equal expected_result, @alipay::Service::Trade.status(params)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should reject uri with missing out_trade_no" do
|
70
|
+
params = { }
|
71
|
+
expected_result = { success: false, message: "ILLEGAL_ARGUMENT" }
|
72
|
+
|
73
|
+
assert_equal "https://mapi.alipay.net/gateway.do?service=single_trade_query&_input_charset=utf-8&partner=2088101122136241&sign_type=MD5&sign=af7007238531b0b0917f3972e24c6c64", @alipay::Service::Trade.build_query_uri(params).to_s
|
74
|
+
assert_equal expected_result, @alipay::Service::Trade.status(params)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
58
78
|
describe "#refund" do
|
59
79
|
it "should refund correctly for a valid refund url" do
|
60
80
|
params = {
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alipay_global
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Melvrick Goh, Ng Junyang, Grzegorz Witek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -73,7 +73,7 @@ dependencies:
|
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
|
-
type: :
|
76
|
+
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: 1.8.0
|
90
|
-
type: :
|
90
|
+
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|