alipay_global 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +250 -0
- data/Rakefile +9 -0
- data/alipay_global.gemspec +27 -0
- data/keys/alipay_public_key.pem +6 -0
- data/keys/test_private_key.pem +27 -0
- data/keys/test_public_key.pem +9 -0
- data/lib/alipay_global.rb +32 -0
- data/lib/alipay_global/service.rb +35 -0
- data/lib/alipay_global/service/exchange.rb +34 -0
- data/lib/alipay_global/service/notification.rb +18 -0
- data/lib/alipay_global/service/reconciliation.rb +73 -0
- data/lib/alipay_global/service/trade.rb +67 -0
- data/lib/alipay_global/sign.rb +47 -0
- data/lib/alipay_global/sign/dsa.rb +13 -0
- data/lib/alipay_global/sign/md5.rb +16 -0
- data/lib/alipay_global/sign/rsa.rb +24 -0
- data/lib/alipay_global/utils.rb +30 -0
- data/lib/alipay_global/version.rb +3 -0
- data/test/alipay_global_test.rb +31 -0
- data/test/service/exchange_test.rb +19 -0
- data/test/service/notification_test.rb +21 -0
- data/test/service/reconciliation_test.rb +83 -0
- data/test/service/trade_test.rb +70 -0
- data/test/service_test.rb +33 -0
- data/test/sign/dsa_test.rb +23 -0
- data/test/sign/md5_test.rb +31 -0
- data/test/sign/rsa_test.rb +64 -0
- data/test/sign_test.rb +32 -0
- data/test/test_config.rb +4 -0
- data/test/utils_test.rb +25 -0
- metadata +172 -0
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'test_config'
|
2
|
+
|
3
|
+
describe "AlipayGlobal::Service::Trade", "Forex trade actions" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@alipay = AlipayGlobal
|
7
|
+
@alipay.environment = 'TESTING'
|
8
|
+
@alipay.api_partner_id = '2088101122136241'
|
9
|
+
@alipay.api_secret_key = '760bdzec6y9goq7ctyx96ezkz78287de'
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#create" do
|
13
|
+
|
14
|
+
describe "Mobile friendly interface" do
|
15
|
+
it "total_fee_mobile: should create the correct mobile friendly url" do
|
16
|
+
params = {
|
17
|
+
mobile: true,
|
18
|
+
notify_url: 'https://example.com/notify',
|
19
|
+
subject: 'product_name',
|
20
|
+
out_trade_no: '12345',
|
21
|
+
total_fee: 350.45,
|
22
|
+
currency: 'USD',
|
23
|
+
supplier: 'company_name'
|
24
|
+
}
|
25
|
+
assert_equal 'https://mapi.alipay.net/gateway.do?service=create_forex_trade_wap&_input_charset=utf-8&partner=2088101122136241¬ify_url=https%3A%2F%2Fexample.com%2Fnotify&subject=product_name&out_trade_no=12345&total_fee=350.45¤cy=USD&supplier=company_name&sign_type=MD5&sign=c19f42a597963f118c4f99f2fc7f716f', @alipay::Service::Trade.create(params)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "MD5 sign" do
|
30
|
+
#RMB_FEE mode doesn't integrate with Alipay. Awaiting response from the Alipay team
|
31
|
+
it "rmb_fee: should create the correct url" do
|
32
|
+
params = {
|
33
|
+
notify_url: 'https://example.com/notify',
|
34
|
+
subject: 'product_name',
|
35
|
+
out_trade_no: '12345',
|
36
|
+
rmb_fee: 0.10,
|
37
|
+
currency: 'USD',
|
38
|
+
supplier: 'company_name'
|
39
|
+
}
|
40
|
+
assert_equal 'https://mapi.alipay.net/gateway.do?service=create_forex_trade&_input_charset=utf-8&partner=2088101122136241¬ify_url=https%3A%2F%2Fexample.com%2Fnotify&subject=product_name&out_trade_no=12345&rmb_fee=0.10¤cy=USD&supplier=company_name&sign_type=MD5&sign=4986b31c8febb978ee6d6c45f76614ac', @alipay::Service::Trade.create(params)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "total_fee: should create the correct url" do
|
44
|
+
params = {
|
45
|
+
notify_url: 'https://example.com/notify',
|
46
|
+
subject: 'product_name',
|
47
|
+
out_trade_no: '12345',
|
48
|
+
total_fee: 350.45,
|
49
|
+
currency: 'USD',
|
50
|
+
supplier: 'company_name'
|
51
|
+
}
|
52
|
+
assert_equal 'https://mapi.alipay.net/gateway.do?service=create_forex_trade&_input_charset=utf-8&partner=2088101122136241¬ify_url=https%3A%2F%2Fexample.com%2Fnotify&subject=product_name&out_trade_no=12345&total_fee=350.45¤cy=USD&supplier=company_name&sign_type=MD5&sign=2dd75a3023c0a3a795a83109966bbc7d', @alipay::Service::Trade.create(params)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "#refund" do
|
59
|
+
it "should transact refund correctly" do
|
60
|
+
sample_refunds = [
|
61
|
+
{ new_transaction_id: '111222333', old_transaction_id: '444555666', currency: 'USD', refund_sum: 200.00, refund_time: '20120330235959', refund_reason: 'bello minions' },
|
62
|
+
{ new_transaction_id: '111222333', old_transaction_id: '444555667', currency: 'USD', refund_sum: 150.00, refund_time: '20120330235959', refund_reason: 'monkey' }
|
63
|
+
]
|
64
|
+
|
65
|
+
@alipay::Service::Trade.refund(sample_refunds)
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'test_config'
|
2
|
+
|
3
|
+
describe "AlipayGlobal::Service", "basic service config" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@alipay = AlipayGlobal
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#gateway" do
|
10
|
+
|
11
|
+
describe "gateway is test environment by default" do
|
12
|
+
it "should return test environment gateway" do
|
13
|
+
assert_equal @alipay::Service.gateway_url, "https://mapi.alipay.net/gateway.do?"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "gateway is in production" do
|
18
|
+
before do
|
19
|
+
@alipay.environment = "PRODUCTION"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return production environment gateway" do
|
23
|
+
assert_equal @alipay::Service.gateway_url, "https://mapi.alipay.com/gateway.do?"
|
24
|
+
end
|
25
|
+
|
26
|
+
after do
|
27
|
+
@alipay.environment = "TEST"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'test_config'
|
2
|
+
|
3
|
+
describe "AlipayGlobal::Sign::DSA", "dsa not implemented test" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@alipay = AlipayGlobal
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "RSA#sign" do
|
10
|
+
it "should throw a NotImplementedError when DSA based sign is called" do
|
11
|
+
exception = proc{ (@alipay::Sign::DSA.sign("no_content","no_key")).call }.must_raise(NotImplementedError)
|
12
|
+
exception.message.must_include "DSA is not implemented"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "DSA#verify?" do
|
17
|
+
it "should throw a NotImplementedError when DSA based verify is called" do
|
18
|
+
exception = proc{ (@alipay::Sign::DSA.verify?("no_content","no_key")).call }.must_raise(NotImplementedError)
|
19
|
+
exception.message.must_include "DSA is not implemented"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'test_config'
|
2
|
+
|
3
|
+
describe "AlipayGlobal::Sign::MD5", "md5 signature test" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@alipay = AlipayGlobal
|
7
|
+
@alipay.api_partner_id = '2088101122136241'
|
8
|
+
@alipay.api_secret_key = '760bdzec6y9goq7ctyx96ezkz78287de'
|
9
|
+
|
10
|
+
@params = "_input_charset=gbk&out_trade_no=6741334835157966&partner=2088101568338364&payment_type=1&return_url=http://www.test.com/alipay/return_url.asp¤cy=USD&service=create_forex_trade&subject=a book&bodu=nice book&total_fee=100"
|
11
|
+
|
12
|
+
@md5_signature = "db017da14ac139afef3bb7357bb284b2"
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "MD5#sign" do
|
16
|
+
it "should generate the correct signature" do
|
17
|
+
assert_equal @md5_signature, @alipay::Sign::MD5.sign(@params, @alipay.api_secret_key)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "MD5#verify?" do
|
22
|
+
it "should return true for the correct signature match" do
|
23
|
+
@alipay::Sign::MD5.verify?(@params, @alipay.api_secret_key, @md5_signature).must_equal true
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should return false for incorrect signature match" do
|
27
|
+
@alipay::Sign::MD5.verify?(@params, @alipay.api_secret_key, "mike#{@md5_signature}").must_equal false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'test_config'
|
2
|
+
|
3
|
+
describe "AlipayGlobal::Sign::RSA", "rsa signature test" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@alipay = AlipayGlobal
|
7
|
+
|
8
|
+
@params = "_input_charset=gbk&out_trade_no=6741334835157966&partner=2088101568338364&payment_type=1&return_url=http://www.test.com/alipay/return_url.asp¤cy=USD&service=create_forex_trade&subject=a book&bodu=nice book&total_fee=100"
|
9
|
+
|
10
|
+
@rsa_signature = "i6GcANd+q8dTGY5kif3ClSqQbysmvPwf+gFowbB+ukKLKdcd4dlEUAWKlirK\nBviHoJwydMkUwavi5XvUieU6582UdqrlZgz1UlRSgL5NHSv7DWckhnYL7IKL\n2sTHb5derwrhjcJD/diYSnAMA0K+sRwVZ6Rs4fvQH3NN7sY4x0rb5W54QkPe\nCLqI+MzTggrcfqme2Grx19jOXSigETGWAm74CoI2lztlNgEjBpuqTmXHaBz1\nJ968XI9hVBj2mGnHU4EXj5hPSY/bFK2gVItOQ3w5RbTQCgjdpBYkM1LwTOlc\nu1/BlmWuUh82NGEK/qBrmne6z/W4GnG+6sqoAERA4g==\n"
|
11
|
+
|
12
|
+
@test_rsa_private_key = File.read("#{File.dirname __dir__}/../keys/test_private_key.pem")
|
13
|
+
@test_rsa_public_key = File.read("#{File.dirname __dir__}/../keys/test_public_key.pem")
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "RSA#sign" do
|
17
|
+
describe "AlipayGlobal.private_key_location is empty" do
|
18
|
+
before do
|
19
|
+
@alipay.private_key_location = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should throw an Argument Error when private_key is not supplied :: #sign(params)" do
|
23
|
+
exception = proc{ (@alipay::Sign::RSA.sign(@params)).call }.must_raise(ArgumentError)
|
24
|
+
exception.message.must_equal "Assign valid location for RSA private key location :: #AlipayGlobal.private_key_location = #{@alipay.private_key_location}"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should generate the correct signature :: #sign(params, private_key)" do
|
28
|
+
assert_equal @rsa_signature, @alipay::Sign::RSA.sign(@params, @test_rsa_private_key)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "AlipayGlobal.private_key_location is invalid" do
|
33
|
+
before do
|
34
|
+
@alipay.private_key_location = "#{File.dirname __dir__}/../keys/test_private_key.danger.pem"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should throw an Argument Error when private_key is not supplied :: #sign(params)" do
|
38
|
+
exception = proc{ (@alipay::Sign::RSA.sign(@params)).call }.must_raise(Errno::ENOENT)
|
39
|
+
exception.message.must_include "No such file or directory"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "AlipayGlobal.private_key_location is filled with a valid location" do
|
44
|
+
before do
|
45
|
+
@alipay.private_key_location = "#{File.dirname __dir__}/../keys/test_private_key.pem"
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should generate the correct signature :: #sign(params)" do
|
49
|
+
assert_equal @rsa_signature, @alipay::Sign::RSA.sign(@params)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "RSA#verify?" do
|
55
|
+
it "should return true for the correct signature match" do
|
56
|
+
@alipay::Sign::RSA.verify?(@params, @test_rsa_public_key, @rsa_signature).must_equal true
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should return false for incorrect signature match" do
|
60
|
+
@alipay::Sign::RSA.verify?(@params, @test_rsa_public_key, "mike#{@rsa_signature}").must_equal false
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
data/test/sign_test.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'test_config'
|
2
|
+
|
3
|
+
describe "Sign", "signature test" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@alipay = AlipayGlobal
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#verify?" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
@sample_notification_params = {
|
13
|
+
notify_id: '13f1e773aeb299e26eb5d02bbb71219d50',
|
14
|
+
notify_type: 'trade_status_sync',
|
15
|
+
trade_no: '4061800001000100000574688',
|
16
|
+
total_fee: 0.10,
|
17
|
+
out_trade_no: '4028608899131221',
|
18
|
+
currency: 'HKD',
|
19
|
+
notify_time: '2013-09-02 10:41:43',
|
20
|
+
trade_status: 'TRADE_FINISHED',
|
21
|
+
sign_type: 'MD5',
|
22
|
+
_input_charset: 'utf-8',
|
23
|
+
sign: 'a27572b0a6dee50d2d4a1449bfd55e92'
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should verify partner params correctly" do
|
28
|
+
assert_equal true, @alipay::Sign.verify?(@sample_notification_params)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
data/test/test_config.rb
ADDED
data/test/utils_test.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'test_config'
|
2
|
+
|
3
|
+
describe "AlipayGlobal::Utils", "service functions" do
|
4
|
+
before do
|
5
|
+
@alipay = AlipayGlobal
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "#stringify_keys" do
|
9
|
+
it "should convert all keys to string values" do
|
10
|
+
hash = { 'a' => 1, :b => 2 }
|
11
|
+
assert_equal({ 'a' => 1, 'b' => 2 }.sort, @alipay::Utils.stringify_keys(hash).sort)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#write_refund_file" do
|
16
|
+
it "should write the file correctly" do
|
17
|
+
sample_refunds = [
|
18
|
+
{ new_transaction_id: '111222333', old_transaction_id: '444555666', currency: 'USD', refund_sum: 200.00, refund_time: '20120330235959', refund_reason: 'bello minions' },
|
19
|
+
{ new_transaction_id: '111222333', old_transaction_id: '444555667', currency: 'USD', refund_sum: 150.00, refund_time: '20120330235959' }
|
20
|
+
]
|
21
|
+
|
22
|
+
assert_equal "2088101122136241|111222333|444555666|USD|200.00|20120330235959|bello minions\n2088101122136241|111222333|444555667|USD|150.00|20120330235959|", @alipay::Utils.write_refund_content(sample_refunds)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,172 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: alipay_global
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Melvrick Goh, Ng Junyang, Grzegorz Witek
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-06-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: fakeweb
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: nokogiri
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: An unofficial simple global.alipay gem
|
98
|
+
email:
|
99
|
+
- melvrickgoh@kaligo.com
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- Gemfile
|
105
|
+
- LICENSE
|
106
|
+
- README.md
|
107
|
+
- Rakefile
|
108
|
+
- alipay_global.gemspec
|
109
|
+
- keys/alipay_public_key.pem
|
110
|
+
- keys/test_private_key.pem
|
111
|
+
- keys/test_public_key.pem
|
112
|
+
- lib/alipay_global.rb
|
113
|
+
- lib/alipay_global/service.rb
|
114
|
+
- lib/alipay_global/service/exchange.rb
|
115
|
+
- lib/alipay_global/service/notification.rb
|
116
|
+
- lib/alipay_global/service/reconciliation.rb
|
117
|
+
- lib/alipay_global/service/trade.rb
|
118
|
+
- lib/alipay_global/sign.rb
|
119
|
+
- lib/alipay_global/sign/dsa.rb
|
120
|
+
- lib/alipay_global/sign/md5.rb
|
121
|
+
- lib/alipay_global/sign/rsa.rb
|
122
|
+
- lib/alipay_global/utils.rb
|
123
|
+
- lib/alipay_global/version.rb
|
124
|
+
- test/alipay_global_test.rb
|
125
|
+
- test/service/exchange_test.rb
|
126
|
+
- test/service/notification_test.rb
|
127
|
+
- test/service/reconciliation_test.rb
|
128
|
+
- test/service/trade_test.rb
|
129
|
+
- test/service_test.rb
|
130
|
+
- test/sign/dsa_test.rb
|
131
|
+
- test/sign/md5_test.rb
|
132
|
+
- test/sign/rsa_test.rb
|
133
|
+
- test/sign_test.rb
|
134
|
+
- test/test_config.rb
|
135
|
+
- test/utils_test.rb
|
136
|
+
homepage: https://github.com/Kaligo/alipay-global.git
|
137
|
+
licenses:
|
138
|
+
- MIT
|
139
|
+
metadata: {}
|
140
|
+
post_install_message:
|
141
|
+
rdoc_options: []
|
142
|
+
require_paths:
|
143
|
+
- lib
|
144
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
requirements: []
|
155
|
+
rubyforge_project:
|
156
|
+
rubygems_version: 2.4.3
|
157
|
+
signing_key:
|
158
|
+
specification_version: 4
|
159
|
+
summary: An unofficial simple global.alipay gem
|
160
|
+
test_files:
|
161
|
+
- test/alipay_global_test.rb
|
162
|
+
- test/service/exchange_test.rb
|
163
|
+
- test/service/notification_test.rb
|
164
|
+
- test/service/reconciliation_test.rb
|
165
|
+
- test/service/trade_test.rb
|
166
|
+
- test/service_test.rb
|
167
|
+
- test/sign/dsa_test.rb
|
168
|
+
- test/sign/md5_test.rb
|
169
|
+
- test/sign/rsa_test.rb
|
170
|
+
- test/sign_test.rb
|
171
|
+
- test/test_config.rb
|
172
|
+
- test/utils_test.rb
|