订单创建及支付

接入 Ping++ 订单接口,服务器端需要做的是向 Ping++ 请求创建及支付 Order 对象,然后返回给客户端,并且监听和获取 Webhooks 通知。具体步骤如下:

  1. 设置 API-Key
  2. SDK 验证签名设置
  3. 从服务端发起创建请求,获取 Order 对象
  4. 从服务端发起支付请求,获取 Order 对象
  5. 将获得的 Order 传给 Client
  6. 接收 Webhooks 通知
  7. 验证 Webhooks 签名

第一步:设置 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 开关。

第三步:从服务端发起创建请求,获取 Order 对象

调用 Ping++ Server SDK 发起创建请求,请求所需参数具体可参考 API 文档

$order_no = substr(md5(time()), 0, 10);
$or = \Pingpp\Order::create(
array(
"amount" => 100,
"app" => APP_ID,
"merchant_order_no" => "201609{$order_no}",
"subject" => "subj{$order_no}",
"currency" => "cny",
"body" => "body{$order_no}",
"uid" => "test_user_0001",
"client_ip" => "192.168.0.101",
'receipt_app' => APP_ID, // 收款方应用
'service_app' => APP_ID, // 服务方应用
'royalty_users' => [ //分润的用户列表
[
'user' => 'user_test_0001',
'amount' => 10,
],
[
'user' => 'user_test_0002',
'amount' => 10,
],
],
)
);
Map<String, Object> params = new HashMap<String, Object>();
params.put("uid", "test_user_001"); // 用户在当前 app 下的 User ID, 可选
params.put("app", PingppAccountTestData.getAppID()); // App ID, 必传
params.put("merchant_order_no", "2017" + System.currentTimeMillis()); // 商户订单号, 必传
params.put("subject", "ORDER_SUBJECT"); // 商品的标题, 必传
params.put("body", "ORDER_BODY"); // 商品的描述信息, 必传
params.put("amount", 100); // 订单总金额,单位:分, 必传
params.put("currency", "cny"); // 仅支持人民币 cny, 必传
params.put("client_ip", "192.168.1.125"); // 客户端的 IP 地址 (IPv4 格式,要求商户上传真实的,渠道可能会判断), 必传
Order obj = Order.create(params); // 创建 Order 对象 方法
pingpp.orders.create({
merchant_order_no: new Date().getTime().toString(),
// 推荐使用 8-20 位,要求数字或字母,不允许其他字符
app: APP_ID,
// APP ID
uid: "123",
// 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
amount: 100,
//订单总金额, 人民币单位:分(如订单总金额为 1 元,此处请填 100)
client_ip: "127.0.0.1",
// 发起支付请求客户端的 IP 地址,格式为 IPV4,如: 127.0.0.1
currency: "cny",
// 仅支持人民币 cny
subject: "Your Subject",
body: "Your Body"
}, function(err, order) {
if (err != null) {
console.log("pingpp.orders.create fail:", err)
}
// YOUR CODE
});
order_info = {
"app": app_id,
"uid": "user_test_01", # 可选参数
"merchant_order_no": str(int(random.uniform(100000000, 200000000))),
"coupon": "300116082415452100000700",
"amount": 30,
"client_ip": "127.0.0.1",
"currency": "cny",
"subject": "test1",
"body": "test1body1",
"description": "test1-description",
"time_expire": int(time.time()) + 1000,
"metadata": {},
"receipt_app": app_id, # 收款方应用
"service_app": app_id, # 服务方应用
"royalty_users": [ # 分润的用户列表,默认为 [],不分润
{
"user": "test_user_002",
"amount": 1
},
{
"user": "test_uer_003",
"amount": 1
}
]
}
order = pingpp.Order.create(**order_info)
order_no = Digest::MD5.hexdigest(Time.now.to_i.to_s)[0,12]
params = {
:merchant_order_no => order_no,
:app => get_app_id,
:amount => 100, # 订单总金额, 人民币单位:分(如订单总金额为 1 元,此处请填 100)
:client_ip => "127.0.0.1", # 发起支付请求客户端的 IP 地址,格式为 IPV4,如: 127.0.0.1
:currency => "cny",
:subject => "Your Subject",
:body => "Your Body",
:uid => get_user_id,
# 分润信息 optional|hash; 指定用户的形式
:royalty_users => [
{ :user => 'user_007', :amount => 30 },
{ :user => 'test_user_001', :amount => 20 },
],
# 分润模版 optional|string; 该参数与 royalty_users 同时传时,会忽略 royalty_template
# :royalty_template => existed_royalty_template_id,
}
o = Pingpp::Order.create(params)
func (c *OrderDemo) New() (*pingpp.Order, error) {
//针对metadata字段,可以在每一个 order 对象中加入订单的一些详情,如颜色、型号等属性
metadata := make(map[string]interface{})
metadata["color"] = "red"
//metadata["type"] = "shoes"
//metadata["size"] = "40"
//这里是随便设置的随机数作为订单号,仅作示例,该方法可能产生相同订单号,商户请自行生成,不要纠结该方法。
r := rand.New(rand.NewSource(time.Now().UnixNano()))
orderno := r.Intn(999999999999999)
params := &pingpp.OrderCreateParams{
App: "app_1Gqj58ynP0mHeX1q",
Uid: "1477895856250",
Merchant_order_no: strconv.Itoa(orderno),
Amount: 1,
Currency: "cny",
Client_ip: "127.0.0.1",
Subject: "Go SDK Subject",
Body: "Go SDK Body",
Description: "Go SDK Description",
RoyaltyUsers: []pingpp.RoyaltyUser{
pingpp.RoyaltyUser{
User: "user_test_0001",
Amount: 10,
},
pingpp.RoyaltyUser{
User: "user_test_0002",
Amount: 10,
},
},
//Coupon:"coupon_id"//优惠券Id
//Actual_amount:900 //使用优惠券后订单实际金额
Metadata: metadata,
}
return order.New(params)
}
var orParams = new Dictionary<string, object>
{
{"app", appId},
{"uid", "test_user_001"}, //uid为可选参数
{"merchant_order_no", new Random().Next(1, 999999999).ToString()},
{"amount", 10},
{"currency", "cny"},
{"client_ip", "127.0.0.1"},
{"subject", "Your Subject"},
{"body", "Your Body"},
{"description", "Your description"},
{"coupon", "300317040115550700088888"},
{"receipt_app", appId}, //收款方应用
{"service_app", appId}, //服务方应用
{"royalty_users", new List<Dictionary<string,object>>{ //分润的用户列表,默认为 [],不分润
new Dictionary<string,object>{
{"user", "user_001"},
{"amount",1}
},
new Dictionary<string,object>{
{"user", "user_002"},
{"amount",1}
}
}}
};
var or = Order.Create(orParams);

Ping++ 收到创建订单请求后返回给你的服务器一个 Order 对象,下面是 Order 对象的一个示例:

{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": false,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": null,
"metadata": {},
"charge_essentials": {},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": []
}
}

第四步:从服务端发起支付请求,获取 Order 对象

调用 Ping++ Server SDK 发起支付请求,请求所需参数具体可参考 API 文档,不同的渠道只需要切换 channel 以及对应的 extra 参数即可。

