分润结算明细

分润结算明细对象在分润结算创建后,由 Ping++ 在分润双方自动生成,具体步骤如下:

  1. 设置 API-Key
  2. SDK 验证签名设置
  3. 分润结算创建后, Ping++ 自动生成 Royalty Transaction 对象

第一步:设置 API-Key

Ping++ API 请求时需要设置 API-Key,Server SDK 提供了设置的方法。如果你直接使用 API ,需要在 header 中加入 Authorization,格式是 Authorization: Bearer API-Key。

\Pingpp\Pingpp::setApiKey('sk_test_ibbTe5jLGCi5rzfH4OqPW9KC');
Pingpp.apiKey = "sk_test_ibbTe5jLGCi5rzfH4OqPW9KC";
var pingpp = require('pingpp')('sk_test_ibbTe5jLGCi5rzfH4OqPW9KC');
pingpp.api_key = 'sk_test_ibbTe5jLGCi5rzfH4OqPW9KC'
Pingpp.api_key = "sk_test_ibbTe5jLGCi5rzfH4OqPW9KC"
pingpp.Key = "sk_test_ibbTe5jLGCi5rzfH4OqPW9KC"
Pingpp.Pingpp.SetApiKey("sk_test_ibbTe5jLGCi5rzfH4OqPW9KC");

第二步:SDK 验证签名设置

为了进一步增强交易请求的安全性,Ping++ 交易接口针对所有的 POST 和 PUT 请求已经新增 RSA 加密验签功能。如果使用该签名验证功能,你需要生成密钥,然后将私钥配置到你的代码中,公钥上传至 Ping++ 管理平台并启用验签开关。首先你需要本地生成 RSA 公钥和私钥,生成方法请参考:如何获取 RSA 公钥和私钥?

设置请求签名密钥

你需要在代码中设置请求签名的私钥(rsa_private_key.pem),可以读取配置私钥文件的路径或者直接定义变量。你如果通过 API 接口校验的话,需要生成 RSA 签名(SHA256)并在请求头中添加 Pingplusplus-Signature,如果使用 SDK 的话只需要配置私钥即可。

\Pingpp\Pingpp::setPrivateKeyPath(__DIR__ . '/your_rsa_private_key.pem');
Pingpp.privateKeyPath = "/path/to/your_rsa_private_key.pem";
pingpp.setPrivateKeyPath(__dirname + "/your_rsa_private_key.pem");
pingpp.private_key_path = 'your_rsa_private_key.pem'
Pingpp.private_key_path = File.dirname(__FILE__) + '/your_rsa_private_key.pem'
privateKey, err := ioutil.ReadFile("your_rsa_private_key.pem")
Pingpp.Pingpp.SetPrivateKeyPath(@"../../your_rsa_private_key.pem");

上传公钥至 Ping++ 管理平台

设置完代码中的私钥,你需要将已经生成的公钥(rsa_public_key.pem)填写到 Ping++ 管理平台上。 配置路径: 登录 Ping++ 管理平台->点击右上角公司名称->企业面板->开发参数->商户 RSA 公钥->将你的公钥复制粘贴进去并且保存->先启用 Test 模式进行测试->测试通过后启用 Live 模式

rsa_keys_setting

注意: 一旦上传公钥至 Ping++ 管理平台并启用 Live 模式,则验证签名功能即时生效,Ping++ 会立即验证你的真实线上交易验签请求。如果私钥为空或错误,则会交易失败,所以请确保测试模式正常后再启用 Live 开关。

第三步:分润结算创建后, Ping++ 自动生成 Royalty Transaction 对象

调用 Ping++ Server SDK 发起创建分润结算请求后,Royalty Transaction 对象由 Ping++ 自动生成,具体可参考 分润结算创建

可通过分润结算明细查询接口查询分润结算明细对象,Ping++ 收到分润结算明细查询请求后返回给你的服务器一个 Royalty Transaction 对象,下面是 Royalty Transaction 的一个示例:

