pingpp 2.1.3 → 2.2.0
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 +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
|