alipay
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'alipay',
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "alipay");
params.put("charge_amount", 100);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'alipay'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'alipay'
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'alipay'
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "alipay" },
{"charge_order_no", "20170808100000001"}
}
);
alipay_wap
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'alipay_wap',
'extra' => [
//success_url 和 cancel_url 在本地测试不要写 localhost ,写 127.0.0.1,URL 后面不要加自定义参数
'success_url' => 'http://example.com/success',
'cancel_url' => 'http://example.com/cancel']
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "alipay_wap");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据各个渠道传入相应的参数
extra.put("success_url", "http://www.pingxx.com");
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'alipay_wap'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'alipay_wap',
"extra": {
"success_url"='http://example.com/success',
"cancel_url"='http://example.com/cancel'}
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'alipay_wap',
:extra => {
:success_url => "http://example.com/success",
:cancel_url => "http://example.com/cancel"}
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "alipay_wap" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"success_url", "http://example.com/success"},
{"cancel_url":"http://example.com/cancel"}
}
}
}
);
alipay_lite
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'alipay_lite',
'extra' => [
//success_url 和 cancel_url 在本地测试不要写 localhost ,写 127.0.0.1,URL 后面不要加自定义参数
'buyer_user_id' => '208870267336****']
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "alipay_lite");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("buyer_user_id", "208870267336****");
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'alipay_lite'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'alipay_lite',
"extra": {
"buyer_user_id"='208870267336****'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'alipay_lite',
:extra => {
: buyer_user_id => "208870267336****"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "alipay_lite" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"buyer_user_id", "208870267336****"}
}}
}
);
alipay_pc_direct
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'alipay_pc_direct',
'extra' => [
//success_url 和 cancel_url 在本地测试不要写 localhost ,写 127.0.0.1,URL 后面不要加自定义参数
'success_url' => 'http://example.com/success']
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "alipay_pc_direct");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("success_url", "http://www.pingxx.com");
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'alipay_pc_direct'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'alipay_pc_direct',
"extra": {
"success_url"='http://example.com/success'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'alipay_pc_direct',
:extra => {
:success_url => "http://example.com/success"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "alipay_pc_direct" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"success_url", "http://example.com/success"}
}}
}
);
bfb_wap
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'bfb_wap',
'extra' => [
'result_url' => 'http://example.com/success'],
'bfb_login' => 'false']
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "bfb_wap");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("result_url", "http://www.pingxx.com");
extra.put("bfb_login", "false");
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'bfb_wap'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'bfb_wap',
"extra": {
"result_url"='http://example.com/success',
"bfb_login"='false'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'bfb_wap',
:extra => {
:result_url => "http://example.com/success",
: bfb_login => "false"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "bfb_wap" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"result_url", "http://example.com/success"},
{"bfb_login", "false"}
}}
}
);
upacp
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'upacp',
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "upacp");
params.put("charge_amount", 100);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'upacp'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'upacp'
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'upacp'
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "upacp" },
{"charge_order_no", "20170808100000001"}
}
);
upacp_wap
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'upacp_wap',
'extra' => [
'result_url' => 'http://example.com/success']
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "upacp_wap");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("result_url", "http://www.pingxx.com");
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'upacp_wap'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'upacp_wap',
"extra": {
"result_url"='http://example.com/success'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'upacp_wap',
:extra => {
:result_url => "http://example.com/success"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "upacp_wap" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"result_url", "http://example.com/success"}
}}
}
);
upacp_qr
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'upacp_qr',
'extra' => [
'result_url' => 'http://example.com/success']
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "upacp_qr");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("result_url", "http://www.pingxx.com");
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'upacp_qr'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'upacp_qr',
"extra": {
"result_url"='http://example.com/success'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'upacp_qr',
:extra => {
:result_url => "http://example.com/success"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "upacp_qr" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"result_url", "http://example.com/success"}
}}
}
);
upacp_pc
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'upacp_pc',
'extra' => [
'result_url' => 'http://example.com/success']
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "upacp_pc");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("result_url", "http://www.pingxx.com");
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'upacp_pc'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'upacp_pc',
"extra": {
"result_url"='http://example.com/success'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'upacp_pc',
:extra => {
:result_url => "http://example.com/success"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "upacp_pc" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"result_url", "http://example.com/success"}
}}
}
);
cp_b2b
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'cp_b2b',
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "cp_b2b");
params.put("charge_amount", 100);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'cp_b2b'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'cp_b2b'
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'cp_b2b'
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "cp_b2b" },
{"charge_order_no", "20170808100000001"}
}
);
upacp_b2b
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'upacp_b2b',
'extra' => [
'result_url' => 'http://example.com/success']
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "upacp_b2b");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("result_url", "http://www.pingxx.com");
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'upacp_b2b'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'upacp_b2b',
"extra": {
"result_url"='http://example.com/success'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'upacp_b2b',
:extra => {
:result_url => "http://example.com/success"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "upacp_b2b" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"result_url", "http://example.com/success"}
}}
}
);
wx
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'wx',
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "wx");
params.put("charge_amount", 100);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'wx'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'wx'
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'wx'
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "wx" },
{"charge_order_no", "20170808100000001"}
}
);
wx_pub
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'wx_pub',
'extra' => [
'open_id' => 'User OpenId']
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "wx_pub");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("open_id", "User OpenId");
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'wx_pub'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'wx_pub',
"extra": {
"open_id"='User OpenId'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'wx_pub',
:extra => {
:open_id => "User OpenId"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "wx_pub" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"open_id", "User OpenId"}
}}
}
);
wx_wap
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'wx_wap',
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "wx_wap");
params.put("charge_amount", 100);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'wx_wap'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'wx_wap'
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'wx_wap'
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "wx_wap" },
{"charge_order_no", "20170808100000001"}
}
);
wx_lite
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'wx_lite',
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "wx_lite");
params.put("charge_amount", 100);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'wx_lite'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'wx_lite'
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'wx_lite'
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "wx_lite" },
{"charge_order_no", "20170808100000001"}
}
);
yeepay_wap
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'yeepay_wap',
'extra' => [
'product_category' => '1',
'identity_id'=> 'Your identity_id',
'identity_type' => 1,
'terminal_type' => 1,
'terminal_id'=>'Your terminal_id',
'user_ua'=>'Your user_ua',
'result_url'=>'http://example.com/result']
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "yeepay_wap");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("product_category", "1");
extra.put("identity_id", "Your identity_id");
extra.put("identity_type", 1);
extra.put("terminal_type", 1);
extra.put("terminal_id", "Your terminal_id");
extra.put("user_ua", "Your user_ua");
extra.put("result_url", "http://example.com/result");
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'yeepay_wap'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'yeepay_wap',
"extra": {
"product_category"='1',
"identity_id"='Your identity_id',
"identity_type"=1,
"terminal_type"=1,
"terminal_id"='Your terminal_id',
"user_ua"='Your user_ua',
"result_url"='http://example.com/result'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'yeepay_wap',
:extra => {
:product_category => "1",
:identity_id => "Your identity_id",
:identity_type => 1,
:terminal_type => 1,
:terminal_id => "Your terminal_id",
:user_ua => "Your user_ua",
:result_url => "http://example.com/result"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "yeepay_wap" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"product_category", 1},
{"identity_id", "Your identity_id"},
{"identity_type" , 1},
{"terminal_type" , 1},
{"terminal_id","Your terminal_id"},
{"user_ua","Your user_ua"},
{"result_url", "http://example.com/success"}
}}
}
);
jdpay_wap
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'jdpay_wap',
'extra' => [
'success_url' => 'http://example.com/success',
'fail_url'=> 'http://example.com/fail',
'token' => 'Your Token',
'is_mobile' => false,
'order_type' => '1']
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "jdpay_wap");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("success_url", "http://example.com/success");
extra.put("fail_url", "http://example.com/fail");
extra.put("token", "Your Token");
extra.put("is_mobile",false);
extra.put("order_type", "1");
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'jdpay_wap'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'jdpay_wap',
"extra": {
"success_url"='http://example.com/success',
"fail_url"='http://example.com/fail',
"token"='Your Token',
"is_mobile"=false,
"order_type"='1'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'jdpay_wap',
:extra => {
:success_url => "http://example.com/success",
:fail_url => "http://example.com/fail",
:token => "Your Token"
:is_mobile => false,
:order_type => "1"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "jdpay_wap" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"success_url", "http://example.com/success"},
{"fail_url": "http://example.com/fail"},
{"token": "Your Token"},
{"is_mobile": false},
{"order_type":"1"}
}}
}
);
applepay_upacp
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'applepay_upacp',
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "applepay_upacp");
params.put("charge_amount", 100);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'applepay_upacp'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'applepay_upacp'
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'applepay_upacp'
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "applepay_upacp" },
{"charge_order_no", "20170808100000001"}
}
);
cmb_wallet
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'cmb_wallet',
'extra' => [
'result_url' => 'https://example.com/result',
'p_no'=> '2016062901',
'seq'=>'2016062901',
'm_uid'=>'2016062901',
'mobile'=>'18512343456']
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "cmb_wallet");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("result_url", "https://example.com/result");
extra.put("p_no", "2016062901");
extra.put("seq", "2016062901");
extra.put("m_uid", "2016062901");
extra.put("mobile", "18512343456");
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'cmb_wallet'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'cmb_wallet',
"extra": {
"result_url"='https://example.com/result',
"p_no"='2016062901',
"seq"="2016062901",
"m_uid"="2016062901",
"mobile"="18512343456"
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'cmb_wallet',
:extra => {
:result_url => "https://example.com/result",
:p_no => "2016062901",
:seq => "2016062901",
:m_uid => "2016062901",
:mobile => "18512343456"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "cmb_wallet" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"result_url", "https://example.com/result"},
{"p_no": "2016062901"},
{"seq": "2016062901"},
{"m_uid": "2016062901"},
{"mobile": "18512343456"}
}}
}
);
cmb_pc_qr
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'cmb_pc_qr',
'extra' => [
'result_url' => 'https://example.com/result',
'p_no'=> '2016062901',
'seq'=>'2016062901',
'm_uid'=>'2016062901',
'mobile'=>'18512343456']
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "cmb_pc_qr");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("result_url", "https://example.com/result");
extra.put("p_no", "2016062901");
extra.put("seq", "2016062901");
extra.put("m_uid", "2016062901");
extra.put("mobile", "18512343456");
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'cmb_pc_qr'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'cmb_pc_qr',
"extra": {
"result_url"='https://example.com/result',
"p_no"='2016062901',
"seq"="2016062901",
"m_uid"="2016062901",
"mobile"="18512343456"
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'cmb_pc_qr',
:extra => {
:result_url => "https://example.com/result",
:p_no => "2016062901",
:seq => "2016062901",
:m_uid => "2016062901",
:mobile => "18512343456"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "cmb_pc_qr" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"result_url", "https://example.com/result"},
{"p_no": "2016062901"},
{"seq": "2016062901"},
{"m_uid": "2016062901"},
{"mobile": "18512343456"}
}}
}
);
qpay
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'qpay',
'extra' => [
'device' => 'ios']
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "qpay");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("device", "ios");
params put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'qpay'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'qpay',
"extra": {
"device" ='ios'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'qpay',
:extra => {
: qpay => "ios"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "qpay" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"device", "ios"}
}}
}
);
qpay_pub
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'qpay_pub',
'extra' => [
'attach' => 'Ping++ 分店',
'limit_pay' => 'no_balance',
'promotion_tag' => 'evel_tag=xxx&sale_tag=xxx',
'device_info' => '13467007045764'
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "qpay_pub");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("attach", "Ping++ 分店");
extra.put("limit_pay", "no_balance");
extra.put("promotion_tag", "level_tag=xxx&sale_tag=xxx");
extra.put("device_info", "13467007045764");
params put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'qpay_pub'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'qpay_pub',
"extra": {
attach ='Ping++ 分店',
limit_pay ='no_balance',
promotion_tag ='level_tag=xxx&sale_tag=xxx',
device_info ='13467007045764'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'qpay_pub',
:extra => {
: attach => "Ping++ 分店",
: limit_pay => "no_balance",
: promotion_tag => "level_tag=xxx&sale_tag=xxx",
: device_info => "13467007045764"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "qpay_pub" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"attach", "Ping++ 分店"},
{"limit_pay", "no_balance"},
{"promotion_tag", "level_tag=xxx&sale_tag=xxx"},
{"device_info", "13467007045764"}
}}
}
);
isv_wap
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'isv_wap',
'extra' => [
'pay_channel' => 'alipay',
'terminal_id' => 'T0000001',
'result_url' => 'https://www.example.com/payment-result'
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "isv_wap");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("pay_channel", "alipay");
extra.put("result_url", "https://www.example.com/payment-result");
extra.put("terminal_id", "T0000001");
params put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'isv_wap'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'isv_wap',
"extra": {
pay_channel ='alipay',
result_url ='https://www.example.com/payment-result',
terminal_id ='T0000001'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'isv_wap',
:extra => {
: pay_channel => "alipay",
: result_url => "https://www.example.com/payment-result",
: terminal_id => "T0000001"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "isv_wap" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"pay_channel", "alipay"},
{"result_url", "https://www.example.com/payment-result"},
{"terminal_id", "T0000001"}
}}
}
);
isv_qr
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'isv_qr',
'extra' => [
'pay_channel' => 'wx',
'terminal_id' => 'T0000001'
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "isv_qr");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("pay_channel", "wx");
extra.put("terminal_id", "T0000001");
params put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'isv_qr'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'isv_qr',
"extra": {
pay_channel ='wx',
terminal_id ='T0000001'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'isv_qr',
:extra => {
: pay_channel => "wx",
: terminal_id => "T0000001"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "isv_qr" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"pay_channel", "wx"},
{"terminal_id", "T0000001"}
}}
}
);
isv_scan
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'isv_scan',
'extra' => [
'scan_code' => '131141564583769183',
'terminal_id' => 'T0000001'
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "isv_scan");
params.put("charge_amount", 100);
Map<String, Object> extra = new HashMap<>(); // extra: 根据不同渠道传入相应的参数
extra.put("scan_code", "131141564583769183");
extra.put("terminal_id", "T0000001");
params put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'isv_scan'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'isv_scan',
"extra": {
scan_code ='131141564583769183',
terminal_id ='T0000001'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'isv_scan',
:extra => {
: scan_code => "131141564583769183",
: terminal_id => "T0000001"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "isv_scan" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"scan_code", "131141564583769183"},
{"terminal_id", "T0000001"}
}}
}
);
alipay_qr
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'alipay_qr',
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "alipay_qr");
params.put("charge_amount", 100);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'alipay_qr'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'alipay_qr'
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'alipay_qr'
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "alipay_qr" },
{"charge_order_no", "20170808100000001"}
}
);
wx_pub_qr
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'wx_pub_qr',
'extra' => array('product_id' => 'Your ProductId')
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "wx_pub_qr");
params.put("charge_amount", 100);
Map<String, String> extra = new HashMap<String, String>();
extra.put("product_id", "Your ProductId");
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'wx_pub_qr'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'wx_pub_qr',
"extra": {
"product_id" ='Your ProductId'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'wx_pub_qr',
:extra => {
:product_id => "Your ProductId"
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "wx_pub_qr" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"product_id", "Your ProductId"}
}}
}
);
ccb_pay
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'ccb_pay',
'extra' => array(
'pos_id' => '025547632',
'remark' => 'test')
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "ccb_pay");
params.put("charge_amount", 100);
Map<String, String> extra = new HashMap<String, String>();
extra.put("pos_id", "025547632");
extra.put("remark", "test",);
chargeParams.put("extra", extra);
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'ccb_pay'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'ccb_pay',
"extra": {
pos_id ='025547632', remark ='test'
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'ccb_pay',
:extra => {
: pos_id => '025547632',
: remark => 'test'
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "ccb_pay" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"pos_id", "025547632"},
{"remark": "test"}
}}
}
);
ccb_qr
// 商品订单支付
$order_id = '2011708070000007521';
$params = [
'charge_order_no' => substr(md5(time()), 0, 10),
'charge_amount' => 100,
'channel' => 'ccb_qr',
'extra' => array(
'pos_id' => '025547632',
'remark' => 'test',
'return_type' => 1)
];
try {
$pay = \Pingpp\Order::pay($order_id, $params);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
Map<String, Object> params = new HashMap<>();
params.put("channel", "ccb_qr");
params.put("charge_amount", 100);
Map<String, String> extra = new HashMap<String, String>();
extra.put("pos_id", "025547632");
extra.put("remark", "test",);
extra.put("return_type", 1,);
chargeParams.put("extra", extra);
params.put("extra", extra);
Order order = Order.pay("2001708220000281981", params);
var charge_extra = require('../charge_extra');
var channel = 'ccb_qr'; // 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
var extra = charge_extra(channel);
pingpp.orders.pay(
"2001709010000002851",
{
"channel": channel, // 支付渠道
"charge_amount": 100, // 使用 charge 支付金额
"extra": extra
},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.pay fail:",err)
}
// YOUR CODE
}
);
pay_params = {
"charge_amount": 30,
"channel": 'ccb_qr',
"extra": {
pos_id ='025547632', remark ='test',return_type = 1
}
}
order_pay = pingpp.Order.pay(order.id, **pay_params)
o = Pingpp::Order.pay(
order_to_pay,
{
:charge_amount => 1000,
:channel => 'ccb_qr',
:extra => {
: pos_id => '025547632',
: remark => 'test',
: return_type => 1
}
}
)
func (c *OrderDemo) Pay() (*pingpp.Order, error) {
var chargeAmount int64 = 1
orderPayParams := &pingpp.OrderPayParams{
Charge_amount: &chargeAmount,
Channel: c.demoChannel,
Extra: common.ChargeExtra[c.demoChannel],
}
return order.Pay(c.demoOrderID, orderPayParams)
}
Order.Pay(or.Id, new Dictionary<string, object> {
{ "charge_amount",10},
{ "channel", "ccb_qr" },
{"charge_order_no", "20170808100000001"},
{"extra", new Dictionary<string,object>{
{"pos_id", "025547632"},
{"remark": "test"},
{"return_type":1}
}}
}
);

Ping++ 收到订单支付请求后返回给你的服务器一个带有渠道信息的 Order 对象,下面是 Order 对象的一个示例:

alipay
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "alipay",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"alipay": {
"orderInfo": "service=\"mobile.securitypay.pay\"&_input_charset=\"utf-8\"&notify_url=\"https%3A%2F%2Fapi.pingxx.com%2Fnotify%2Fcharges%2Fch_a5OinLGyzzjLXPSOy9rPKKiL\"&partner=\"2008010319263982\"&out_trade_no=\"123456789\"&subject=\"Your Subject\"&body=\"Your Body\"&total_fee=\"0.10\"&payment_type=\"1\"&seller_id=\"2088020116983982\"&it_b_pay=\"2016-03-18 11:43:41\"&sign=\"ODRJPReSwsH8om5fGTqvhia9453k4eUaaGMJTLMTnEYbBuceMyTathvKtdnUpsP6Q5%2F5jcEV887EdtBWi4tuMFHPQmm4dz1nG6b4Blafi6v2tvKaf8b0RiQTOycU4SxigugKoyfeR6E4AGA6uIzWUBRpkq%2BZf65eqT0qe712BJ0%3D\"&sign_type=\"RSA\""
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_a5OinLGyzzjLXPSOy9rPKKiL",
"object": "charge",
"created": 1458186221,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "alipay",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {},
"time_paid": null,
"time_expire": 1458272621,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_a5OinLGyzzjLXPSOy9rPKKiL/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"alipay": {
"orderInfo": "service=\"mobile.securitypay.pay\"&_input_charset=\"utf-8\"&notify_url=\"https%3A%2F%2Fapi.pingxx.com%2Fnotify%2Fcharges%2Fch_a5OinLGyzzjLXPSOy9rPKKiL\"&partner=\"2008010319263982\"&out_trade_no=\"123456789\"&subject=\"Your Subject\"&body=\"Your Body\"&total_fee=\"0.10\"&payment_type=\"1\"&seller_id=\"2088020116983982\"&it_b_pay=\"2016-03-18 11:43:41\"&sign=\"ODRJPReSwsH8om5fGTqvhia9453k4eUaaGMJTLMTnEYbBuceMyTathvKtdnUpsP6Q5%2F5jcEV887EdtBWi4tuMFHPQmm4dz1nG6b4Blafi6v2tvKaf8b0RiQTOycU4SxigugKoyfeR6E4AGA6uIzWUBRpkq%2BZf65eqT0qe712BJ0%3D\"&sign_type=\"RSA\""
}
},
"description": "Your Description"
}
]
}
}
alipay_wap
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "alipay_wap",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"alipay_wap": {
"_input_charset": "utf-8",
"format": "xml",
"partner": "2098711316033982",
"req_data": "<auth_and_execute_req><request_token>20160317a4d74946da79c647f0c67ca9f5c17f71</request_token></auth_and_execute_req>",
"sec_id": "0001",
"service": "alipay.wap.auth.authAndExecute",
"v": "2.0",
"sign": "LSctKFOSV5tYcfAAwiuEhY/W13jKn3IY956vvrI4WZFNPz8TmOROeSBnryAnVOHIAG26SgTqQHj7mdMSvwhZyFTnYBKgPGHflRbxSC6IoxjTigJthGMguaxLTAtgRomuFF2BLqDR26dPDxf6LB+9q7N+Pa5kC5K/i7yv5b6YZ38="
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_9O44yLSy98iDjLaPmD1S48qT",
"object": "charge",
"created": 1458186436,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "alipay_wap",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"success_url": "http://example.com/success",
"cancel_url": "http://example.com/cancel"
},
"time_paid": null,
"time_expire": 1458272836,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_9O44yLSy98iDjLaPmD1S48qT/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"alipay_wap": {
"_input_charset": "utf-8",
"format": "xml",
"partner": "2098711316033982",
"req_data": "<auth_and_execute_req><request_token>20160317a4d74946da79c647f0c67ca9f5c17f71</request_token></auth_and_execute_req>",
"sec_id": "0001",
"service": "alipay.wap.auth.authAndExecute",
"v": "2.0",
"sign": "LSctKFOSV5tYcfAAwiuEhY/W13jKn3IY956vvrI4WZFNPz8TmOROeSBnryAnVOHIAG26SgTqQHj7mdMSvwhZyFTnYBKgPGHflRbxSC6IoxjTigJthGMguaxLTAtgRomuFF2BLqDR26dPDxf6LB+9q7N+Pa5kC5K/i7yv5b6YZ38="
}
},
"description": "Your Description"
}
]
}
}
alipay_lite
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "alipay_lite",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"alipay_lite": "201811210243951322858400****"
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": ["balance"],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [{
"id": "ch_5OSeD8abzLiDufXj989GWfzD",
"object": "charge",
"created": 1542785719,
"livemode": false,
"paid": false,
"refunded": false,
"reversed": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "alipay_lite",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 10,
"amount_settle": 10,
"currency": "cny",
"subject": "测试订单-123456789",
"body": "订单内容-123456789",
"extra": {
"buyer_user_id": "20887026733***"
},
"time_paid": null,
"time_expire": 1542872119,
"time_settle": null,
"transaction_no": "201811210243951322858400****",
"refunds": {
"object": "list",
"url": "/v1/charges/ch_5OSeD8abzLiDufXj989GWfzD/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"alipay_lite": "201811210243951322858400****"
},
"description": null
}]
}
}
alipay_pc_direct
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "alipay_pc_direct",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"alipay_pc_direct": {
"service": "create_direct_pay_by_user",
"_input_charset": "utf-8",
"return_url": "http://example.com/success",
"notify_url": "https://api.pingxx.com/notify/charges/ch_CqPS8SbTyLSOur1uTSn9W9aP",
"partner": "2098021316900282",
"out_trade_no": "123456789",
"subject": "Your Subject",
"body": "Your Body",
"total_fee": "0.10",
"payment_type": 1,
"seller_id": "2088718916998982",
"it_b_pay": "1d",
"sign": "JwXwOCkFnrQgEXOShwSek7Fu4dzXFCN/ihwOraPFoJ1vhNbhnUHm6SSwYZ+uYFyEiv7LvJLASqknQn9y+TaD4XgE6CAg7ez0MncLy1T5eqTHl+EqTgszMATcFVwAxRu4HOmtTujLL3XqOxdc4LQmnVr2nMsmV0WjE7v73Cu+8vs=",
"sign_type": "RSA"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_CqPS8SbTyLSOur1uTSn9W9aP",
"object": "charge",
"created": 1458186553,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "alipay_pc_direct",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"success_url": "http://example.com/success"
},
"time_paid": null,
"time_expire": 1458272953,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_CqPS8SbTyLSOur1uTSn9W9aP/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"alipay_pc_direct": {
"service": "create_direct_pay_by_user",
"_input_charset": "utf-8",
"return_url": "http://example.com/success",
"notify_url": "https://api.pingxx.com/notify/charges/ch_CqPS8SbTyLSOur1uTSn9W9aP",
"partner": "2098021316900282",
"out_trade_no": "123456789",
"subject": "Your Subject",
"body": "Your Body",
"total_fee": "0.10",
"payment_type": 1,
"seller_id": "2088718916998982",
"it_b_pay": "1d",
"sign": "JwXwOCkFnrQgEXOShwSek7Fu4dzXFCN/ihwOraPFoJ1vhNbhnUHm6SSwYZ+uYFyEiv7LvJLASqknQn9y+TaD4XgE6CAg7ez0MncLy1T5eqTHl+EqTgszMATcFVwAxRu4HOmtTujLL3XqOxdc4LQmnVr2nMsmV0WjE7v73Cu+8vs=",
"sign_type": "RSA"
}
},
"description": "Your Description"
}
]
}
}
bfb_wap
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "bfb_wap",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"bfb_wap": {
"service_code": "1",
"sp_no": "1500308806",
"order_create_time": "20160317124544",
"order_no": "123456789",
"goods_name": "Your%20Subject",
"goods_desc": "Your%20Body",
"total_amount": 100,
"currency": "1",
"return_url": "https://api.pingxx.com/notify/charges/ch_GSGGqTvXbLOKvr5CuDHiPKy5",
"pay_type": "2",
"input_charset": "1",
"version": "2",
"sign_method": "1",
"extra": "ch_GSGGqTvXbLOKvr5CuDHiPKy5",
"page_url": "http://example.com/result",
"expire_time": "20160318124544",
"sign": "908f79e86e5be16c39a0e8cc7151ba72",
"url": "https://www.baifubao.com/api/0/pay/0/wapdirect/0"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_GSGGqTvXbLOKvr5CuDHiPKy5",
"object": "charge",
"created": 1458189944,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "bfb_wap",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"bfb_login": false,
"result_url": "http://example.com/result"
},
"time_paid": null,
"time_expire": 1458276344,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_GSGGqTvXbLOKvr5CuDHiPKy5/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"bfb_wap": {
"service_code": "1",
"sp_no": "1500308806",
"order_create_time": "20160317124544",
"order_no": "123456789",
"goods_name": "Your%20Subject",
"goods_desc": "Your%20Body",
"total_amount": 100,
"currency": "1",
"return_url": "https://api.pingxx.com/notify/charges/ch_GSGGqTvXbLOKvr5CuDHiPKy5",
"pay_type": "2",
"input_charset": "1",
"version": "2",
"sign_method": "1",
"extra": "ch_GSGGqTvXbLOKvr5CuDHiPKy5",
"page_url": "http://example.com/result",
"expire_time": "20160318124544",
"sign": "908f79e86e5be16c39a0e8cc7151ba72",
"url": "https://www.baifubao.com/api/0/pay/0/wapdirect/0"
}
},
"description": "Your Description"
}
]
}
}
upacp
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "upacp",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"upacp": {
"tn": "201603171209000472078",
"mode": "00"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_WzPaT8HKSyP89eLaH80mD440",
"object": "charge",
"created": 1458187740,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "upacp",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {},
"time_paid": null,
"time_expire": 1458191340,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_WzPaT8HKSyP89eLaH80mD440/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"upacp": {
"tn": "201603171209000472078",
"mode": "00"
}
},
"description": "Your Description"
}
]
}
}
upacp_wap
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "upacp_wap",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"upacp_wap": {
"accessType": "0",
"backUrl": "https://api.pingxx.com/notify/charges/ch_mXfH40mL8OW9q1Ka9KW9eHSS",
"bizType": "000000",
"certId": "69358489754",
"channelType": "08",
"currencyCode": "156",
"customerIp": "127.0.0.1",
"encoding": "UTF-8",
"frontUrl": "http://example.com/result",
"merId": "802310048993438",
"orderDesc": "Your Subject",
"orderId": "123456789",
"payTimeout": "20160317131227",
"reqReserved": "ch_mXfH40mL8OW9q1Ka9KW9eHSS",
"signMethod": "01",
"txnAmt": "10",
"txnSubType": "01",
"txnTime": "20160317121227",
"txnType": "01",
"version": "5.0.0",
"signature": "J4ruMZQ5FNcVBECN1foTW2qSTot6vYCaogpZm78eXAr8tOeupBevfjlapLDhv5WagdeFzobQAXBG8kjr6mh4rI4TqAkG1MHIDuNxNrh04jnBwSBzPfTVGRWSlfllv3M5+dfjtsFO5mP2nAoyjVRuYHqkX8YFeZ+bsTHL+H72RAA4WurKN1VAGH+icBzmjASzEa7nRKU/8kzScAdE6Muhm6g4zRD38cmC/gS8FF1d2+C2OemhSdGRDKCyHb36zlVO9TYiq6zMldBOmuBSHSrYhnCQugM+cdnM5yjvYiLWgRdkoIj8RrFHcJBqFsOCxlxarAixl6jKrEc5Ebdny0P8Pw=="
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": ["balance"],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [{
"id": "ch_mXfH40mL8OW9q1Ka9KW9eHSS",
"object": "charge",
"created": 1458187947,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "upacp_wap",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"result_url": "http://example.com/result"
},
"time_paid": null,
"time_expire": 1458191547,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_mXfH40mL8OW9q1Ka9KW9eHSS/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"upacp_wap": {
"accessType": "0",
"backUrl": "https://api.pingxx.com/notify/charges/ch_mXfH40mL8OW9q1Ka9KW9eHSS",
"bizType": "000000",
"certId": "69358489754",
"channelType": "08",
"currencyCode": "156",
"customerIp": "127.0.0.1",
"encoding": "UTF-8",
"frontUrl": "http://example.com/result",
"merId": "802310048993438",
"orderDesc": "Your Subject",
"orderId": "123456789",
"payTimeout": "20160317131227",
"reqReserved": "ch_mXfH40mL8OW9q1Ka9KW9eHSS",
"signMethod": "01",
"txnAmt": "10",
"txnSubType": "01",
"txnTime": "20160317121227",
"txnType": "01",
"version": "5.0.0",
"signature": "J4ruMZQ5FNcVBECN1foTW2qSTot6vYCaogpZm78eXAr8tOeupBevfjlapLDhv5WagdeFzobQAXBG8kjr6mh4rI4TqAkG1MHIDuNxNrh04jnBwSBzPfTVGRWSlfllv3M5+dfjtsFO5mP2nAoyjVRuYHqkX8YFeZ+bsTHL+H72RAA4WurKN1VAGH+icBzmjASzEa7nRKU/8kzScAdE6Muhm6g4zRD38cmC/gS8FF1d2+C2OemhSdGRDKCyHb36zlVO9TYiq6zMldBOmuBSHSrYhnCQugM+cdnM5yjvYiLWgRdkoIj8RrFHcJBqFsOCxlxarAixl6jKrEc5Ebdny0P8Pw=="
}
},
"description": "Your Description"
}]
}
}
upacp_qr
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1,
"actual_amount": -9,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 1,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "upacp_wap",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"upacp_wap": {
"object": "credential",
"upacp_qr": "https://qr.95516.com/00010001/62262xxx"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": ["balance"],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [{
"id": "ch_Ce1q1CDSaPaTz9efP0afH4aH",
"object": "charge",
"created": 1539237945,
"livemode": true,
"paid": false,
"refunded": false,
"reversed": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "upacp_qr",
"order_no": "201801009425",
"client_ip": "180.168.5.158",
"amount": 1,
"amount_settle": -9,
"currency": "cny",
"subject": "简米测试订单478",
"body": "订单内容",
"extra": {
"result_url": "https://www.pingxx.com"
},
"time_paid": null,
"time_expire": 1539324345,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_Ce1q1CDSaPaTz9efP0afH4aH/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"upacp_qr": "https://qr.95516.com/00010001/62262xxx"
},
"description": null
}]
}
}
upacp_pc
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "upacp_pc",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"upacp_pc": {
"accessType": "0",
"backUrl": "https://api.pingxx.com/notify/charges/ch_1q5OiHifXDq1nbvjnPz5mjTO",
"bizType": "000000",
"certId": "69566866070",
"channelType": "07",
"currencyCode": "156",
"customerIp": "127.0.0.1",
"encoding": "UTF-8",
"frontUrl": "http://example.com/result",
"merId": "802310048093617",
"orderDesc": "Your Subject",
"orderId": "123456789",
"payTimeout": "20160318124804",
"reqReserved": "ch_1q5OiHifXDq1nbvjnPz5mjTO",
"signMethod": "01",
"txnAmt": "10",
"txnSubType": "01",
"txnTime": "20160317124804",
"txnType": "01",
"version": "5.0.0",
"signature": "TCR83uPga+8ryD1xj5sEjOnEBSnhft7m4HXjQ8HdM4Siq/uRR9vSwG1zbAvU4MewOv/6Z5f0WR2U4WBmdvHDAzD863ONzRtrfEE2BUxBJYtdsIQ4uRfIL2SBELO8fENSLFGOk2e9IK+tYmEHO6dDzK8/mo6moAA/lcTzPmeR15zQiyEbNSYShxlXXpQmHZmLTjpdhEwpbFJF4tihGcwmeTLdV3maRpxo5F7+ahDkyBYgasG0f+pU/52HwhPDcyaZuOmn8CaDC/h/hHpXiOjtdz4yFGRZhqVRF849A4o8tBFtnQW6J5zYpSzTHgujlPaizTsNyLSoWZIRM2S+Tr7iYA=="
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_1q5OiHifXDq1nbvjnPz5mjTO",
"object": "charge",
"created": 1458190084,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "upacp_pc",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"result_url": "http://example.com/result"
},
"time_paid": null,
"time_expire": 1458276484,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_1q5OiHifXDq1nbvjnPz5mjTO/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"upacp_pc": {
"accessType": "0",
"backUrl": "https://api.pingxx.com/notify/charges/ch_1q5OiHifXDq1nbvjnPz5mjTO",
"bizType": "000000",
"certId": "69566866070",
"channelType": "07",
"currencyCode": "156",
"customerIp": "127.0.0.1",
"encoding": "UTF-8",
"frontUrl": "http://example.com/result",
"merId": "802310048093617",
"orderDesc": "Your Subject",
"orderId": "123456789",
"payTimeout": "20160318124804",
"reqReserved": "ch_1q5OiHifXDq1nbvjnPz5mjTO",
"signMethod": "01",
"txnAmt": "10",
"txnSubType": "01",
"txnTime": "20160317124804",
"txnType": "01",
"version": "5.0.0",
"signature": "TCR83uPga+8ryD1xj5sEjOnEBSnhft7m4HXjQ8HdM4Siq/uRR9vSwG1zbAvU4MewOv/6Z5f0WR2U4WBmdvHDAzD863ONzRtrfEE2BUxBJYtdsIQ4uRfIL2SBELO8fENSLFGOk2e9IK+tYmEHO6dDzK8/mo6moAA/lcTzPmeR15zQiyEbNSYShxlXXpQmHZmLTjpdhEwpbFJF4tihGcwmeTLdV3maRpxo5F7+ahDkyBYgasG0f+pU/52HwhPDcyaZuOmn8CaDC/h/hHpXiOjtdz4yFGRZhqVRF849A4o8tBFtnQW6J5zYpSzTHgujlPaizTsNyLSoWZIRM2S+Tr7iYA=="
}
},
"description": "Your Description"
}
]
}
}
cp_b2b
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "cp_b2b",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"cp_b2b": {
"Version": "20140728",
"MerId": "481611512088091",
"MerOrderNo": "123456789",
"TranDate": "20160317",
"TranTime": "125331",
"OrderAmt": 10,
"BusiType": "0001",
"MerBgUrl": "https://api.pingxx.com/notify/charges/ch_WfvDmDyXjn5Gi9aTCOzjXPG4",
"Signature": "H7eU9gLxln0l9kWDpUhhCT6BtMa4PQwNbKEE3WnekUrDJAsu1b7B9hSZHLI7XABziox0aJ+ldAxRr/7dv7DfJPnKiZzMasST8lYoNi5bHSyTv8nJ3OxQhZesSSqGUiWBCt7yDNPGeDsp02Jx0drsgfsyrPGxB2sG6yiXeH97Qyk="
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_WfvDmDyXjn5Gi9aTCOzjXPG4",
"object": "charge",
"created": 1458190411,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "cp_b2b",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {},
"time_paid": null,
"time_expire": 1458276811,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_WfvDmDyXjn5Gi9aTCOzjXPG4/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"cp_b2b": {
"Version": "20140728",
"MerId": "481611512088091",
"MerOrderNo": "123456789",
"TranDate": "20160317",
"TranTime": "125331",
"OrderAmt": 10,
"BusiType": "0001",
"MerBgUrl": "https://api.pingxx.com/notify/charges/ch_WfvDmDyXjn5Gi9aTCOzjXPG4",
"Signature": "H7eU9gLxln0l9kWDpUhhCT6BtMa4PQwNbKEE3WnekUrDJAsu1b7B9hSZHLI7XABziox0aJ+ldAxRr/7dv7DfJPnKiZzMasST8lYoNi5bHSyTv8nJ3OxQhZesSSqGUiWBCt7yDNPGeDsp02Jx0drsgfsyrPGxB2sG6yiXeH97Qyk="
}
},
"description": "Your Description"
}
]
}
}
upacp_b2b
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "upacp_b2b",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"upacp_b2b": {
"accessType": "0",
"backUrl": "https://api.pingxx.com/notify/charges/ch_mXfH40mL8OW9q1Ka9KW9eHSS",
"bizType": "000000",
"certId": "69358489754",
"channelType": "08",
"currencyCode": "156",
"customerIp": "127.0.0.1",
"encoding": "UTF-8",
"frontUrl": "http://example.com/result",
"merId": "802310048993438",
"orderDesc": "Your Subject",
"orderId": "123456789",
"payTimeout": "20160317131227",
"reqReserved": "ch_mXfH40mL8OW9q1Ka9KW9eHSS",
"signMethod": "01",
"txnAmt": "10",
"txnSubType": "01",
"txnTime": "20160317121227",
"txnType": "01",
"version": "5.0.0",
"signature": "J4ruMZQ5FNcVBECN1foTW2qSTot6vYCaogpZm78eXAr8tOeupBevfjlapLDhv5WagdeFzobQAXBG8kjr6mh4rI4TqAkG1MHIDuNxNrh04jnBwSBzPfTVGRWSlfllv3M5+dfjtsFO5mP2nAoyjVRuYHqkX8YFeZ+bsTHL+H72RAA4WurKN1VAGH+icBzmjASzEa7nRKU/8kzScAdE6Muhm6g4zRD38cmC/gS8FF1d2+C2OemhSdGRDKCyHb36zlVO9TYiq6zMldBOmuBSHSrYhnCQugM+cdnM5yjvYiLWgRdkoIj8RrFHcJBqFsOCxlxarAixl6jKrEc5Ebdny0P8Pw=="
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_mXfH40mL8OW9q1Ka9KW9eHSS",
"object": "charge",
"created": 1458187947,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "upacp_b2b",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"result_url": "http://example.com/result"
},
"time_paid": null,
"time_expire": 1458191547,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_mXfH40mL8OW9q1Ka9KW9eHSS/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"upacp_b2b": {
"accessType": "0",
"backUrl": "https://api.pingxx.com/notify/charges/ch_mXfH40mL8OW9q1Ka9KW9eHSS",
"bizType": "000000",
"certId": "69358489754",
"channelType": "08",
"currencyCode": "156",
"customerIp": "127.0.0.1",
"encoding": "UTF-8",
"frontUrl": "http://example.com/result",
"merId": "802310048993438",
"orderDesc": "Your Subject",
"orderId": "123456789",
"payTimeout": "20160317131227",
"reqReserved": "ch_mXfH40mL8OW9q1Ka9KW9eHSS",
"signMethod": "01",
"txnAmt": "10",
"txnSubType": "01",
"txnTime": "20160317121227",
"txnType": "01",
"version": "5.0.0",
"signature": "J4ruMZQ5FNcVBECN1foTW2qSTot6vYCaogpZm78eXAr8tOeupBevfjlapLDhv5WagdeFzobQAXBG8kjr6mh4rI4TqAkG1MHIDuNxNrh04jnBwSBzPfTVGRWSlfllv3M5+dfjtsFO5mP2nAoyjVRuYHqkX8YFeZ+bsTHL+H72RAA4WurKN1VAGH+icBzmjASzEa7nRKU/8kzScAdE6Muhm6g4zRD38cmC/gS8FF1d2+C2OemhSdGRDKCyHb36zlVO9TYiq6zMldBOmuBSHSrYhnCQugM+cdnM5yjvYiLWgRdkoIj8RrFHcJBqFsOCxlxarAixl6jKrEc5Ebdny0P8Pw=="
}
},
"description": "Your Description"
}
]
}
}
wx
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "wx",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"wx": {
"appId": "wx3eua2486c6tcb2b6",
"partnerId": "1256019001",
"prepayId": "wx20160017195617e5ce0352b40504808939",
"nonceStr": "bb3cc8d0d56ebf2cfcfeb20c2303759e",
"timeStamp": 1458186917,
"packageValue": "Sign=WXPay",
"sign": "T8B4077A04491C1DBE15G446BED4B570"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_a1aX1CzDmnz1jDCu5OGWfzfT",
"object": "charge",
"created": 1458186916,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "wx",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {},
"time_paid": null,
"time_expire": 1458194116,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_a1aX1CzDmnz1jDCu5OGWfzfT/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"wx": {
"appId": "wx3eua2486c6tcb2b6",
"partnerId": "1256019001",
"prepayId": "wx20160017195617e5ce0352b40504808939",
"nonceStr": "bb3cc8d0d56ebf2cfcfeb20c2303759e",
"timeStamp": 1458186917,
"packageValue": "Sign=WXPay",
"sign": "T8B4077A04491C1DBE15G446BED4B570"
}
},
"description": "Your Description"
}
]
}
}
wx_pub
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "wx_pub",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"wx_pub": {
"appId": "wx95dt8698h12152c7",
"timeStamp": "1458187589",
"nonceStr": "723d051e687d5ad68e0d53717024e951",
"package": "prepay_id=wx20167317120629437b16dede0665849747",
"signType": "MD5",
"paySign": "64C91296E3A9F1C50E3343B5717E636E"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_zXnfHGDOurL4LubPa15CeXf5",
"object": "charge",
"created": 1458187589,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "wx_pub",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"open_id": "o9zpMs7Xk7e9aJbTXgufovuWGp8c"
},
"time_paid": null,
"time_expire": 1458194789,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_zXnfHGDOurL4LubPa15CeXf5/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"wx_pub": {
"appId": "wx95dt8698h12152c7",
"timeStamp": "1458187589",
"nonceStr": "723d051e687d5ad68e0d53717024e951",
"package": "prepay_id=wx20167317120629437b16dede0665849747",
"signType": "MD5",
"paySign": "64C91296E3A9F1C50E3343B5717E636E"
}
},
"description": "Your Description"
}
]
}
}
wx_wap
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"object": "credential",
"wx_wap": "https://pay.swiftpass.cn/pay/wappay?token_id=34e0a0251d2dc5579e50d3ced9220143&service=pay.weixin.wappay"
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_zjbDC8j5CSiTPenDK4C0qLaD",
"object": "charge",
"created": 1467944440,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "wx_wap",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {},
"time_paid": null,
"time_expire": 1467947828,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_zjbDC8j5CSiTPenDK4C0qLaD/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"wx_wap": "https://pay.swiftpass.cn/pay/wappay?token_id=34e0a0251d2dc5579e50d3ced9220143&service=pay.weixin.wappay"
},
"description": "Your Description"
}
]
}
}
wx_lite
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"object": "credential",
"wx_lite": {
"appId": "wx95dt8698h12152c7",
"timeStamp": "1458187589",
"nonceStr": "723d051e687d5ad68e0d53717024e951",
"package": "prepay_id=wx20167317120629437b16dede0665849747",
"signType": "MD5",
"paySign": "64C91296E3A9F1C50E3343B5717E636E"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_zXnfHGDOurL4LubPa15CeXf5",
"object": "charge",
"created": 1458187589,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "wx_lite",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"open_id": "o9zpMs7Xk7e9aJbTXgufovuWGp8c"
},
"time_paid": null,
"time_expire": 1458194789,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_zXnfHGDOurL4LubPa15CeXf5/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"wx_pub": {
"appId": "wx95dt8698h12152c7",
"timeStamp": "1458187589",
"nonceStr": "723d051e687d5ad68e0d53717024e951",
"package": "prepay_id=wx20167317120629437b16dede0665849747",
"signType": "MD5",
"paySign": "64C91296E3A9F1C50E3343B5717E636E"
}
},
"description": "Your Description"
}
]
}
}
yeepay_wap
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "yeepay_wap",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"yeepay_wap": {
"merchantaccount": "10012456009",
"encryptkey": "DNWDtBcCUtdpo+OthaxUkS7/qpxeAYEerEVYL2kI+dkMGYztlyvmvEFbkBxiq/h9TBnQxnRGu4UdODRjJmktT6NNWwIOWU5pLDcu7TsRTJMfvJH1o3425S86gLs28jl3+gqzQ6igyU2dIfQaX6NwtWX1OWLPP/ALcT3ydbIuPAU=",
"data": "hcacFk+TeY1uyUwi+8THY1LTZqS0pP2HMcf2gDE8sdeMsdy3hNc7ilrlDdgv3nqVi8QDSdE2C6nXNk8yvKex5Uz77lNH9uOJaIELRQzrfo0EpD/r3Go+2Qr3m8eHxD8xq05ZFhBbE3vms9qszScTi8UjVBeiyTNxXpT5I8NDm4mJxCPDwyjGkYyUgYdfvpvHt9VA5ShcmKuqZCnF7SZ4PcYezwYvdP6HqBE4is/KQqqME3q+sTpiPc1kFb2QMvKg2JLatTgvaB1QIZzR1UZCcgPc1vUA1gtxzSiWgu2/2Sm+wvWS6VzOX7mG33Ot74mj04SuDVU4jzXdtqJ7u7VG90p2PGYgX+blh4c511Dn39/VTi8zMQxkUVyUINsdHtJwtNPMJAMhPwCt6QAElZnAkpBjd7N8cKVE1GidSKJr1+b/wY7oo7rtV7syzgjAn8B1eDD27AD3OMP5ybGV4VTMtHy83p0hanGCE0H1UNdM8gcV+aLRc3+eHruIXX5ywAV9XQtuE/wdQ3+Tyi8hfgLO6IzaL/id4qGNsCOKmUsiZwk8MQsWHDtznMzEJ4A7RB7YeIO1NdJi9tJpFFEBVKgjyioCE6EVnJ18QuYp/4LXabxodoHwEs7WqUrF4jHaztdHij+Q3fPTp1T6wJE7oOmHSwhB7ACwxssuv634+sYH2wVnfWgq4R7JVp+q4g702psJyzBywmS8sQ0zeTmeoR4a1/SAzQJqhPE01cjy+CWVc9qtORfOABUF7PGjlA3FXKycJIIAK1TAOLuu5FYMgl5t9ATSOo/d1FZJswFYHE8PQutjAVF677u6+W4z/NX5BnTu52gTkN4JsMKCW5vk+TbdCqANy5VS8uNNqPjAtHwJSWfIuvQ+iETsUO+yEOzOPumRTdA9iOgTz4W1Eyb+rpSe+SuV3sMR3tgPqeVo5tCC3Fpi0bjywN6dM5kaJ+IH8+skrmslBKGIL9MwPM1V9+15kvAlm4xQIUCESdvIXFsASpxfTY/P4TwYu7Gvy0fyrjM9Ok0A5Q3V2uPXJoXaj4jP2nIgMOEzfK3E4v4qV0fw73w=",
"mode": "live"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_4e5qnLajLufL48eTmLKKGOS0",
"object": "charge",
"created": 1458189596,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "yeepay_wap",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"product_category": 1,
"identity_id": "kBjVoNLgXIBHlJxaAJIPuUvIUGivLkgFPhIONksqKPCmHlTotN",
"identity_type": 1,
"terminal_type": 1,
"terminal_id": "gSvFOVTHTIJOwFMWvmka",
"user_ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:36.0) Gecko/20100101 Firefox/36.0",
"result_url": "http://example.com/result"
},
"time_paid": null,
"time_expire": 1458275996,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_4e5qnLajLufL48eTmLKKGOS0/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"yeepay_wap": {
"merchantaccount": "10012456009",
"encryptkey": "DNWDtBcCUtdpo+OthaxUkS7/qpxeAYEerEVYL2kI+dkMGYztlyvmvEFbkBxiq/h9TBnQxnRGu4UdODRjJmktT6NNWwIOWU5pLDcu7TsRTJMfvJH1o3425S86gLs28jl3+gqzQ6igyU2dIfQaX6NwtWX1OWLPP/ALcT3ydbIuPAU=",
"data": "hcacFk+TeY1uyUwi+8THY1LTZqS0pP2HMcf2gDE8sdeMsdy3hNc7ilrlDdgv3nqVi8QDSdE2C6nXNk8yvKex5Uz77lNH9uOJaIELRQzrfo0EpD/r3Go+2Qr3m8eHxD8xq05ZFhBbE3vms9qszScTi8UjVBeiyTNxXpT5I8NDm4mJxCPDwyjGkYyUgYdfvpvHt9VA5ShcmKuqZCnF7SZ4PcYezwYvdP6HqBE4is/KQqqME3q+sTpiPc1kFb2QMvKg2JLatTgvaB1QIZzR1UZCcgPc1vUA1gtxzSiWgu2/2Sm+wvWS6VzOX7mG33Ot74mj04SuDVU4jzXdtqJ7u7VG90p2PGYgX+blh4c511Dn39/VTi8zMQxkUVyUINsdHtJwtNPMJAMhPwCt6QAElZnAkpBjd7N8cKVE1GidSKJr1+b/wY7oo7rtV7syzgjAn8B1eDD27AD3OMP5ybGV4VTMtHy83p0hanGCE0H1UNdM8gcV+aLRc3+eHruIXX5ywAV9XQtuE/wdQ3+Tyi8hfgLO6IzaL/id4qGNsCOKmUsiZwk8MQsWHDtznMzEJ4A7RB7YeIO1NdJi9tJpFFEBVKgjyioCE6EVnJ18QuYp/4LXabxodoHwEs7WqUrF4jHaztdHij+Q3fPTp1T6wJE7oOmHSwhB7ACwxssuv634+sYH2wVnfWgq4R7JVp+q4g702psJyzBywmS8sQ0zeTmeoR4a1/SAzQJqhPE01cjy+CWVc9qtORfOABUF7PGjlA3FXKycJIIAK1TAOLuu5FYMgl5t9ATSOo/d1FZJswFYHE8PQutjAVF677u6+W4z/NX5BnTu52gTkN4JsMKCW5vk+TbdCqANy5VS8uNNqPjAtHwJSWfIuvQ+iETsUO+yEOzOPumRTdA9iOgTz4W1Eyb+rpSe+SuV3sMR3tgPqeVo5tCC3Fpi0bjywN6dM5kaJ+IH8+skrmslBKGIL9MwPM1V9+15kvAlm4xQIUCESdvIXFsASpxfTY/P4TwYu7Gvy0fyrjM9Ok0A5Q3V2uPXJoXaj4jP2nIgMOEzfK3E4v4qV0fw73w=",
"mode": "live"
}
},
"description": "Your Description"
}
]
}
}
jdpay_wap
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "jdpay_wap",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"jdpay_wap": {
"version": "V2.0",
"merchant": "22294512",
"tradeNum": "43b0e131b39889dae14975c9324ead11566cc29ba2719fdf",
"tradeName": "dc278f51509a1966a6b9814429t30d02350357dd77668fd85c8ab68f102d8b6898735c6e6e00db00",
"tradeDesc": "0043174e1ebbfd9da6b9804429e30d02d358065b49b273a801a5e003dbe3d644835159ecbe33797a5c6bb10d37a2093a405566af9891d357ed9611379c271e60f3faecc5491b6a5dc5566a77f671b010d80e90ec5c0ff09a83af6483de6a619968be9fd40a5d2f78ce4bc26bdce64fdbbe67e07b587c63a8c92534b7958ea811",
"tradeTime": "443c19l7a2d9ea88ffc26ca6cdacf533f846cc39ddd717e0",
"amount": "639bd998e3818709",
"orderType": "2e9e4c0049241b99",
"currency": "4eb4eba53ff53ee1",
"callbackUrl": "4308b99bf56a1070fe15eb4180b2ea829d2723679be69b3e5447e80d4535c1d8cc4bb09b027e4e54af6c0b09a3756091",
"notifyUrl": "25f901da8a8ec075e2304c0d2ba3ge079d2723679be69b3edad1c6d83077fcaf9ea43d0457b825581cc1bd630d9d89fb6ed1e4dc31b8ff88496e1c2ac468e7ceb56cb06fbee1d835",
"note": "bdec2f03d58e1b94b1bb45a9d84a33aa4ee4b289d260440f5c79483467285cc1c47448d3efc3f7cb1098d5967cc150597e37d49cdf062811ba6246af7702b9a971e923c7da2de903",
"expireTime": "e1394edcc9174d0fa2f22164468b6f0d",
"sign": "12kfGtzF4gYLuS/R3VxtZylWZkbHnyUpeygJrj5WUDL4Pt4VoIh+tDvmY3PgZrFbvHq4ZR6tWAzvskHD8cQk06G0/wibxWSL411Fyc4qmsLrQlEXQ0G/z0MX1SEZHPxg8G71LIqbEOT/QVp6HQpoMquesISvtR2rgHuUCYz3OUY=",
"channelUrl": "https://wepay.jd.com/jdpay/saveOrder"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_Hivjz9KKyTuHrb5aP81ejPCK",
"object": "charge",
"created": 1458189392,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "jdpay_wap",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your body",
"extra": {
"success_url": "http://example.com/success",
"fail_url": "http://example.com/fail",
"token": "yGOKVwTPdCTvzobHmjeCySjzriZqEMIG",
"is_mobile": false,
"order_type": "1"
},
"time_paid": null,
"time_expire": 1458275792,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_Hivjz9KKyTuHrb5aP81ejPCK/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"jdpay_wap": {
"version": "V2.0",
"merchant": "22294512",
"tradeNum": "43b0e131b39889dae14975c9324ead11566cc29ba2719fdf",
"tradeName": "dc278f51509a1966a6b9814429t30d02350357dd77668fd85c8ab68f102d8b6898735c6e6e00db00",
"tradeDesc": "0043174e1ebbfd9da6b9804429e30d02d358065b49b273a801a5e003dbe3d644835159ecbe33797a5c6bb10d37a2093a405566af9891d357ed9611379c271e60f3faecc5491b6a5dc5566a77f671b010d80e90ec5c0ff09a83af6483de6a619968be9fd40a5d2f78ce4bc26bdce64fdbbe67e07b587c63a8c92534b7958ea811",
"tradeTime": "443c19l7a2d9ea88ffc26ca6cdacf533f846cc39ddd717e0",
"amount": "639bd998e3818709",
"orderType": "2e9e4c0049241b99",
"currency": "4eb4eba53ff53ee1",
"callbackUrl": "4308b99bf56a1070fe15eb4180b2ea829d2723679be69b3e5447e80d4535c1d8cc4bb09b027e4e54af6c0b09a3756091",
"notifyUrl": "25f901da8a8ec075e2304c0d2ba3ge079d2723679be69b3edad1c6d83077fcaf9ea43d0457b825581cc1bd630d9d89fb6ed1e4dc31b8ff88496e1c2ac468e7ceb56cb06fbee1d835",
"note": "bdec2f03d58e1b94b1bb45a9d84a33aa4ee4b289d260440f5c79483467285cc1c47448d3efc3f7cb1098d5967cc150597e37d49cdf062811ba6246af7702b9a971e923c7da2de903",
"expireTime": "e1394edcc9174d0fa2f22164468b6f0d",
"sign": "12kfGtzF4gYLuS/R3VxtZylWZkbHnyUpeygJrj5WUDL4Pt4VoIh+tDvmY3PgZrFbvHq4ZR6tWAzvskHD8cQk06G0/wibxWSL411Fyc4qmsLrQlEXQ0G/z0MX1SEZHPxg8G71LIqbEOT/QVp6HQpoMquesISvtR2rgHuUCYz3OUY=",
"channelUrl": "https://wepay.jd.com/jdpay/saveOrder"
}
},
"description": "Your Description"
}
]
}
}
applepay_upacp
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": false,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "applepay_upacp",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"applepay_upacp": {
"tn": "201603171345129563392",
"mode": "00",
"merchant_id": "Your app merchant id"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_fLCuvDG4aPW94q10q5nXb9KC",
"object": "charge",
"created": 1458193512,
"livemode": false,
"paid": false,
"refunded": false,
"app": "app_LibTW1n1SOq9Pin1",
"channel": "applepay_upacp",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {},
"time_paid": null,
"time_expire": 1458197112,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_fLCuvDG4aPW94q10q5nXb9KC/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"applepay_upacp": {
"tn": "201603171345129563392",
"mode": "00",
"merchant_id": "Your app merchant id"
}
},
"description": "Your Description"
}
]
}
}
cmb_wallet
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "cmb_wallet",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"cmb_wallet": {
"BranchID": "0011",
"CoNo": "002147",
"BillNo": "2016062901",
"Amount": "1.00",
"MerchantUrl": "https://api.pingxx.com/notify/charges/ch_8a1mvHGKq1y1GuHqDSHiD0S8",
"MerchantRetUrl": "https://example.com/result",
"Date": "20160629",
"MerchantCode": "|tuBbQcNPHmqrvPXyynSpv7noZiYgVr9TA1KOSjg/UkojROkBgTMO5e7z3COJoGTwWTbWkjcZExFQ5XILqK6FrojuUrrDJ8hYSD2zcLk09laLLRFt0DWmf4W1Lfa9cfZjDAH3cexgXXwpIckPoW9vdLIG10LufvgPTvIk0a9vShjyMDGvsIc*olXWM*FdAohRB8e5K777zjPJKrm6yuZTQKjDlafrGwQ1vbMtCs*z0nwVhXHCTLjk3mdZIIZyHDwPzrhSIlqG3H2nVdukUs9oC3wZ/EfZKWEly3NflJTUJDhaU*2gt2E/HzGQ4f*hhUh/oBYLZWrmmseGEt3GKrkBTDfOkMY/kNcIq2xQVeuQL4eT2lazTygeiZE1yEl5ZB9zh7pKqQOmzoGxIegpf3qWqOnmRXtI/WUqmlbpocSvN1YAUUBBZzbAyHkLUHEPXh96mMKLjDkG4AZ1pLtd3AmpZaIIsBJVkR0F/bLDjJ9ttP3VJshQ/S*fph5tGoUY2IwxWMFD4XFAeM5cPv3IeurTapRQTWnaHOcv9tHdpXgz09/z36sZBPIhVkTARJ*Ix14j5kWGDlfxyBVWHGH2pTX*wtIVCb5RkBdsa83p4QnW7RXuVMwVipJLC0beevaOJho5LThH/vlfKDZTuC*mwXNIWBHU6n42*D0q5J5Fmj9GKSMT2jPRcHMoPLv0T/o=|878102442b84173b6cf0d981cfc19f5a1d7412a2",
"ChannelUrl": "https://netpay.cmbchina.com/netpayment/BaseHttp.dll?PrePayEUserP"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_8a1mvHGKq1y1GuHqDSHiD0S8",
"object": "charge",
"created": 1467169019,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "cmb_wallet",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"result_url": "https://example.com/result",
"p_no": "2016062901",
"seq": "2016062901",
"m_uid": "2016062901",
"mobile": "18512343456"
},
"time_paid": null,
"time_expire": 1467255419,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_8a1mvHGKq1y1GuHqDSHiD0S8/refunds",
"has_more": false,
"data": [
]
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {
},
"credential": {
"object": "credential",
"cmb_wallet": {
"BranchID": "0011",
"CoNo": "002147",
"BillNo": "2016062901",
"Amount": "1.00",
"MerchantUrl": "https://api.pingxx.com/notify/charges/ch_8a1mvHGKq1y1GuHqDSHiD0S8",
"MerchantRetUrl": "https://example.com/result",
"Date": "20160629",
"MerchantCode": "|tuBbQcNPHmqrvPXyynSpv7noZiYgVr9TA1KOSjg/UkojROkBgTMO5e7z3COJoGTwWTbWkjcZExFQ5XILqK6FrojuUrrDJ8hYSD2zcLk09laLLRFt0DWmf4W1Lfa9cfZjDAH3cexgXXwpIckPoW9vdLIG10LufvgPTvIk0a9vShjyMDGvsIc*olXWM*FdAohRB8e5K777zjPJKrm6yuZTQKjDlafrGwQ1vbMtCs*z0nwVhXHCTLjk3mdZIIZyHDwPzrhSIlqG3H2nVdukUs9oC3wZ/EfZKWEly3NflJTUJDhaU*2gt2E/HzGQ4f*hhUh/oBYLZWrmmseGEt3GKrkBTDfOkMY/kNcIq2xQVeuQL4eT2lazTygeiZE1yEl5ZB9zh7pKqQOmzoGxIegpf3qWqOnmRXtI/WUqmlbpocSvN1YAUUBBZzbAyHkLUHEPXh96mMKLjDkG4AZ1pLtd3AmpZaIIsBJVkR0F/bLDjJ9ttP3VJshQ/S*fph5tGoUY2IwxWMFD4XFAeM5cPv3IeurTapRQTWnaHOcv9tHdpXgz09/z36sZBPIhVkTARJ*Ix14j5kWGDlfxyBVWHGH2pTX*wtIVCb5RkBdsa83p4QnW7RXuVMwVipJLC0beevaOJho5LThH/vlfKDZTuC*mwXNIWBHU6n42*D0q5J5Fmj9GKSMT2jPRcHMoPLv0T/o=|878102442b84173b6cf0d981cfc19f5a1d7412a2",
"ChannelUrl": "https://netpay.cmbchina.com/netpayment/BaseHttp.dll?PrePayEUserP"
}
},
"description": null
}
]
}
}
cmb_pc_qr
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "cmb_pc_qr",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"cmb_pc_qr": {
"charset": "UTF-8",
"jsonRequestData": "{\"version\":\"1.0\",\"charset\":\"UTF-8\",\"sign\":\"5f7f29fbe28ba1ece1e9e36f71e4ff514d6444aea8e494f523c24e23dbdb5288\",\"signType\":\"SHA-256\",\"reqData\":{\"dateTime\":\"20180724140902\",\"branchNo\":\"0021\",\"merchantNo\":\"000208\",\"date\":\"20180724\",\"orderNo\":\"912111532412543\",\"productDesc\":\"Pingxx测试订单1532412543\",\"amount\":\"110.00\",\"payNoticeUrl\":\"http://218.244.151.190/notify/charges/ch_KyLOOCb1mzrPXn5iH0r1SyXD\",\"payNoticePara\":\"ch_KyLOOCb1mzrPXn5iH0r1SyXD\",\"returnUrl\":\"https://www.pingxx.com\",\"agrNo\":\"10001\",\"merchantSerialNo\":\"1\",\"userID\":\"1\",\"mobile\":\"13111111111\",\"signNoticeUrl\":\"http://218.244.151.190/notify/protocol/10001/ch_KyLOOCb1mzrPXn5iH0r1SyXD\",\"signNoticePara\":\"1|1\",\"encrypType\":\"RC4\",\"encrypData\":\"418d82bb3d8f072405a72cce864bb155977db44749882f1bb572936c47e8e1cadfc29b1e616f0a66f85f53238673004bebcae06e256212315cd3426fd261e5a6eff80d5e734b1f3f0e84772b03a6f3f6d0c0a3323ae8cb04078ce377970c88ce3cad28618fd928992a9eaab2819de09cb9068bcb7839c36e5eb76321044f933bc521d39b45663e1adffeb2db71e293a7f6c39fb622c5db8c44eddc44cdfa0a60\"}}",
"channel_url": "http://121.15.180.66:801/netpayment/BaseHttp.dll?PC_EUserPay"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_KyLOOCb1mzrPXn5iH0r1SyXD",
"object": "charge",
"created": 1532412542,
"livemode": true,
"paid": false,
"refunded": false,
"reversed": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "cmb_pc_qr",
"order_no": "912111532412543",
"client_ip": "180.168.5.158",
"amount": 11000,
"amount_settle": 10998,
"currency": "cny",
"subject": "Pingxx测试订单1532412543",
"body": "Pingxx测试订单1532412543",
"extra": {
"result_url": "https://www.pingxx.com",
"p_no": "10001",
"seq": "1",
"m_uid": "1",
"mobile": "13111111111",
"register_time": 1532334494,
"new_register": true,
"city_code": "200111",
"address_city": "200111",
"address_mobile": "13111111111",
"product_type": "1001"
},
"time_paid": null,
"time_expire": 1532498942,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_KyLOOCb1mzrPXn5iH0r1SyXD/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"cmb_pc_qr": {
"charset": "UTF-8",
"jsonRequestData": "{\"version\":\"1.0\",\"charset\":\"UTF-8\",\"sign\":\"5f7f29fbe28ba1ece1e9e36f71e4ff514d6444aea8e494f523c24e23dbdb5288\",\"signType\":\"SHA-256\",\"reqData\":{\"dateTime\":\"20180724140902\",\"branchNo\":\"0021\",\"merchantNo\":\"000208\",\"date\":\"20180724\",\"orderNo\":\"912111532412543\",\"productDesc\":\"Pingxx测试订单1532412543\",\"amount\":\"110.00\",\"payNoticeUrl\":\"http://218.244.151.190/notify/charges/ch_KyLOOCb1mzrPXn5iH0r1SyXD\",\"payNoticePara\":\"ch_KyLOOCb1mzrPXn5iH0r1SyXD\",\"returnUrl\":\"https://www.pingxx.com\",\"agrNo\":\"10001\",\"merchantSerialNo\":\"1\",\"userID\":\"1\",\"mobile\":\"13111111111\",\"signNoticeUrl\":\"http://218.244.151.190/notify/protocol/10001/ch_KyLOOCb1mzrPXn5iH0r1SyXD\",\"signNoticePara\":\"1|1\",\"encrypType\":\"RC4\",\"encrypData\":\"418d82bb3d8f072405a72cce864bb155977db44749882f1bb572936c47e8e1cadfc29b1e616f0a66f85f53238673004bebcae06e256212315cd3426fd261e5a6eff80d5e734b1f3f0e84772b03a6f3f6d0c0a3323ae8cb04078ce377970c88ce3cad28618fd928992a9eaab2819de09cb9068bcb7839c36e5eb76321044f933bc521d39b45663e1adffeb2db71e293a7f6c39fb622c5db8c44eddc44cdfa0a60\"}}",
"channel_url": "http://121.15.180.66:801/netpayment/BaseHttp.dll?PC_EUserPay"
}
},
"description": null
}
]
}
}
qpay
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "qpay",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"qpay": {
"app_id": "1144223800",
"nonce": "f7ccb761532b994b1b29c3533d11ab00",
"bargainor_id": "1323854000",
"sign": "ZjdjY2I3NjE1MzJiOTk0YjFiMjljMzUzM2QxMWFiMKU=",
"token_id": "2016101912570872148427010048255829831098511100"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_HybzX9zPO0mDGGKSe9zf5m5G",
"object": "charge",
"created": 1476853028,
"livemode": false,
"paid": false,
"refunded": false,
"app": "app_QSqrT0jPKabD1qjz",
"channel": "qpay",
"order_no": "12345678",
"client_ip": "127.0.0.1",
"amount": 1,
"amount_settle": 1,
"currency": "cny",
"subject": "songsong test",
"body": "Your Body",
"extra": {
"device": "ios"
},
"time_paid": null,
"time_expire": 1476939428,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_HybzX9zPO0mDGGKSe9zf5m5G/refunds",
"has_more": false,
"data": [
]
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {
},
"credential": {
"object": "credential",
"qpay": {
"app_id": "1144223800",
"nonce": "f7ccb761532b994b1b29c3533d11ab00",
"bargainor_id": "1323854000",
"sign": "ZjdjY2I3NjE1MzJiOTk0YjFiMjljMzUzM2QxMWFiMKU=",
"token_id": "2016101912570872148427010048255829831098511100"
}
},
"description": null
}
]
}
}
qpay_pub
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "qpay_pub",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"qpay_pub": {
"token_id": "0V0530a6f65aaef85837531c41d70d8b"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_rLWvj9HizLGKyrbXPCOunjfD",
"object": "charge",
"created": 1476853028,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_QSqrT0jPKabD1qjz",
"channel": "qpay_pub",
"order_no": "1478766781655",
"client_ip": "127.0.0.1",
"amount": 1,
"amount_settle": 1,
"currency": "cny",
"subject": "测试订单001",
"body": "订单内容001",
"extra": {
"device_info": "13467007045764",
"limit_pay": "no_balance",
"promotion_tag": "level_tag=xxx&sale_tag=xxx",
"attach": "Ping++ 分店"
},
"time_paid": null,
"time_expire": 1478853181,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_rLWvj9HizLGKyrbXPCOunjfD/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"qpay_pub": {
"token_id": "0V0530a6f65aaef85837531c41d70d8b"
}
},
"description": null
}
]
}
}
isv_wap
{
"id": "2001708140000017551",
"object": "order",
"created": 1495784250,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "149578424976090",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1495870650,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "isv_wap",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"isv_wap": "https://api.shou.money/scanpay/unified?data=eyJ2ZXJzaW9uIjoiMi4xIiwic2lnblR5cGUiOiJTSEEyNTYiLCJjaGFyc2V0IjoidXRmLTgiLCJvcmRlck51bSI6IjE0OTU3ODQyNDk3NjA5MCIsImJ1c2ljZCI6IldQQVkiLCJjaGNkIjoiQUxQIiwibWNobnRpZCI6IjIwODI3MDA0NzEwMDAwMyIsInRlcm1pbmFsaWQiOiIxMiIsInR4YW10IjoiMDAwMDAwMDAwMDAxIiwiYmFja1VybCI6Imh0dHBzOlwvXC9ub3RpZnkucGluZ3h4LmNvbVwvbm90aWZ5XC9jaGFyZ2VzXC9jaF9YZjVtYkRQTzBLcTk0ZWpUNEc4S0NtRFMiLCJmcm9udFVybCI6Imh0dHBzOlwvXC93d3cuZXhhbXBsZS5jb21cL3BheW1lbnQtcmVzdWx0IiwiYXR0YWNoIjoiY2hfWGY1bWJEUE8wS3E5NGVqVDRHOEtDbURTIiwic3ViamVjdCI6IllvdXIgU3ViamVjdCIsInNpZ24iOiI0NWE3YzU0Yzg0ZjBjYmRlODdmNmMyZjZkMjIxMDU4ZmYxMTJhNDE5YzU4OGY0ZmFjYmQwYjdiNWRhMTUzZThlIn0%3D"
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_Xf5mbDPO0Kq94ejT4G8KCmDS",
"object": "charge",
"created": 1495784250,
"livemode": true,
"paid": false,
"refunded": false,
"reversed": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "isv_wap",
"order_no": "149578424976090",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"pay_channel": "alipay",
"terminal_id": "T0000001",
"result_url": "https://www.example.com/payment-result"
},
"time_paid": null,
"time_expire": 1495870650,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_Xf5mbDPO0Kq94ejT4G8KCmDS/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"isv_wap": "https://api.shou.money/scanpay/unified?data=eyJ2ZXJzaW9uIjoiMi4xIiwic2lnblR5cGUiOiJTSEEyNTYiLCJjaGFyc2V0IjoidXRmLTgiLCJvcmRlck51bSI6IjE0OTU3ODQyNDk3NjA5MCIsImJ1c2ljZCI6IldQQVkiLCJjaGNkIjoiQUxQIiwibWNobnRpZCI6IjIwODI3MDA0NzEwMDAwMyIsInRlcm1pbmFsaWQiOiIxMiIsInR4YW10IjoiMDAwMDAwMDAwMDAxIiwiYmFja1VybCI6Imh0dHBzOlwvXC9ub3RpZnkucGluZ3h4LmNvbVwvbm90aWZ5XC9jaGFyZ2VzXC9jaF9YZjVtYkRQTzBLcTk0ZWpUNEc4S0NtRFMiLCJmcm9udFVybCI6Imh0dHBzOlwvXC93d3cuZXhhbXBsZS5jb21cL3BheW1lbnQtcmVzdWx0IiwiYXR0YWNoIjoiY2hfWGY1bWJEUE8wS3E5NGVqVDRHOEtDbURTIiwic3ViamVjdCI6IllvdXIgU3ViamVjdCIsInNpZ24iOiI0NWE3YzU0Yzg0ZjBjYmRlODdmNmMyZjZkMjIxMDU4ZmYxMTJhNDE5YzU4OGY0ZmFjYmQwYjdiNWRhMTUzZThlIn0%3D"
},
"description": null
}
]
}
}
isv_qr
{
"id": "2001708140000017551",
"object": "order",
"created": 1495723380,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "149572338024366",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1495809780,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "isv_qr",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"isv_qr": "weixin://wxpay/bizpayurl?pr=ugRxcvq"
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_Tm9OCGePqf9G148iTGPOyz50",
"object": "charge",
"created": 1495723380,
"livemode": true,
"paid": false,
"refunded": false,
"reversed": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "isv_qr",
"order_no": "149572338024366",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"pay_channel": "wx",
"terminal_id": "T0000001",
"buyer_account": "omYJse9x8w2TzmrxnUtrfr7qWhwc",
"channel_discount": 0,
"merchant_discount": 0
},
"time_paid": null,
"time_expire": 1495809780,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_Tm9OCGePqf9G148iTGPOyz50/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"isv_qr": "weixin://wxpay/bizpayurl?pr=ugRxcvq"
},
"description": null
}
]
}
}
isv_scan
{
"id": "2001708140000017551",
"object": "order",
"created": 1495694197,
"livemode": true,
"paid": true,
"refunded": false,
"status": "paid",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "149569419725834",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": 1495694546,
"time_expire": 1495780597,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_injTG4KGWPePS88WPGPyfzz5",
"object": "charge",
"created": 1495694197,
"livemode": true,
"paid": true,
"refunded": false,
"reversed": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "isv_scan",
"order_no": "149569419725834",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"scan_code": "131141564583769183",
"terminal_id": "T0000001",
"pay_channel": "wx",
"buyer_account": "omYJse9x8w2TzmrxnUtrfr7qWhwc",
"channel_discount": 0,
"merchant_discount": 0
},
"time_paid": 1495694546,
"time_expire": 1495780597,
"time_settle": null,
"transaction_no": "4002362001201705252516756579",
"refunds": {
"object": "list",
"url": "/v1/charges/ch_injTG4KGWPePS88WPGPyfzz5/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {},
"description": null
}
]
}
}
alipay_qr
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": false,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "alipay_qr",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"alipay_qr": "http://sissi.pingxx.com/mock.php?ch_id=ch_1Kyn50DyjXbHbvnv5SGK4qDK&channel=alipay_qr"
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [
{
"id": "ch_1Kyn50DyjXbHbvnv5SGK4qDK",
"object": "charge",
"created": 1502695440,
"livemode": false,
"paid": false,
"refunded": false,
"reversed": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "alipay_qr",
"order_no": "2017081400000006",
"client_ip": "127.0.0.1",
"amount": 800,
"amount_settle": 800,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {},
"time_paid": null,
"time_expire": 1502781019,
"time_settle": null,
"transaction_no": null,
"refunds": null,
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"alipay_qr": "http://sissi.pingxx.com/mock.php?ch_id=ch_1Kyn50DyjXbHbvnv5SGK4qDK&channel=alipay_qr"
},
"description": null
}
]
}
}
wx_pub_qr
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "wx_pub_qr",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"wx_pub_qr": "weixin://wxpay/bizpayurl?pr=qnZDTZm"
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": ["balance"],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [{
"id": "ch_TuHOq1vrfTy9HSyTWT9yTmXL",
"object": "charge",
"created": 1458187678,
"livemode": true,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "wx_pub_qr",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"product_id": "Product4Testing"
},
"time_paid": null,
"time_expire": 1458194878,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_TuHOq1vrfTy9HSyTWT9yTmXL/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"wx_pub_qr": "weixin://wxpay/bizpayurl?pr=qnZDTZm"
},
"description": "Your Description"
}]
}
}
ccb_pay
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "ccb_pay",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"ccb_pay": {
"orderinfo": "MERCHANTID=105001473994315&POSID=025547632&BRANCHID=110000000&ORDERID=912111810221540188097&PAYMENT=0.10&CURCODE=01&TXCODE=520100&REMARK1=ch_0CO0y144eHaPm5SmPK98KGiT&REMARK2=test&TYPE=1&GATEWAY=0&TIMEOUT=20181023140137&MAC=4a5426833973273bb20f0a638224ce5c"
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": ["balance"],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [{
"id": "ch_0CO0y144eHaPm5SmPK98KGiT",
"object": "charge",
"created": 1540188097,
"livemode": true,
"paid": false,
"refunded": false,
"reversed": false,
"app": "app_QSqrT0jPKabD1qjz",
"channel": "ccb_pay",
"order_no": "912111810221540188097",
"client_ip": "180.168.5.158",
"amount": 10,
"amount_settle": 10,
"currency": "cny",
"subject": "ping++测试订单1540188097",
"body": "ping++订单内容1540188097",
"extra": {
"support_account_type": "1",
"pos_id": "025547632",
"remark": "test"
},
"time_paid": null,
"time_expire": 1540274497,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_0CO0y144eHaPm5SmPK98KGiT/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"ccb_pay": {
"orderinfo": "MERCHANTID=105001473994315&POSID=025547632&BRANCHID=110000000&ORDERID=912111810221540188097&PAYMENT=0.10&CURCODE=01&TXCODE=520100&REMARK1=ch_0CO0y144eHaPm5SmPK98KGiT&REMARK2=test&TYPE=1&GATEWAY=0&TIMEOUT=20181023140137&MAC=4a5426833973273bb20f0a638224ce5c"
}
},
"description": "Your description"
}]
}
}
ccb_qr
{
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": false,
"refunded": false,
"status": "created",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": null,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "ccb_pay",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"ccb_qr": "9980001905035937882606"
}
},
"extra": {}
}, "receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": ["balance"],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [{
"id": "ch_bbnT0G44O088Hyzn94KKKyDC",
"object": "charge",
"created": 1540187487,
"livemode": true,
"paid": false,
"refunded": false,
"reversed": false,
"app": "app_QSqrT0jPKabD1qjz",
"channel": "ccb_qr",
"order_no": "912111810221540187487",
"client_ip": "180.168.5.158",
"amount": 10,
"amount_settle": 10,
"currency": "cny",
"subject": "ping++测试订单1540187487",
"body": "ping++订单内容1540187487",
"extra": {
"pos_id": "025547632",
"remark": "test",
"return_type": "1"
},
"time_paid": null,
"time_expire": 1540273887,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_bbnT0G44O088Hyzn94KKKyDC/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"ccb_qr": "9980001905035937882606"
},
"description": "Your description"
}]
}
}