{
"id": "170220181906000011",
"object": "royalty_transaction",
"amount": 4,
"status": "canceled",
"settle_account": "balance",
"source_user": "user_001",
"recipient_app": null,
"failure_msg":null,
"transfer":"tr_HqbzHCvLOaL4La1ezHfDWTqH",
"royalty_settlement": "170220181906000011"
}

分润结算明细查询

Ping++ 提供分润结算明细查询接口可以查询单个分润结算明细以及分润结算明细列表。具体可参考:分润结算明细查询接口

单个分润结算明细查询

$royalty_transactions = \Pingpp\RoyaltyTransaction::retrieve('441170318144700002');
echo $royalty_transactions;
@Test
public void testRoyaltyTransactionRetrieve() throws RateLimitException, APIException, ChannelException, InvalidRequestException, APIConnectionException, AuthenticationException {
// 查询单个 royalty_transaction 方法
// 参数: royalty_transaction id
RoyaltyTransaction obj = RoyaltyTransaction.retrieve("170302171104000011");
assertEquals("object should be royalty_transaction", "royalty_transaction", obj.getObject());
}
pingpp.royaltyTransactions.retrieve('441170612143400001', // royaltyTransactions ID
function(err, data) {
// YOUR CODE
if (err != null) {
console.log(err);
}
console.log(data);
});
royalty_transaction = pingpp.RoyaltyTransaction.retrieve(id = '440170711151500001')
print(royalty_transaction)
should "return an existed royalty_transaction object when passed a correct id"
do
o = Pingpp::RoyaltyTransaction.retrieve(existed_royalty_transaction_id)
assert o.kind_of ? (Pingpp::RoyaltySettlement)
end
func(c * RoyaltyTransactionDemo) Get()( * pingpp.RoyaltyTransaction, error) {
return royaltyTransaction.Get(c.royaltyTransactionId)
}
Console.WriteLine("**** 查询royalty_transaction 对象 ****");
Console.WriteLine(RoyaltyTransaction.Retrieve("441170321101800003"));
Console.WriteLine();

分润结算明细列表查询

$royalty_transactions_list = \Pingpp\RoyaltyTransaction::all();
echo $royalty_transactions_list;
exit;
@Test public void testRoyaltyTransactionList() throws RateLimitException, APIException, ChannelException, InvalidRequestException, APIConnectionException, AuthenticationException {
Map < String, Object > params = new HashMap < String, Object > ();
params.put("per_page", 3);
params.put("page", 1);
// 查询 royalty_transaction list 列表方法
// 参数: params
RoyaltyTransactionCollection objs = RoyaltyTransaction.list(params);
assertEquals("object should be list", "list", objs.getObject());
}
pingpp.royaltyTransactions.list({
page: 1,
per_page: 3
}, function(err, data) {
// YOUR CODE
if (err != null) {
console.log(err);
}
console.log(data);
});
params = dict(
page = 1, per_page = 15)
royalty_transaction_list = pingpp.RoyaltyTransaction.all( * * params)
print(royalty_transaction_list)
should "return a list object of royalty_transaction"
do
o = Pingpp::RoyaltyTransaction.list({: per_page = > 3,
: page = > 1
})
assert o.kind_of ? (Pingpp::ListObject)
if o.data.count > 0 assert o.data[0].kind_of ? (Pingpp::RoyaltyTransaction) end
end
func(c * RoyaltyTransactionDemo) List()( * pingpp.RoyaltyTransactionList, error) {
params: = & pingpp.PagingParams {}
params.Filters.AddFilter("page", "", "1")
params.Filters.AddFilter("per_page", "", "10")
return royaltyTransaction.List(params)
}
public static void Example() {
var listParam = new Dictionary < string,
object > {
{
"page", 1
}, {
"per_page", 10
}
};
Console.WriteLine("**** 查询royalty_transaction 列表 ****");
Console.WriteLine(RoyaltyTransaction.List(listParam));
}

注意事项

  1. C 端用户没有 Ping++ 账户,不能在 Dashboard 上查看分润结算明细。