pingpp 2.1.3 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/data/ca-certificates.crt +199 -280
- data/lib/pingpp/api_operations/delete.rb +9 -4
- data/lib/pingpp/app_based_resource.rb +27 -0
- data/lib/pingpp/balance_bonus.rb +14 -0
- data/lib/pingpp/balance_transaction.rb +9 -0
- data/lib/pingpp/balance_transfer.rb +10 -0
- data/lib/pingpp/batch_withdrawal.rb +11 -0
- data/lib/pingpp/channel.rb +8 -0
- data/lib/pingpp/coupon.rb +9 -0
- data/lib/pingpp/coupon_template.rb +29 -0
- data/lib/pingpp/order.rb +69 -0
- data/lib/pingpp/recharge.rb +36 -0
- data/lib/pingpp/royalty.rb +14 -0
- data/lib/pingpp/royalty_settlement.rb +11 -0
- data/lib/pingpp/royalty_template.rb +12 -0
- data/lib/pingpp/royalty_transaction.rb +9 -0
- data/lib/pingpp/settle_account.rb +12 -0
- data/lib/pingpp/singleton_app_based_resource.rb +26 -0
- data/lib/pingpp/sub_app.rb +12 -0
- data/lib/pingpp/sub_app_based_resource.rb +35 -0
- data/lib/pingpp/user.rb +9 -0
- data/lib/pingpp/user_based_resource.rb +35 -0
- data/lib/pingpp/util.rb +19 -1
- data/lib/pingpp/version.rb +1 -1
- data/lib/pingpp/withdrawal.rb +15 -0
- data/lib/pingpp.rb +37 -4
- data/test/balance_bonus_test.rb +51 -0
- data/test/balance_transaction_test.rb +19 -0
- data/test/balance_transfer_test.rb +55 -0
- data/test/batch_refund_test.rb +41 -0
- data/test/batch_transfer_test.rb +61 -0
- data/test/batch_withdrawal_test.rb +76 -0
- data/test/charge_test.rb +51 -0
- data/test/coupon_template_test.rb +68 -0
- data/test/coupon_test.rb +81 -0
- data/test/customs_test_bak.rb +31 -0
- data/test/order_test.rb +181 -0
- data/test/recharge_test.rb +106 -0
- data/test/refund_test.rb +32 -0
- data/test/royalty_settlement_test.rb +68 -0
- data/test/royalty_template_test.rb +102 -0
- data/test/royalty_test.rb +43 -0
- data/test/royalty_transaction_test.rb +24 -0
- data/test/settle_account_test.rb +41 -0
- data/test/sub_app_channel_test.rb +70 -0
- data/test/sub_app_test.rb +60 -0
- data/test/test_assistant.rb +35 -0
- data/test/test_data.rb +191 -0
- data/test/user_test.rb +42 -0
- data/test/withdrawal_test.rb +121 -0
- metadata +72 -7
- data/test/charge_reverse_test.rb +0 -84
- data/test/settle_account_tes.rb +0 -53
@@ -0,0 +1,106 @@
|
|
1
|
+
require File.expand_path('../test_assistant', __FILE__)
|
2
|
+
require "digest/md5"
|
3
|
+
|
4
|
+
module Pingpp
|
5
|
+
class RechargeTest < Test::Unit::TestCase
|
6
|
+
# 创建一笔充值 (recharge)
|
7
|
+
should "execute should return a new, fully executed recharge when passed correct parameters" do
|
8
|
+
order_no = Digest::MD5.hexdigest(Time.now.to_i.to_s)[0,12]
|
9
|
+
|
10
|
+
params = {
|
11
|
+
:user => get_user_id,
|
12
|
+
:charge => {
|
13
|
+
:order_no => order_no,
|
14
|
+
:channel => "alipay", # 支付渠道
|
15
|
+
:client_ip => "127.0.0.1", # 发起支付请求客户端的 IP 地址,格式为 IPV4,如: 127.0.0.1
|
16
|
+
:amount => 100, # 订单总金额, 人民币单位:分(如订单总金额为 1 元,此处请填 100)
|
17
|
+
:body => "Your Body",
|
18
|
+
:subject => "You Subject",
|
19
|
+
:extra => {} # 根据渠道填入参数 https://www.pingxx.com/api#支付渠道-extra-参数说明
|
20
|
+
},
|
21
|
+
:description => "充值描述"
|
22
|
+
}
|
23
|
+
|
24
|
+
o = Pingpp::Recharge.create(
|
25
|
+
params,
|
26
|
+
{ :app => get_app_id } # App 信息
|
27
|
+
)
|
28
|
+
|
29
|
+
assert o.charge.order_no == params[:charge][:order_no]
|
30
|
+
assert o.app == get_app_id
|
31
|
+
assert o.object == "recharge"
|
32
|
+
assert o.kind_of?(Pingpp::Recharge)
|
33
|
+
assert o.charge.kind_of?(Pingpp::Charge)
|
34
|
+
end
|
35
|
+
|
36
|
+
# 查询一笔充值 (recharge)
|
37
|
+
should "return an existed recharge when passed correct id" do
|
38
|
+
o = Pingpp::Recharge.retrieve(
|
39
|
+
existed_recharge_id,
|
40
|
+
{ :app => get_app_id } # App 信息
|
41
|
+
)
|
42
|
+
|
43
|
+
assert o.app == get_app_id
|
44
|
+
assert o.object == "recharge"
|
45
|
+
assert o.kind_of?(Pingpp::Recharge)
|
46
|
+
end
|
47
|
+
|
48
|
+
# 查询充值列表
|
49
|
+
should "return a list object of recharge" do
|
50
|
+
o = Pingpp::Recharge.list(
|
51
|
+
{ :per_page => 3, :page => 1 },
|
52
|
+
{ :app => get_app_id } # App 信息
|
53
|
+
)
|
54
|
+
|
55
|
+
assert o.kind_of?(Pingpp::ListObject)
|
56
|
+
assert o.data[0].kind_of?(Pingpp::Recharge)
|
57
|
+
end
|
58
|
+
|
59
|
+
# 查询 recharge 的退款列表
|
60
|
+
should "should return a refund list object of recharge" do
|
61
|
+
recharge_id, _ = existed_refund_id_of_recharge
|
62
|
+
o = Pingpp::Recharge.list_refunds(
|
63
|
+
recharge_id, # Recharge 对象 ID
|
64
|
+
{ :per_page => 3, :page => 1 }, # 过滤参数,分页参数
|
65
|
+
{ :app => get_app_id } # App 信息
|
66
|
+
)
|
67
|
+
|
68
|
+
assert o.kind_of?(Pingpp::ListObject)
|
69
|
+
assert o.data[0].kind_of?(Pingpp::Refund)
|
70
|
+
end
|
71
|
+
|
72
|
+
# 发起 recharge 的退款
|
73
|
+
should "return a new refund object of recharge" do
|
74
|
+
begin
|
75
|
+
o = Pingpp::Recharge.refund(
|
76
|
+
recharge_to_refund, # Recharge 对象 ID
|
77
|
+
{
|
78
|
+
# required.
|
79
|
+
:description => '退款信息',
|
80
|
+
},
|
81
|
+
{ :app => get_app_id } # App 信息
|
82
|
+
)
|
83
|
+
|
84
|
+
assert o.object == 'refund'
|
85
|
+
assert o.kind_of?(Pingpp::Refund)
|
86
|
+
rescue => e
|
87
|
+
assert e.kind_of?(Pingpp::InvalidRequestError) || e.kind_of?(Pingpp::ChannelError)
|
88
|
+
assert e.message.include?("可退金额为 0") || e.message.include?("refundable amount is 0")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# 查询 recharge 的退款
|
93
|
+
should "should return a refund object of recharge" do
|
94
|
+
recharge_id, refund_id = existed_refund_id_of_recharge
|
95
|
+
o = Pingpp::Recharge.retrieve_refund(
|
96
|
+
recharge_id, # Recharge 对象 ID
|
97
|
+
refund_id, # Refund 对象 ID
|
98
|
+
{ :app => get_app_id } # App 信息
|
99
|
+
)
|
100
|
+
|
101
|
+
assert o.object == 'refund'
|
102
|
+
assert o.id == refund_id
|
103
|
+
assert o.kind_of?(Pingpp::Refund)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
data/test/refund_test.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.expand_path('../test_assistant', __FILE__)
|
2
|
+
|
3
|
+
module Pingpp
|
4
|
+
class RefundTest < Test::Unit::TestCase
|
5
|
+
should "execute should return a refund list when passed correct parameters" do
|
6
|
+
l = Pingpp::Refund.list(get_charge_id, {:limit => 3})
|
7
|
+
|
8
|
+
assert l.object == 'list'
|
9
|
+
assert l.data.count <= 3
|
10
|
+
end
|
11
|
+
|
12
|
+
should "execute should return a refund when passed correct parameters" do
|
13
|
+
ch_id = get_charge_id
|
14
|
+
|
15
|
+
r = Pingpp::Refund.create(ch_id, {:amount => 1, :description => 'Refund amount test.'})
|
16
|
+
|
17
|
+
assert r.object == 'refund'
|
18
|
+
assert r.charge == ch_id
|
19
|
+
end
|
20
|
+
|
21
|
+
should "execute should return an exist refund when passed correct charge id and refund id" do
|
22
|
+
re_id = get_refund_id
|
23
|
+
ch_id = get_charge_id
|
24
|
+
|
25
|
+
r = Pingpp::Refund.retrieve(ch_id, re_id)
|
26
|
+
|
27
|
+
assert r.object == 'refund'
|
28
|
+
assert r.id == re_id
|
29
|
+
assert r.charge == ch_id
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require File.expand_path('../test_assistant', __FILE__)
|
2
|
+
|
3
|
+
module Pingpp
|
4
|
+
class RoyaltySettlementTest < Test::Unit::TestCase
|
5
|
+
# 创建分润结算
|
6
|
+
should "return a royalty_settlement object when passed correct params" do
|
7
|
+
params = {
|
8
|
+
# 分润发起方所在的 App ID required|string
|
9
|
+
:payer_app => get_payer_app,
|
10
|
+
|
11
|
+
# 分润的方式 required|string,null; 余额 balance 或渠道名称 [alipay, wx_pub, unionpay, ...]
|
12
|
+
:method => "alipay",
|
13
|
+
|
14
|
+
# 分润创建时间 optional|hash
|
15
|
+
:created => {
|
16
|
+
:gte => 1504875000,
|
17
|
+
:lt => 1504885000
|
18
|
+
},
|
19
|
+
}
|
20
|
+
|
21
|
+
begin
|
22
|
+
o = Pingpp::RoyaltySettlement.create(params)
|
23
|
+
|
24
|
+
assert o.kind_of?(Pingpp::RoyaltySettlement)
|
25
|
+
rescue => e
|
26
|
+
assert e.kind_of?(Pingpp::InvalidRequestError)
|
27
|
+
assert e.message.include?("无有效")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# 查询分润结算对象
|
32
|
+
should "return an existed royalty_settlement object when passed a correct id" do
|
33
|
+
o = Pingpp::RoyaltySettlement.retrieve(existed_royalty_settlement_id)
|
34
|
+
|
35
|
+
assert o.kind_of?(Pingpp::RoyaltySettlement)
|
36
|
+
end
|
37
|
+
|
38
|
+
# 更新/取消分润结算对象
|
39
|
+
should "return an updated royalty_settlement object when passed a correct id" do
|
40
|
+
begin
|
41
|
+
o = Pingpp::RoyaltySettlement.update(
|
42
|
+
existed_royalty_settlement_id,
|
43
|
+
{
|
44
|
+
# 更新状态 required|string; canceled: 取消结算, pending: 确认结算
|
45
|
+
:status => 'canceled'
|
46
|
+
}
|
47
|
+
)
|
48
|
+
|
49
|
+
assert o.kind_of?(Pingpp::RoyaltySettlement)
|
50
|
+
rescue => e
|
51
|
+
assert e.kind_of?(Pingpp::InvalidRequestError) || e.kind_of?(Pingpp::ChannelError)
|
52
|
+
assert e.message.include?("状态错误")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# 查询分润结算对象列表
|
57
|
+
should "return a list object of royalty_settlement" do
|
58
|
+
o = Pingpp::RoyaltySettlement.list(
|
59
|
+
{ :per_page => 3, :page => 1, :payer_app => get_payer_app }
|
60
|
+
)
|
61
|
+
|
62
|
+
assert o.kind_of?(Pingpp::ListObject)
|
63
|
+
if o.data.count > 0
|
64
|
+
assert o.data[0].kind_of?(Pingpp::RoyaltySettlement)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require File.expand_path('../test_assistant', __FILE__)
|
2
|
+
|
3
|
+
module Pingpp
|
4
|
+
class RoyaltyTemplateTest < Test::Unit::TestCase
|
5
|
+
# 创建分润模版
|
6
|
+
should "return a royalty_template object when passed correct parameters" do
|
7
|
+
params = {
|
8
|
+
# App ID required|string
|
9
|
+
:app => get_app_id,
|
10
|
+
|
11
|
+
# 描述信息 optional|string
|
12
|
+
:description => "TEMPLATE DESCRIPTION",
|
13
|
+
|
14
|
+
# 模版名称 optional|string
|
15
|
+
# :name => "TEMPLATE_NAME",
|
16
|
+
|
17
|
+
# 分润规则 required|hash
|
18
|
+
:rule => {
|
19
|
+
# 分润模式 required|string; rate: 按订单金额(包含优惠券金额)的比例, fixed: 固定金额
|
20
|
+
:royalty_mode => "rate",
|
21
|
+
|
22
|
+
# 分配模式 required|string; 指当订单确定的层级如果少于模板配置层级时,
|
23
|
+
# 模板中多余的分润金额是归属于收款方 `receipt_reserved` 还是服务方 `service_reserved`。
|
24
|
+
:allocation_mode => "receipt_reserved",
|
25
|
+
|
26
|
+
# 退分润模式 required|string; no_refund: 退款时不退分润, proportional: 按比例退分润, full_refund: 一旦退款分润全退
|
27
|
+
:refund_mode => "no_refund",
|
28
|
+
|
29
|
+
# 分润数据列表 required|array
|
30
|
+
:data => [
|
31
|
+
{
|
32
|
+
:level => 0,
|
33
|
+
:value => 10
|
34
|
+
},
|
35
|
+
{
|
36
|
+
:level => 1,
|
37
|
+
:value => 20
|
38
|
+
}
|
39
|
+
],
|
40
|
+
},
|
41
|
+
}
|
42
|
+
|
43
|
+
o = Pingpp::RoyaltyTemplate.create(params)
|
44
|
+
|
45
|
+
assert o.kind_of?(Pingpp::RoyaltyTemplate)
|
46
|
+
end
|
47
|
+
|
48
|
+
# 查询分润模版
|
49
|
+
should "return an existed royalty_template object when passed a correct id" do
|
50
|
+
o = Pingpp::RoyaltyTemplate.retrieve(existed_royalty_template_id)
|
51
|
+
|
52
|
+
assert o.kind_of?(Pingpp::RoyaltyTemplate)
|
53
|
+
end
|
54
|
+
|
55
|
+
# 查询分润模版列表
|
56
|
+
should "return a list object of royalty_template" do
|
57
|
+
o = Pingpp::RoyaltyTemplate.list(
|
58
|
+
{ :per_page => 3, :page => 1 }
|
59
|
+
)
|
60
|
+
|
61
|
+
assert o.kind_of?(Pingpp::ListObject)
|
62
|
+
assert o.data[0].kind_of?(Pingpp::RoyaltyTemplate)
|
63
|
+
end
|
64
|
+
|
65
|
+
# 更新分润模版
|
66
|
+
should "return a updated royalty_template" do
|
67
|
+
params = {
|
68
|
+
:description => "New description #{Time.now.to_i.to_s}",
|
69
|
+
:rule => {
|
70
|
+
:royalty_mode => "rate",
|
71
|
+
:allocation_mode => "receipt_reserved",
|
72
|
+
:refund_mode => "no_refund",
|
73
|
+
:data => [
|
74
|
+
{ :level => 0, :value => 20 },
|
75
|
+
{ :level => 1, :value => 30 }
|
76
|
+
],
|
77
|
+
},
|
78
|
+
}
|
79
|
+
o = Pingpp::RoyaltyTemplate.update(
|
80
|
+
existed_royalty_template_id,
|
81
|
+
params
|
82
|
+
)
|
83
|
+
|
84
|
+
assert o.kind_of?(Pingpp::RoyaltyTemplate)
|
85
|
+
assert o.description == params[:description]
|
86
|
+
assert o.rule.data[0].value == params[:rule][:data][0][:value]
|
87
|
+
end
|
88
|
+
|
89
|
+
# 删除分润模版
|
90
|
+
should "return deleted object with royalty template id" do
|
91
|
+
begin
|
92
|
+
o = Pingpp::RoyaltyTemplate.delete(royalty_template_id_to_delete)
|
93
|
+
|
94
|
+
assert o.id == royalty_template_id_to_delete
|
95
|
+
assert o.deleted
|
96
|
+
rescue => e
|
97
|
+
assert e.kind_of?(Pingpp::InvalidRequestError)
|
98
|
+
assert e.message.include?("找不到分润模板对象")
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.expand_path('../test_assistant', __FILE__)
|
2
|
+
|
3
|
+
module Pingpp
|
4
|
+
class RoyaltyTest < Test::Unit::TestCase
|
5
|
+
# 批量更新分润对象
|
6
|
+
should "return a royalty list object when passed correct ids" do
|
7
|
+
params = {
|
8
|
+
# 分润 ID 列表 required|array
|
9
|
+
:ids => get_royalty_ids_to_update,
|
10
|
+
|
11
|
+
# 描述信息 optional|string
|
12
|
+
:description => "DESCRIPTION",
|
13
|
+
|
14
|
+
# optional|string
|
15
|
+
# :method => "manual",
|
16
|
+
}
|
17
|
+
|
18
|
+
o = Pingpp::Royalty.batch_update(params)
|
19
|
+
|
20
|
+
assert o.kind_of?(Pingpp::ListObject)
|
21
|
+
assert o.data[0].kind_of?(Pingpp::Royalty)
|
22
|
+
end
|
23
|
+
|
24
|
+
# 查询分润对象
|
25
|
+
should "return an existed royalty object when passed a correct id" do
|
26
|
+
o = Pingpp::Royalty.retrieve(existed_royalty_id)
|
27
|
+
|
28
|
+
assert o.kind_of?(Pingpp::Royalty)
|
29
|
+
end
|
30
|
+
|
31
|
+
# 查询分润对象列表
|
32
|
+
should "return a list object of royalties" do
|
33
|
+
o = Pingpp::Royalty.list(
|
34
|
+
{ :per_page => 3, :page => 1 }
|
35
|
+
)
|
36
|
+
|
37
|
+
assert o.kind_of?(Pingpp::ListObject)
|
38
|
+
if o.data.count > 0
|
39
|
+
assert o.data[0].kind_of?(Pingpp::Royalty)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path('../test_assistant', __FILE__)
|
2
|
+
|
3
|
+
module Pingpp
|
4
|
+
class RoyaltyTransactionTest < Test::Unit::TestCase
|
5
|
+
# 查询分润结算明细
|
6
|
+
should "return an existed royalty_transaction object when passed a correct id" do
|
7
|
+
o = Pingpp::RoyaltyTransaction.retrieve(existed_royalty_transaction_id)
|
8
|
+
|
9
|
+
assert o.kind_of?(Pingpp::RoyaltyTransaction)
|
10
|
+
end
|
11
|
+
|
12
|
+
# 查询分润结算明细列表
|
13
|
+
should "return a list object of royalty_transaction" do
|
14
|
+
o = Pingpp::RoyaltyTransaction.list(
|
15
|
+
{ :per_page => 3, :page => 1 }
|
16
|
+
)
|
17
|
+
|
18
|
+
assert o.kind_of?(Pingpp::ListObject)
|
19
|
+
if o.data.count > 0
|
20
|
+
assert o.data[0].kind_of?(Pingpp::RoyaltyTransaction)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.expand_path('../test_assistant', __FILE__)
|
2
|
+
require "digest/md5"
|
3
|
+
|
4
|
+
module Pingpp
|
5
|
+
class SettleAccountTest < Test::Unit::TestCase
|
6
|
+
should "settle_account create" do
|
7
|
+
params = {
|
8
|
+
:channel => 'wx_pub',
|
9
|
+
:recipient => {
|
10
|
+
:account => 'oazpsj-ejmwkkskuggaj2h2kaz8ah'
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
u = Pingpp::SettleAccount.create(params, {:user => get_user_id})
|
15
|
+
|
16
|
+
assert u.object == 'settle_account'
|
17
|
+
assert u.channel == params[:channel]
|
18
|
+
end
|
19
|
+
|
20
|
+
should "settle_account retrieve" do
|
21
|
+
u = Pingpp::SettleAccount.retrieve('320217041815593200000501', {:user => get_user_id})
|
22
|
+
|
23
|
+
assert u.object == 'settle_account'
|
24
|
+
assert u.id == '320217041815593200000501'
|
25
|
+
end
|
26
|
+
|
27
|
+
should "settle_account list" do
|
28
|
+
l = Pingpp::SettleAccount.list({:per_page => 3}, {:user => get_user_id})
|
29
|
+
|
30
|
+
assert l.object == 'list'
|
31
|
+
assert l.data.count <= 3
|
32
|
+
end
|
33
|
+
|
34
|
+
should "settle_account delete" do
|
35
|
+
d = Pingpp::SettleAccount.delete('320217080118072300000201', {}, {:user => get_user_id})
|
36
|
+
|
37
|
+
assert d.deleted
|
38
|
+
assert d.id == '320217080118072300000201'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require File.expand_path('../test_assistant', __FILE__)
|
2
|
+
|
3
|
+
module Pingpp
|
4
|
+
class SubAppChannelTest < Test::Unit::TestCase
|
5
|
+
# 创建子商户渠道参数 (仅支持 livemode)
|
6
|
+
should "sub_app channel create" do
|
7
|
+
params = {
|
8
|
+
:channel => "bfb",
|
9
|
+
:params => {
|
10
|
+
"fee_rate" => 60,
|
11
|
+
"bfb_sp" => "1600330402",
|
12
|
+
"bfb_key" => "c832cGsdBdErycpTxs3KMQ3cQkawZvzC"
|
13
|
+
},
|
14
|
+
:description => "channel info"
|
15
|
+
}
|
16
|
+
|
17
|
+
channel_info = Pingpp::Channel.create(params, {:sub_app => get_sub_app_id})
|
18
|
+
|
19
|
+
assert channel_info.object == 'channel'
|
20
|
+
assert channel_info.description == params[:description]
|
21
|
+
assert channel_info.params['fee_rate'] == params[:params]["fee_date"]
|
22
|
+
assert channel_info.params['bfb_sp'] == params[:params]["bfb_sp"]
|
23
|
+
assert channel_info.params['bfb_key'] == params[:params]["bfb_key"]
|
24
|
+
end
|
25
|
+
|
26
|
+
# 查询子商户渠道参数 (仅支持 livemode)
|
27
|
+
should "sub_app channel retrieve" do
|
28
|
+
channel_info = Pingpp::Channel.retrieve(
|
29
|
+
"bfb",
|
30
|
+
{
|
31
|
+
:sub_app => get_sub_app_id
|
32
|
+
}
|
33
|
+
)
|
34
|
+
|
35
|
+
assert channel_info.object == 'channel'
|
36
|
+
end
|
37
|
+
|
38
|
+
# 更新子商户渠道参数 (仅支持 livemode)
|
39
|
+
should "sub_app channel update" do
|
40
|
+
new_description = 'Shanghai ' + Time.now.iso8601
|
41
|
+
channel_info = Pingpp::Channel.update(
|
42
|
+
"bfb",
|
43
|
+
{
|
44
|
+
:description => new_description,
|
45
|
+
:params => {
|
46
|
+
"fee_rate" => 60,
|
47
|
+
"bfb_sp" => "1600330404",
|
48
|
+
"bfb_key" => "c832cGscpTxs3KMQ3cQkdBdEryawZvzC"
|
49
|
+
}
|
50
|
+
},
|
51
|
+
{ :sub_app => get_sub_app_id }
|
52
|
+
)
|
53
|
+
|
54
|
+
assert channel_info.object == 'channel'
|
55
|
+
assert channel_info.description == new_description
|
56
|
+
end
|
57
|
+
|
58
|
+
# 删除子商户渠道参数 (仅支持 livemode)
|
59
|
+
should "sub_app channel delete" do
|
60
|
+
channel_info = Pingpp::Channel.delete(
|
61
|
+
"bfb",
|
62
|
+
{}
|
63
|
+
{ :sub_app => get_sub_app_id }
|
64
|
+
)
|
65
|
+
|
66
|
+
assert o.deleted
|
67
|
+
assert o.channel == "bfb"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require File.expand_path('../test_assistant', __FILE__)
|
2
|
+
require "digest/md5"
|
3
|
+
|
4
|
+
module Pingpp
|
5
|
+
class SubAppTest < Test::Unit::TestCase
|
6
|
+
# 创建子商户 sub_app
|
7
|
+
should "sub_app create" do
|
8
|
+
user_id = Digest::MD5.hexdigest(Time.now.to_i.to_s)[0,12]
|
9
|
+
display_name = 'sub_app_' + user_id
|
10
|
+
|
11
|
+
params = {
|
12
|
+
:display_name => display_name,
|
13
|
+
:user => user_id
|
14
|
+
}
|
15
|
+
|
16
|
+
sub_app = Pingpp::SubApp.create(params)
|
17
|
+
|
18
|
+
assert sub_app.kind_of?(Pingpp::SubApp)
|
19
|
+
assert sub_app.object == 'sub_app'
|
20
|
+
assert sub_app.user == user_id
|
21
|
+
assert sub_app.display_name == display_name
|
22
|
+
end
|
23
|
+
|
24
|
+
# 查询 sub_app
|
25
|
+
should "sub_app retrieve" do
|
26
|
+
sub_app = Pingpp::SubApp.retrieve(get_sub_app_id)
|
27
|
+
|
28
|
+
assert sub_app.object == 'sub_app'
|
29
|
+
assert sub_app.id == get_sub_app_id
|
30
|
+
end
|
31
|
+
|
32
|
+
# 查询 sub_app 列表
|
33
|
+
should "sub_app list" do
|
34
|
+
l = Pingpp::SubApp.list(:per_page => 3)
|
35
|
+
|
36
|
+
assert l.object == 'list'
|
37
|
+
assert l.data.count <= 3
|
38
|
+
assert l.data[0].kind_of?(Pingpp::SubApp)
|
39
|
+
end
|
40
|
+
|
41
|
+
# 更新 sub_app
|
42
|
+
should "sub_app update" do
|
43
|
+
new_description = 'Shanghai ' + Time.now.iso8601
|
44
|
+
sub_app = Pingpp::SubApp.update(get_sub_app_id, {:description => new_description})
|
45
|
+
|
46
|
+
assert sub_app.kind_of?(Pingpp::SubApp)
|
47
|
+
assert sub_app.object == 'sub_app'
|
48
|
+
assert sub_app.id == get_sub_app_id
|
49
|
+
assert sub_app.description == new_description
|
50
|
+
end
|
51
|
+
|
52
|
+
# 删除 sub_app
|
53
|
+
should "sub_app delete" do
|
54
|
+
sub_app = Pingpp::SubApp.delete(sub_app_id_to_delete)
|
55
|
+
|
56
|
+
assert sub_app.deleted
|
57
|
+
assert sub_app.id == sub_app_id_to_delete
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'pingpp'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'mocha/setup'
|
4
|
+
require 'stringio'
|
5
|
+
require 'shoulda/context'
|
6
|
+
require File.expand_path('../test_data', __FILE__)
|
7
|
+
|
8
|
+
module Pingpp
|
9
|
+
@mock_rest_client = nil
|
10
|
+
|
11
|
+
def self.mock_rest_client=(mock_client)
|
12
|
+
@mock_rest_client = mock_client
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Test::Unit::TestCase
|
17
|
+
include Pingpp::TestData
|
18
|
+
include Mocha
|
19
|
+
|
20
|
+
setup do
|
21
|
+
@mock = mock
|
22
|
+
Pingpp.mock_rest_client = @mock
|
23
|
+
Pingpp.api_key = get_api_key
|
24
|
+
|
25
|
+
Pingpp.private_key_path = File.expand_path('../../example/your_rsa_private_key.pem', __FILE__)
|
26
|
+
|
27
|
+
# 使用账户系统部分接口需要设置该参数,调用相关方法时可传 opts[:app] 参数来覆盖该值
|
28
|
+
Pingpp.app_id = get_app_id
|
29
|
+
end
|
30
|
+
|
31
|
+
teardown do
|
32
|
+
Pingpp.mock_rest_client = nil
|
33
|
+
Pingpp.api_key = nil
|
34
|
+
end
|
35
|
+
end
|