第五步:将获得的 Order 传给 Client

除了部分扫码及付款码(条码)支付渠道外,你的服务器需要按照 JSON 字符串格式将创建支付请求后的 Order 返回给你的客户端。Ping++ SDK 对此做了相应的处理,你只需要将获得的 Order 对象直接传给客户端(服务端应传递怎样的支付凭证给前端),客户端接收后使用该对象用于调起支付控件,而 Order 的传送方式需要你自行实现。 注:scan 类渠道会在您请求支付 Order 后,若用户支付成功,Ping++ 直接返回带有支付状态的 Order 对象给你的服务端,详细流程可参考 扫码支付

第六步:接收 Webhooks 通知

当用户完成交易后 Ping++ 会给你配置在 Ping++ 管理平台的 Webhooks 通知地址主动发送支付结果,我们称之为 Webhooks 通知。 Webhooks 通知是以 POST 形式发送的 JSON,放在请求的 body 里,内容是 Event 对象,支付成功的事件类型为 order.succeeded ,你需要监听并接收 Webhooks 通知,接收到 Webhooks 后需要返回服务器状态码 2xx 表示接收成功,否则请返回状态码 500

$event = json_decode(file_get_contents("php://input"));
// 对异步通知做处理
if (!isset($event->type)) {
header($_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request');
exit("fail");
}
switch ($event->type) {
case "order.succeeded":
// 开发者在此处加入对支付异步通知的处理代码
header($_SERVER['SERVER_PROTOCOL'] . ' 200 OK');
break;
case "order.order.refund.succeeded":
// 开发者在此处加入对退款异步通知的处理代码
header($_SERVER['SERVER_PROTOCOL'] . ' 200 OK');
break;
default:
header($_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request');
break;
}
import com.pingplusplus.model.Event;
import com.pingplusplus.model.Webhooks;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
public class ServletDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF8");
//获取头部所有信息
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
String value = request.getHeader(key);
System.out.println(key+" "+value);
}
// 获得 http body 内容
BufferedReader reader = request.getReader();
StringBuffer buffer = new StringBuffer();
String string;
while ((string = reader.readLine()) != null) {
buffer.append(string);
}
reader.close();
// 解析异步通知数据
Event event = Webhooks.eventParse(buffer.toString());
if ("order.succeeded".equals(event.getType())) {
response.setStatus(200);
} else if ("order.order.refund.succeeded".equals(event.getType())) {
response.setStatus(200);
} else {
response.setStatus(500);
}
}
}
var http = require('http');
http.createServer(function (req, res) {
req.setEncoding('utf8');
var postData = "";
req.addListener("data", function (chunk) {
postData += chunk;
});
req.addListener("end", function () {
var resp = function (ret, status_code) {
res.writeHead(status_code, {
"Content-Type": "text/plain; charset=utf-8"
});
res.end(ret);
}
try {
var event = JSON.parse(postData);
if (event.type === undefined) {
return resp('Event 对象中缺少 type 字段', 400);
}
switch (event.type) {
case "order.succeeded":
// 开发者在此处加入对支付异步通知的处理代码
return resp("OK", 200);
break;
case "order.refund.succeeded":
// 开发者在此处加入对退款异步通知的处理代码
return resp("OK", 200);
break;
default:
return resp("未知 Event 类型", 400);
break;
}
} catch (err) {
return resp('JSON 解析失败', 400);
}
});
}).listen(8080, "0.0.0.0");
import json
from flask import Flask, request, Response
# 使用 flask
@app.route('/webhooks', methods=['POST'])
def webhooks():
event = request.get_json()
if event['type'] == 'order.succeeded':
return Response(status=200)
elif event['type'] == 'order.refund.succeeded':
return Response(status=200)
return Response(status=500)
if __name__ == '__main__':
app.run(debug=False, host='0.0.0.0', port=8080)
require 'webrick'
require 'json'
class Webhooks < WEBrick::HTTPServlet::AbstractServlet
def do_POST(request, response)
status = 400
response_body = '' # 可自定义
begin
event = JSON.parse(request.body)
if event['type'].nil?
response_body = 'Event 对象中缺少 type 字段'
elsif event['type'] == 'order.succeeded'
# 开发者在此处加入对支付异步通知的处理代码
status = 200
response_body = 'OK'
elsif event['type'] == 'order.refund.succeeded'
# 开发者在此处加入对退款异步通知的处理代码
status = 200
response_body = 'OK'
else
response_body = '未知 Event 类型'
end
rescue JSON::ParserError
response_body = 'JSON 解析失败'
end
response.status = status
response['Content-Type'] = 'text/plain; charset=utf-8'
response.body = response_body
end
end
server = WEBrick::HTTPServer.new(:Port => 8000)
server.mount '/webhooks', Webhooks
trap 'INT' do server.shutdown end
server.start
func webhook(w http.ResponseWriter, r *http.Request) {
if strings.ToUpper(r.Method) == "POST" {
buf := new(bytes.Buffer)
buf.ReadFrom(r.Body)
signature := r.Header.Get("x-pingplusplus-signature")
webhook, err := pingpp.ParseWebhooks(buf.Bytes())
fmt.Println(webhook.Type)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
fmt.Fprintf(w, "fail")
return
}
if webhook.Type == "order.succeeded" {
// TODO your code for charge
w.WriteHeader(http.StatusOK)
} else if webhook.Type == "order.refund.succeeded" {
// TODO your code for refund
w.WriteHeader(http.StatusOK)
} else {
w.WriteHeader(http.StatusInternalServerError)
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Pingpp.Models;
using System.IO;
namespace Example.Example
{
public class WebhooksDemo
{
public static Event Example()
{
var data = ReadFileToString(@"../../data.txt");
var evt = Webhooks.ParseWebhook(data);
Console.WriteLine(evt);
return evt;
}
public static string ReadFileToString(string path)
{
using (var sr = new StreamReader(path))
{
return sr.ReadToEnd();
}
}
}
}

以下是 Webhooks 通知地址配置的 order.succeeded 对象(以 alipay 渠道为例):

{
"id": "evt_hMGV2eR15fMupHUdDYibhLop",
"object": "event",
"type": "order.succeeded",
"livemode": true,
"created": 1472228975,
"data": {
"object": {
"id": "2001708140000017551",
"object": "order",
"created": 1502695388,
"livemode": true,
"paid": true,
"refunded": false,
"status": "paid",
"app": "app_1Gqj58ynP0mHeX1q",
"uid": "user_007",
"available_balance": 0,
"merchant_order_no": "2017081400000006",
"amount": 1000,
"actual_amount": 800,
"amount_refunded": 0,
"amount_paid": 0,
"coupon_amount": 200,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"client_ip": "127.0.0.1",
"time_paid": 1502695390,
"time_expire": 1502781019,
"coupon": "300317081415225500002001",
"description": "",
"metadata": {},
"charge_essentials": {
"channel": "alipay",
"transaction_no": null,
"failure_code": null,
"failure_msg": null,
"credential": {
"object": "credential",
"alipay": {
"orderInfo": "service=\"mobile.securitypay.pay\"&_input_charset=\"utf-8\"&notify_url=\"https%3A%2F%2Fapi.pingxx.com%2Fnotify%2Fcharges%2Fch_a5OinLGyzzjLXPSOy9rPKKiL\"&partner=\"2008010319263982\"&out_trade_no=\"123456789\"&subject=\"Your Subject\"&body=\"Your Body\"&total_fee=\"0.10\"&payment_type=\"1\"&seller_id=\"2088020116983982\"&it_b_pay=\"2016-03-18 11:43:41\"&sign=\"ODRJPReSwsH8om5fGTqvhia9453k4eUaaGMJTLMTnEYbBuceMyTathvKtdnUpsP6Q5%2F5jcEV887EdtBWi4tuMFHPQmm4dz1nG6b4Blafi6v2tvKaf8b0RiQTOycU4SxigugKoyfeR6E4AGA6uIzWUBRpkq%2BZf65eqT0qe712BJ0%3D\"&sign_type=\"RSA\""
}
},
"extra": {}
},
"receipt_app": "app_1Gqj58ynP0mHeX1q",
"service_app": "app_1Gqj58ynP0mHeX1q",
"available_methods": [
"balance"
],
"charges": {
"object": "list",
"url": "/v1/charges",
"has_more": false,
"data": [{
"id": "ch_a5OinLGyzzjLXPSOy9rPKKiL",
"object": "charge",
"created": 1458186221,
"livemode": true,
"paid": true,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "alipay",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {},
"time_paid": null,
"time_expire": 1458272621,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_a5OinLGyzzjLXPSOy9rPKKiL/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {},
"description": "Your Description"
}
]
}
}
},
"pending_webhooks": 0,
"request": "iar_jf1iT0fT0a00v1u5qDvb1u00"
}

第七步:验证 Webhooks 签名

签名简介

Ping++ 的 Webhooks 通知包含了签名字段,可以使用该签名验证 Webhooks 通知的合法性。签名放置在 header 的自定义字段 x-pingplusplus-signature 中,签名用 RSA 私钥对 Webhooks 通知使用 RSA-SHA256 算法进行签名,以 base64 格式输出。

验证签名

Ping++ 在管理平台中提供了 RSA 公钥,供验证签名,该公钥具体获取路径:点击管理平台右上角公司名称->企业面板->开发参数-> Ping++ 公钥。验证签名需要以下几步:

  1. 从 header 取出签名字段并对其进行 base64 解码。
  2. 获取 Webhooks 请求的原始数据。
  3. 将获取到的 Webhooks 通知、 Ping++ 管理平台提供的 RSA 公钥、和 base64 解码后的签名三者一同放入 RSA 的签名函数中进行非对称的签名运算,来判断签名是否验证通过。 Ping++ 提供了验证签名的 Demo Demo Demo Demo Demo Demo Demo ,放在 SDK 的 example 里供参考,我们在此不再赘述。

订单查询

Ping++ 管理平台提供详细的订单信息和 Webhooks 功能,所以查询功能相对来说并不是那么必要。如果商户本身由于某种原因导致 Webhooks 没有收到或者延缓更新时,可以主动调用订单查询接口来获得交易的状态。

单笔订单查询

// 商品订单查询
$order_id = '2011708070000007521';
try {
$pay = \Pingpp\Order::retrieve($order_id);
echo $pay;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
//查询商品的支付charge对象
try {
$charge_info = \Pingpp\Order::chargeRetrieve('2011708070000007521','ch_eDaTe9OG0qPOz14S4KWH80eP');
echo $charge_info;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
//查询单个 order
Order.retrieve("2001708220000281981");
//查询订单中 Charge 对象
Order.retrieveCharge("2001708220000221911", "ch_88mbTKu9mbn9mfT4KSCiHiX5");
//查询单个 order
pingpp.orders.retrieve(
// 通过 order 对象的 id 查询一个已创建的 order 对象
"2001709010000002851",// ORDER ID
function(err, order) {
if (err!=null){
console.log("pingpp.orders.retrieve fail:",err)
}
// YOUR CODE
}
);
//查询订单中 Charge 对象
pingpp.orders.retrieveCharge(
"2001708220000221911", // orderId
"ch_88mbTKu9mbn9mfT4KSCiHiX5", // chargeId
function(err, charge) {
if (err!=null){
console.log("pingpp.orders.retrieveCharge fail:",err)
}
// YOUR CODE
}
);
//查询单个 order
retrieve_order = pingpp.Order.retrieve("2001708150000313781")
//查询订单中 Charge 对象
pingpp.Order.charge_retrieve("2001708150000313781", "ch_SS0GqLWrrD00Ga1e1GW9WXjP"))
//查询单个 order
Pingpp::Order.retrieve(existed_order_id)
//查询订单中 Charge 对象
Pingpp::Order.retrieve_charge(
order_id,
charge_id
)
//查询单个 order
func (c *OrderDemo) Get() (*pingpp.Order, error) {
return order.Get(c.demoOrderID)
}
//查询订单中 Charge 对象
func (c *OrderDemo) Charge() (*pingpp.Charge, error) {
return order.Charge(c.demoOrderID, c.demoChargeID)
}
//查询单个 order
Order.Retrieve(or.Id)
//查询订单中 Charge 对象
Order.ChargeRetrieve("2011708140000074741", "ch_OanvTSaPOqjDT00CWLbfz54C")

订单列表查询

//订单列表查询
$params = ['app' => APP_ID];
try {
$ors = \Pingpp\Order::all($params);
echo $ors;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
//订单的支付charge对象列表
try {
$params = [
'page' => 1,
'per_page' => 10,
];
$charge_info = \Pingpp\Order::chargeList('2011708070000007521', $params);
echo $charge_info;
} catch (\Pingpp\Error\Base $e) {
if ($e->getHttpStatus() != null) {
header('Status: ' . $e->getHttpStatus());
echo $e->getHttpBody();
} else {
echo $e->getMessage();
}
}
exit;
//订单列表查询
Map<String, Object> params = new HashMap<String, Object>();
params.put("page", 1);
params.put("per_page", 3);
params.put("paid", false);
params.put("app", PingppAccountTestData.getAppID());
params.put("refunded", false);
OrderCollection objs = Order.list(params);
//订单的支付charge对象列表
Map<String, Object> params = new HashMap<>();
params.put("page", 1);
params.put("per_page", 10);
// 查询订单中 Charge 列表
// 参数一: orderId
// 参数二: params
ChargeCollection objs = Order.chargeList("2001708220000221911", params);
//订单列表查询
pingpp.orders.list(
{ page: 1 ,app:APP_ID},
function(err, order) {
if (err!=null){
console.log("pingpp.orders.retrieve fail:",err)
}
// YOUR CODE
}
);
//订单的支付charge对象列表
pingpp.orders.listCharges(
"2001708220000221911", // orderId
{'page': 1, 'per_page':3},
function(err, charges) {
if (err!=null){
console.log("pingpp.orders.listCharges fail:",err)
}
// YOUR CODE
}
);
//订单列表查询
order_list = pingpp.Order.list(app=app_id)
//订单的支付charge对象列表
pingpp.Order.charge_list("2001708150000313781")
//订单列表查询
o = Pingpp::Order.list(
{
:app => get_app_id,
:per_page => 3,
:paid => true,
:refunded => false,
}
)
//订单的支付charge对象列表
order_id, _ = existed_charge_id_of_order
o = Pingpp::Order.list_charges(
order_id,
{ :per_page => 3, :page => 1 }
)
//订单列表查询
func (c *OrderDemo) List() (*pingpp.OrderList, error) {
params := &pingpp.PagingParams{}
params.Filters.AddFilter("app", "", c.demoAppID)
params.Filters.AddFilter("page", "", "1") //取第一页数据
params.Filters.AddFilter("per_page", "", "2") //每页两个Order对象
//params.Filters.AddFilter("created", "", "1475127952")
params.Filters.AddFilter("paid", "", "true")
return order.List(params)
}
//订单的支付charge对象列表
func (c *OrderDemo) ChargeList() (*pingpp.ChargeList, error) {
params := &pingpp.PagingParams{}
params.Filters.AddFilter("page", "", "1") //取第一页数据
params.Filters.AddFilter("per_page", "", "2") //每页两个Order对象
return order.ChargeList(c.demoOrderID, params)
}
//订单列表查询
Order.List(new Dictionary<string, object>
{
{"app", appId},
{"paid", true}
}
);
//订单的支付charge对象列表
Order.ChargeList(or.Id);

注意事项

  1. 接收到 Webhooks 说明交易成功,交易失败不会发送 Webhooks,未成功的交易结果直接在客户端返回。
  2. 你需要在 Ping++ 的管理平台里填写 Webhooks 通知地址,详见 Webhooks 配置说明,你的服务器需要监听这个地址并且接收 Webhooks 通知,接收到 Webhooks 通知后需给 Ping++ 返回服务器状态 2xx 。此时事件类型是 order.succeeded,其字段 data 包含了 object 字段, object 字段的值是一个 Order 对象。
  3. 若你的服务器未正确返回 2xx,Ping++ 服务器会在 25 小时内向你的服务器不断重发通知,最多 10 次。Webhooks 首次是即时推送,重试通知时间间隔为 5s、10s、2min、5min、10min、30min、1h、2h、6h、15h,直到你正确回复状态 2xx 或者超过最大重发次数,Ping++ 将不再发送。
  4. 若同时配置了 order.succeeded 事件(必选)和 charge.succeeded 事件(可选),若是平台收款,则支付完成时平台会同时收到 order.succeeded 和 charge.succeeded 事件的推送;若是子商户收款,则支付完成时平台只会收到 order.succeeded 事件推送,子商户会收到 charge.succeeded 事件的推送(在已配置 Webhooks URL 的情况下)。
  5. 你的服务器必须以 Ping++ 的 Webhooks 通知的结果作为交易结果,不可用客户端获得的结果作为支付成功与否的判断条件。
  6. 如果没有收到 Webhooks 通知,可以调用 Ping++ 查询方法发起交易查询,该查询结果可以作为交易结果。

下一步订单取消