请求地址:(下单网关):https://api.payflowshub.com/api/gateway
请求方式:GET|POST 请求参数:
| 说明 | 参数 | 类型 | 是否必填 | 签名 | 描述 | 示例值 |
|---|---|---|---|---|---|---|
| 商户配置 | user_id | string | 是 | 否 | 平台分配的商户ID | 200000 |
| sign_type | string | 是 | 否 | 商户生成签名字符串所使用的签名算法类型,目前支持MD5 | MD5 | |
| notify_url | string | 是 | 是 | 服务器异步回调地址 | https://www.baidui.com | |
| return_url | string | 是 | 是 | 页面同步跳转地址 | https://www.baidui.com | |
| 接口公共参数 | method | string | 是 | 否 | 接口名称 | topay |
| sign | string | 是 | 否 | 商户请求参数的签名串,详见签名 | 详见示例 | |
| 订单必传参数 | order_id | string | 是 | 是 | 商户平台唯一订单号 | 2023072011ywqrMDN3gLmw |
| order_amount | string | 是 | 是 | 下单金额1.00精确两位数 | 0.02 | |
| pay_type | string | 是 | 是 | 选择的支付方式 | 支付方式标识,例:aliscan | |
| 自动获取参数 | client_ip | string | 是 | 否 | 客户端的ip地址 | 1.83.1.74 |
| client_system | string | 是 | 否 | 发起支付客户端的设备类型(pc,android,ios) | pc | |
| 订单可选参数 | order_name | string | 否 | 否 | 下单的商品名称 | orderQuery |
| remarks | string | 否 | 否 | 订单备注,此字段按照原样返回 | 测试 | |
| return_type | string | 否 | 否 | 返回类型 json或html,默认为json | json |
use vhpay\lib\TradeServer;
include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'lib/TradeServer.php';
//获取配置
$config = include_once "./config.php";
$server = new TradeServer($config);
//订单必传参数
$input['order_id'] = uniqid(); //订单id
$input['order_amount'] = "1.0"; //下单金额,单位元
$input['pay_type'] = "aliscan"; //支付方式
//程序获取参数
$input['client_ip'] = $server->ip();
$input['client_system'] = $server->browser();
//接口名称,请阅读开发文档
$input['method'] = 'topay';
//配置参数
$input['user_id'] = $server->config['user_id'];
$input['notify_url'] = strtolower($server->config['notify_url']); //服务器异步回调地址
$input['return_url'] = strtolower($server->config['return_url']); //页面同步跳转地址
//设置需要签名的参数
$server->signRule = ['order_id', 'order_amount', 'pay_type', 'notify_url', 'return_url'];
$input['sign'] = $server->setSign($input, $server->config['token']);
$input['sign_type'] = $server->config['sign_type'];
echo $server->unifiedOrder($input);
notify_url=http://XXXXXX/users/testNotify&order_amount=2000&order_id=1686992740623&pay_type=zfbklhb&return_url=http://XXXXXXX/users/testNotify&key=XXXX
签名 大写!!
https://api.payflowshub.com/api/gateway?method=topay&order_id=5f19097bb032f&order_amount=1.0&pay_type=aliscan&user_id
=200000¬ify_url=https://test.xvpay.cn/vhscan/notify.php&return_url=https://test.xvpay.cn&client_ip=127.0.0.1&client_system=pc&sign=ACADEB2D7B050CB9C5503E354AA0A85D
提示:支付方式为支付宝App(pay_type=aliapp)支付时,只会放回json数据,返回qrcode_url返回值为App中请求支付orderInfo参数
| 参数 | 类型 | 描述 | 示例值 |
|---|---|---|---|
| code | string | 网关返回状态码:10000为成功,20000为失败 | 10000 |
| msg | string | 网关返回描述;SUCCESS:响应成功 | SUCCESS |
| pay_type | string | 订单的支付方式 | 支付方式标识,例:aliscan |
| trade_no | string | CobraPay支付订单号 | 2023072011PjnZrBK41w9y |
| total_amount | string | 交易金额 | 0.02 |
| qrcode_url | string | 支付二维码地址 | https://api.payflowshub.com/uploads/0e4d0755c8858ae580795e7fa4e715eb.png |
| url | string | 支付页面地址 | https://api.payflowshub.com/tmp/0e4d0755c8858ae580795e7fa4e715eb.html |
| pay_url | string | 支付页面地址 | https://api.payflowshub.com/tmp/0e4d0755c8858ae580795e7fa4e715eb.html |
| create_time | string | 订单创建时间 | 2023-01-21 15:54:08 |
| trade_status | string | 订单支付状态, WAIT:等待支付 | WAIT |
订单金额校对,以total_amount为准!!!
{
code: 10000,
msg: "SUCCESS",
pay_type: "aliscan",
trade_no: "2023072309qQgQY5gVlgKr",
buyer_pay_amount: "1.00",
total_amount: "1.00",
qrcode_url: "https://api.payflowshub.com/uploads/bd5ec298c28ea6ed6e50c47f38ae4560.png",
url: "https://api.payflowshub.com/tmp/bd5ec298c28ea6ed6e50c47f38ae4560.html",
pay_url: "https://api.payflowshub.com/tmp/bd5ec298c28ea6ed6e50c47f38ae4560.html",
create_time: "2023-07-23 09:28:24",
trade_status: "WAIT"
}
{
code: 20000,
msg: "订单创建失败"
}
| 参数 | 类型 | 描述 | 示例值 | 签名 |
|---|---|---|---|---|
| user_id | string | 码商id | 200000 | |
| trade_no | string | CobraPay订单号 | 2023072011PjnZrBK41w9y | |
| order_id | string | 商家订单号 | 123 | 是 |
| buyer_pay_amount | string | 买家付款的金额 | 0.02 | |
| order_amount | string | 交易金额 | 0.02 | 是 |
| pay_type | string | 订单的支付方式 | aliscan | 是 |
| success_time | string | 订单支付成功时间 | 2023-01-21 15:54:08 | |
| account_id | string | 码商收款账户id | 5 | |
| trade_status | string | 订单支付状态, WAIT:等待支付;SUCCESS:支付成功;FAIL:支付失败 | SUCCESS | |
| return_url | string | 网站跳转地址 | https://www.baidu.com | 是 |
| notify_url | string | 回调网址 | https://www.baidu.com | 是 |
| sign | string | 签名(详见签名说明) | B56C9DC23141595839B31D015460010A |
订单金额校对,以order_amount为准!!!
{
'user_id' : '200000',
'trade_no' : '2023080416GR1gORnjyKw8',
'order_id' : '123213',
'buyer_pay_amount' : '100.00',
'order_amount' : '100.00',
'pay_type' : 'aliscan',
'success_time' : '1596530254',
'trade_status' : 'SUCCESS',
'account_id' : '5',
'return_url' : 'https://www.baidu.com',
'notify_url' : 'https://www.baidu.com',
'sign' : '53F9F816D478D324E7F19BC5C78EA8ED',
}
验签说明 接口中返回的notify_url,order_id,order_amount,return_url,pay_type 将这5个参数按字典序排序参数,详见签名说明
notify_url=http://XXX/users/testNotify&order_amount=2000.00&order_id=1686992113220&pay_type=zfbklhb&return_url=http://XXXX/users/testNotify&key=XXXX
注意: 验签成功后 请返回 success; 避免系统重复发送异步通知。异步通知接口示例如下
$arr = $_POST;
//TODO 1、进行签名验证
$config = include_once "./config.php";
$server = new TradeServer($config);
//设置支付接口需要签名的参数
$server->signRule = ['order_id', 'order_amount', 'pay_type', 'notify_url', 'return_url'];
$arr['notify_url'] = $config['notify_url'];
$result = $server->checkSign($arr, $config);
if($result){
if($arr['trade_status'] == 'SUCCESS') {
//TODO 2、处理业务逻辑
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的order_amount与通知时获取的total_amount为一致的
//如果有做过处理,不执行商户的业务程序
//TODO 3、告知上游支付,异同消息接收成功
echo "SUCCESS"; //请不要修改或删除
}
}
采用商户的token进行签名和验签;
//签名步骤一:按字典序排序参数
ksort($data);
$string = $this->toUrlParams($data);
//签名步骤二:在string后加入商户token
$string = $string . "&key=" . $token;
//签名步骤三:MD5加密
$string = md5($string);
//签名步骤四:所有字符转为大写
$result = strtoupper($string);
public function toUrlParams($data)
{
$buff = "";
foreach ($data as $k => $v) {
if (in_array($k, $this->signRule)) {
$buff .= $k . "=" . $v . "&";
}
}
$buff = trim($buff, "&");
return $buff;
}
请求地址:https://api.payflowshub.com/api/gateway 请求方式:GET|POST
| 参数 | 类型 | 是否必填 | 签名 | 描述 | 示例值 |
|---|---|---|---|---|---|
| user_id | string | 是 | 是 | 平台分配的商户ID | 200000 |
| type | String | 是 | 是 | type=0平台订单号 type =1 商户订单号 | 0 |
| trade_no | string | 是 | 是 | 平台唯一订单号 | 2023072011ywqrMDN3gLmw |
| method | string | 是 | 否 | 接口名称 | orderQuery |
| sign | string | 是 | 否 | 签名(详见签名说明)。只是为了保证user_id和token一致,接口返回数据不需要验签 | B56C9DC23141595839B31D015460010A |
| 参数 | 类型 | 描述 | 示例值 |
|---|---|---|---|
| code | string | 网关返回状态码:10000为成功,20000为失败 | 10000 |
| msg | string | 网关返回描述;SUCCESS:响应成功 | SUCCESS |
| trade_no | string | 平台订单号 | 2023072011PjnZrBK41w9y |
| order_id | string | 商户订单号 | 6073eb9220047 |
| order_amount | string | 提交金额 | 0.02 |
| buyer_pay_amount | string | 交易金额 | 0.02 |
| create_time | string | 订单创建时间 | 2023-01-21 15:54:08 |
| success_time | string | 订单支付成功时间,未成功不返回 | 2023-01-21 15:54:08 |
| pay_type | string | 订单的支付方式 | wgpay |
| trade_status | string | 订单支付状态, WAIT:等待支付;SUCCESS:支付成功;FAIL:支付失败 | SUCCESS |
{
"code": 10000,
"msg": "SUCCESS",
"trade_no": "2023072311ywqwwzxWZlv7",
"order_id": "6073eb9220047",
"buyer_pay_amount": "1.00",
"order_amount": "1.00",
"create_time": "2023-07-23 11:13:11",
"pay_type": "wgpay",
"trade_status": "WAIT"
}
{
"code": 20000,
"msg": "订单不存在"
}
请求地址:(下单网关):https://api.payflowshub.com/api/drawing
请求方式:GET|POST
请求参数:
| 说明 | 参数 | 类型 | 是否必填 | 签名 | 描述 | 示例值 |
|---|---|---|---|---|---|---|
| 商户配置 | user_id | string | 是 | 是 | 平台分配的商户ID | 200000 |
| notify_url | string | 是 | 是 | 服务器异步回调地址 | https://www.baidui.com | |
| sign | string | 是 | 否 | 商户请求参数的签名串,详见签名 | 详见示例 | |
| 订单必传参数 | apiorder_id | string | 是 | 是 | 商户提现订单号 | 2023072011ywqrMDN3gLmw |
| money | string | 是 | 是 | 下单金额1.00精确两位数 | 如500.02 | |
| bank_name | string | 是 | 是 | 银行名称 | 如中国银行、如支付宝出款,填写支付宝 | |
| bank_user_name | string | 是 | 是 | 收款人名称 | 如张三 | |
| card_number | string | 是 | 是 | 银行卡号/支付宝号 | 9999 | |
| bank_account | string | 是 | 是 | 出款源 | 银行卡出款 bank 、支付宝出款填zfb | |
| order_remarks | string | 是 | 是 | 提现订单备注 | 如无,填空 | |
| phone | string | 是 | 是 | 手机号 | 如无,填空 |
{
"user_id": "300001",
"apiorder_id": "apitx_1711607471494",
"bank_name": "支付宝",
"bank_user_name": "李四",
"card_number": "9990990",
"money": "5000.00",
"notify_url": "http://www.test.com/users/testNotify",
"order_remarks": "",
"bank_account": "zfb",
"phone":"889977654",
"sign": "E354F6D0D724AF8F55410C8FA22BBBFF"
}
apiorder_id=apitx_1711607471494&bank_account=zfb&bank_name=支付宝&bank_user_name=李四&card_number=9990990&money=5000.00¬ify_url=http://www.test.com/users/testNotify&order_remarks=&phone=889977654&user_id=300012&key=XXXXXXXXXXX
签名 大写!!
提示:支付方式为支付宝App(pay_type=aliapp)支付时,只会放回json数据,返回qrcode_url返回值为App中请求支付orderInfo参数
| 参数 | 类型 | 描述 | 示例值 |
|---|---|---|---|
| code | string | 网关返回状态码:1为成功 0为失败 | 1 成功 0 失败 |
| message | string | 网关返回描述;SUCCESS:响应成功 | SUCCESS |
| orderId | string | 提现订单号 | 如,daifu16849479355pYn |
| service | string | 提现手续费 | 如5.00 |
{
"code": 1,
"message": "提现订单创建成功",
"data": {
"orderId": "daifu16849479355pYn",
"service": "5.00"
}
}
{
"code": 0,
"message": "签名错误",
}
| 参数 | 类型 | 描述 | 示例值 | 签名 |
|---|---|---|---|---|
| user_id | string | 商户用户id | 200000 | 是 |
| apiorder_id | string | 商户平台提现订单 | 2023072011PjnZrBK41w9y | 是 |
| oredr_df | string | 系统提现订单号 | 2023072011PjnZrBK41w9y | 是 |
| money | string | 提现金额 | 500.00 | 是 |
| service | string | 手续费 | 5.00 | 是 |
| remarks | string | 提现备注 | 提现订单已处理 | 是 |
| success_time | string | 提现处理时间 | 2023-01-21 15:54:08 | 是 |
| status | string | 提现状态 | 1 未处理,2,提现成功,3.提现失败 | 是 |
| bank_name | string | 银行名称 | 中国银行 | 是 |
| bank_user_name | string | 收款人姓名 | 张三 | 是 |
| card_number | string | 银行卡号 | 9999999 | 是 |
| sign | string | 签名(详见签名说明) | B56C9DC23141595839B31D015460010A |
{
'user_id' : '200000',
'apiorder_id' : '2023080416GR1gORnjyKw8',
'oredr_df' : '123213',
'money' : '100.00',
'service' : '5.00',
'remarks' : '提现订单已处理',
'success_time' : '2023-01-21 15:54:08',
'status' : '2,
'bank_name' : '中国银行',
'bank_user_name' : '张三',
'card_number' : '9999999999',
'sign' : '53F9F816D478D324E7F19BC5C78EA8ED',
}
请返回 success; 避免系统重复发送异步通知。异步通知接口示例如下
请求地址:https://api.payflowshub.com/api/drawingOrderStatus
请求方式:GET|POST
| 参数 | 类型 | 是否必填 | 签名 | 描述 | 示例值 |
|---|---|---|---|---|---|
| user_id | string | 是 | 是 | 平台分配的商户ID | 200000 |
| apiorder_id | String | 是 | 是 | 商户提现订单号, | 0 |
| sign | string | 是 | 否 | 签名(详见签名说明)。只是为了保证user_id和token一致,接口返回数据不需要验签 | B56C9DC23141595839B31D015460010A |
| 参数 | 类型 | 描述 | 示例值 |
|---|---|---|---|
| code | string | 网关返回状态码:1为成功,0为失败 | 1 |
| message | string | 查询成功 | 查询成功 |
| apiorder_id | string | 商户提现订单号 | 2023072011PjnZrBK41w9y |
| status | string | 1 未处理 2,提现成功 3 提现失败 | 2 |
| create_time | string | 提交金额 | 2023-05-25 01:37:37 |
| compelte_time | string | 处理时间 | 2023-05-25 01:37:37 |
| money | string | 提现金额 | 500.00 |
| desc | string | 备注 | 5.00 |
| service | string | 提现手续费 | 测试备注 |
{
"code": 1,
"message": "查询成功",
"data": {
"apiorder_id": "apitx_1684949842550",
"status": 2,
"create_time": "2023-05-25 01:37:22",
"compelte_time": "2023-05-25 01:37:37",
"money": "900.00",
"desc": "测试金额",
"service": "5.00"
}
}
请求地址:https://api.payflowshub.com/api/getUserBalance
请求方式:GET|POST
| 参数 | 类型 | 是否必填 | 签名 | 描述 | 示例值 |
|---|---|---|---|---|---|
| user_id | string | 是 | 是 | 平台分配的商户ID | 200000 |
| sign | string | 是 | 否 | 签名(详见签名说明)。只是为了保证user_id和token一致,接口返回数据不需要验签 | B56C9DC23141595839B31D015460010A |
| 参数 | 类型 | 描述 | 示例值 |
|---|---|---|---|
| code | string | 网关返回状态码:1为成功,0为失败 | 1 |
| message | string | 查询成功 | 查询成功 |
| balance | string | 商户余额 | 5706.36 |
| freezeBalance | string | 商户冻结余额 | "17623.00" |
{
"code": 1,
"message": "查询成功",
"data": {
"balance": "5706.36",
"freezeBalance": "17623.00"
}
}