接入指引
请求使用 POST 表单,Content-Type 为 application/x-www-form-urlencoded;下面的 JSON 仅用于展示参数,不表示接口接受 JSON 请求体。网关请使用本文各章节列出的地址。
示例商户号、订单号、地址和签名均为占位数据,不能直接用于真实下单。sign/pay_md5sign 请按实际参数与商户密钥计算;示例响应中的中文消息保留接口原值。
代付下单返回 status=success 只表示申请已受理,不代表出款成功。查询需同时满足 status=success、refCode=1 才是成功。
下载文件包含当前语言的文档与内嵌样式,可离线打开;不包含商户真实 APIKEY。切换语言后可重新下载对应版本。
签名与验签
字段名按升序排序,排除签名字段和 PHP empty() 判定为空的值(包括字符串 0),拼接 key=value&,最后追加 key=商户APIKEY,计算 MD5 并转大写。签名使用原始值,不要先做 URL 编码或调整金额格式;传输时再进行表单编码。
function makeSign($params, $apiKey)
{
unset($params['pay_md5sign'], $params['sign']);
ksort($params);
$source = '';
foreach ($params as $name => $value) {
if (!empty($value)) {
$source .= $name . '=' . $value . '&';
}
}
return strtoupper(md5($source . 'key=' . $apiKey));
}代收下单只使用以下 7 个字段参与签名;type、pay_productname 等附加字段不加入。代收查询只签 pay_memberid 和 pay_orderid。
pay_memberid, pay_orderid, pay_amount, pay_applydate,
pay_bankcode, pay_notifyurl, pay_callbackurl代付下单使用实际提交的非空表单字段参与签名,排除 pay_md5sign;代付查询只签 mchid、out_trade_no;余额查询建议仅提交 mchid、pay_md5sign,签名只计算 mchid。
回调签名字段名是 sign。代收通知使用 memberid、orderid、transaction_id、amount、datetime、returncode 验签,attach 不参与;代付通知按实际通知字段排除 sign 后验签。查询响应验签同样先移除 sign。
支付请求
| 属性 | 内容 |
|---|---|
| 版本 | 1.0 |
| 网关 | https://merchant.88pay.net/Pay_Index.html |
| 请求方式 | POST |
| 参数名称 | 参数含义 | 是否参与签名 | 是否必填 | 参数说明 |
|---|---|---|---|---|
| pay_memberid | 商户号 | 是 | 是 | 平台分配商户号 |
| pay_orderid | 商户订单号 | 是 | 是 | 订单号唯一 |
| pay_applydate | 提交时间 | 是 | 是 | 时间格式:2018-12-28 18:18:18 |
| pay_bankcode | 通道编码 | 是 | 是 | 开发文档[附件]银行编码参考,或通道费率中查看 |
| pay_notifyurl | 异步回调 | 是 | 是 | 请给出有效的地址,地址后可以携带自定义get(?a=1&b=2)参数。(POST返回数据) |
| pay_callbackurl | 同步回调 | 是 | 是 | 请给出有效的地址,地址后可以携带自定义get(?a=1&b=2)参数。(POST返回数据) |
| pay_amount | 订单金额 | 是 | 是 | |
| pay_md5sign | MD5数据签名 | 否 | 是 | 请看MD5签名处理 |
| pay_attach | 附加字段 | 否 | 否 | 此字段在返回时按原样返回 |
| pay_productname | 商品名称 | 否 | 否 | 商品名称 |
| pay_productnum | 商品数量 | 否 | 否 | 商品数量 |
| pay_productdesc | 商品描述 | 否 | 否 | 商品描述 |
| pay_producturl | 商户链接地址 | 否 | 否 | 商户链接地址 |
| type | 返回数据格式 | 否 | 否 | 返回数据的格式,如果不传则返回html页面,如果值=json 则返回json串 |
代收可能返回收银台 HTML 或跳转页面;type=json 及 JSON 返回格式是否可用取决于所分配通道。下面仅展示支持 JSON 返回通道的示例。查询以 trade_state=SUCCESS 判断支付成功,returncode=00 本身不代表已支付。
请求参数示例(以表单提交)
{
"pay_memberid": "10000",
"pay_orderid": "DEMO_COLLECT_001",
"pay_amount": "100.00",
"pay_applydate": "2026-10-11 12:00:00",
"pay_bankcode": "YOUR_CHANNEL_CODE",
"pay_notifyurl": "https://merchant.example/notify",
"pay_callbackurl": "https://merchant.example/return",
"pay_md5sign": "CALCULATE_WITH_YOUR_APIKEY",
"type": "json"
}成功响应示例
{
"status": "1",
"msg": "下单成功",
"pay_amount": "100.00",
"pay_orderid": "DEMO_PLATFORM_COLLECT",
"payUrl": "https://cashier.example/pay/DEMO"
}失败响应示例
{
"status": "error",
"msg": "下单失败",
"content": "Reason for error"
}同步通知
| 属性 | 内容 |
|---|---|
| 版本 | 1.0 |
| 网关 | pay_callbackurl |
| 请求方式 | POST |
| 参数名称 | 参数含义 | 是否参与签名 | 参数说明 |
|---|---|---|---|
| memberid | 商户号 | 是 | 平台分配商户号 |
| orderid | 商户订单号 | 是 | 订单号唯一 |
| amount | 订单金额 | 是 | |
| transaction_id | 交易流水号 | 是 | 交易流水号 |
| datetime | 交易成功时间 | 是 | 时间格式:20261011120500 |
| returncode | 交易状态 | 是 | “00”=success |
| attach | 扩展返回 | 否 | 商户附加数据返回 |
| sign | MD5数据签名 | 否 | 请看MD5签名处理 |
可通过订单查询接口,查询订单是否交易成功!
同步跳转仅用于展示结果,不要仅凭浏览器跳转给用户加款;请以验签通过的异步通知或主动查询为准。
通知参数示例
{
"memberid": "10000",
"orderid": "DEMO_COLLECT_001",
"transaction_id": "DEMO_PLATFORM_COLLECT",
"amount": "100.00",
"datetime": "20261011120500",
"returncode": "00",
"sign": "CALCULATE_WITH_YOUR_APIKEY",
"attach": ""
}异步通知
| 属性 | 内容 |
|---|---|
| 版本 | 1.0 |
| 网关 | pay_notifyurl |
| 请求方式 | POST |
| 参数名称 | 参数含义 | 是否参与签名 | 参数说明 |
|---|---|---|---|
| memberid | 商户号 | 是 | 平台分配商户号 |
| orderid | 商户订单号 | 是 | 订单号唯一 |
| amount | 订单金额 | 是 | |
| transaction_id | 交易流水号 | 是 | 交易流水号 |
| datetime | 交易成功时间 | 是 | 时间格式:20261011120500 |
| returncode | 交易状态 | 是 | “00”=success |
| attach | 扩展返回 | 否 | 商户附加数据返回 |
| sign | MD5数据签名 | 否 | 请看MD5签名处理 |
异步通知:先验签,再核对商户、订单号和金额,按订单幂等更新;处理成功后响应纯文本 OK,不要返回 HTML。代收 returncode=00 为支付成功;代付 returncode=00 为成功,11 为失败。通知参数用表单发送。
通知参数示例
{
"memberid": "10000",
"orderid": "DEMO_COLLECT_001",
"transaction_id": "DEMO_PLATFORM_COLLECT",
"amount": "100.00",
"datetime": "20261011120500",
"returncode": "00",
"sign": "CALCULATE_WITH_YOUR_APIKEY",
"attach": ""
}响应示例
OK支付订单查询
| 属性 | 内容 |
|---|---|
| 版本 | 1.0 |
| 网关 | https://merchant.88pay.net/Pay_Trade_query.html |
| 请求方式 | POST |
| 参数名称 | 参数含义 | 是否必填 | 是否参与签名 | 参数说明 |
|---|---|---|---|---|
| pay_memberid | 商户号 | 是 | 是 | 平台分配商户号 |
| pay_orderid | 商户订单号 | 是 | 是 | 订单号唯一 |
| pay_md5sign | MD5数据签名 | 是 | 否 | 请看MD5签名处理 |
代收可能返回收银台 HTML 或跳转页面;type=json 及 JSON 返回格式是否可用取决于所分配通道。下面仅展示支持 JSON 返回通道的示例。查询以 trade_state=SUCCESS 判断支付成功,returncode=00 本身不代表已支付。
请求参数示例(以表单提交)
{
"pay_memberid": "10000",
"pay_orderid": "DEMO_COLLECT_001",
"pay_md5sign": "CALCULATE_WITH_YOUR_APIKEY"
}成功响应示例
{
"memberid": "10000",
"orderid": "DEMO_COLLECT_001",
"amount": "100.00",
"time_end": "2026-10-11 12:05:00",
"transaction_id": "DEMO_PLATFORM_COLLECT",
"returncode": "00",
"trade_state": "SUCCESS",
"sign": "CALCULATE_WITH_YOUR_APIKEY"
}响应示例
{
"memberid": "10000",
"orderid": "DEMO_COLLECT_001",
"amount": "100.00",
"time_end": "1970-01-01 00:00:00",
"transaction_id": "DEMO_PLATFORM_COLLECT",
"returncode": "00",
"trade_state": "NOTPAY",
"sign": "CALCULATE_WITH_YOUR_APIKEY"
}代付接口
| 属性 | 内容 |
|---|---|
| 版本 | 1.0 |
| 网关 | https://merchant.88pay.net/Payment_Dfpay_add.html |
| 请求方式 | POST |
| 参数名称 | 参数含义 | 是否必填 | 是否参与签名 | 参数说明 |
|---|---|---|---|---|
| mchid | 商户号 | 是 | 是 | 平台分配商户号 |
| out_trade_no | 商户代付订单号 | 是 | 是 | length 20 |
| money | 代付金额 | 是 | 是 | |
| bankname | 银行编码 | 是 | 是 | 银行编码 |
| subbranch | 支行名称 | 否 | 是 | 支行名称 |
| accountname | 开户名 | 是 | 是 | 开户名 |
| cardnumber | 银行卡号 | 是 | 是 | 银行卡号 |
| ifsc | IFSC | 是 | 是 | 印度银行 IFSC 编码,必填,不能为空,参与签名。 |
| province | 所属省 | 否 | 是 | 所属省 |
| city | 所属市 | 否 | 是 | 所属市 |
| notifyurl | 异步回调 | 否 | 是 | 请给出有效的地址,地址后可以携带自定义get(?a=1&b=2)参数。(POST返回数据) |
| pay_md5sign | MD5数据签名 | 是 | 否 | 请看MD5签名处理 |
代付下单返回 status=success 只表示申请已受理,不代表出款成功。查询需同时满足 status=success、refCode=1 才是成功。
请求参数示例(以表单提交)
{
"mchid": "10000",
"out_trade_no": "DEMO_PAYOUT_001",
"money": "100.00",
"bankname": "HDFC Bank",
"subbranch": "bank_branch",
"accountname": "DEMO CUSTOMER",
"cardnumber": "000000000000",
"ifsc": "HDFC0000001",
"province": "-",
"city": "-",
"notifyurl": "https://merchant.example/payout/notify",
"pay_md5sign": "CALCULATE_WITH_YOUR_APIKEY"
}成功响应示例
{
"status": "success",
"msg": "代付申请成功",
"transaction_id": "DEMO_PLATFORM_PAYOUT"
}失败响应示例
{
"status": "error",
"msg": "金额错误,可用余额不足!",
"data": []
}代付异步通知
| 属性 | 内容 |
|---|---|
| 版本 | 1.0 |
| 网关 | notifyurl |
| 请求方式 | POST |
| 参数名称 | 参数含义 | 是否参与签名 | 参数说明 |
|---|---|---|---|
| memberid | 商户号 | 是 | 平台分配商户号 |
| orderid | 商户订单号 | 是 | 订单号唯一 |
| amount | 订单金额 | 是 | |
| transaction_id | 交易流水号 | 是 | 交易流水号 |
| datetime | 交易成功时间 | 是 | 时间格式:2018-12-28 18:18:18 |
| returncode | 交易状态 | 是 | “00”=success,“11”=fail |
| sign | MD5数据签名 | 否 | 请看MD5签名处理 |
异步通知:先验签,再核对商户、订单号和金额,按订单幂等更新;处理成功后响应纯文本 OK,不要返回 HTML。代收 returncode=00 为支付成功;代付 returncode=00 为成功,11 为失败。通知参数用表单发送。
通知参数示例
{
"memberid": "10000",
"orderid": "DEMO_PAYOUT_001",
"amount": "100000.00",
"transaction_id": "DEMO_PLATFORM_PAYOUT",
"datetime": "2026-10-11 12:05:00",
"returncode": "00",
"sign": "CALCULATE_WITH_YOUR_APIKEY"
}通知参数示例
{
"memberid": "10000",
"orderid": "DEMO_PAYOUT_001",
"amount": "100000.00",
"transaction_id": "DEMO_PLATFORM_PAYOUT",
"datetime": "2026-10-11 12:05:00",
"returncode": "11",
"sign": "CALCULATE_WITH_YOUR_APIKEY"
}响应示例
OK代付订单查询
| 属性 | 内容 |
|---|---|
| 版本 | 1.0 |
| 网关 | https://merchant.88pay.net/Payment_Dfpay_query.html |
| 请求方式 | POST |
| 参数名称 | 参数含义 | 是否参与签名 | 参数说明 |
|---|---|---|---|
| out_trade_no | 商户代付订单号 | 是 | 订单号唯一 |
| mchid | 商户号 | 是 | 平台分配商户号 |
| pay_md5sign | MD5数据签名 | 否 | 请看MD5签名处理 |
| 参数名称 | 参数含义 | 是否参与签名 | 参数说明 |
|---|---|---|---|
| status | 提现状态 | 是 | success:请求成功,不代表业务成功 error:请求失败 |
| msg | 状态描述 | 是 | 代付结果描述 |
| mchid | 商户号 | 是 | status=success 返回 |
| out_trade_no | 商户代付订单号 | 是 | status=success 返回 |
| amount | 代付金额 | 是 | status=success 返回 |
| transaction_id | 平台订单号 | 是 | status=success 返回 |
| refCode | 业务状态 | 是 | status=success 返回 refCode 1:成功 2:失败 |
| refMsg | 业务描述 | 是 | status=success 返回 |
| success_time | 代付成功时间 | 是 | status=success,refCode=1成功时返回 |
| sign | MD5数据签名 | 否 | 请看MD5签名处理 |
代付下单返回 status=success 只表示申请已受理,不代表出款成功。查询需同时满足 status=success、refCode=1 才是成功。
请求参数示例(以表单提交)
{
"mchid": "10000",
"out_trade_no": "DEMO_PAYOUT_001",
"pay_md5sign": "CALCULATE_WITH_YOUR_APIKEY"
}成功响应示例
{
"status": "success",
"msg": "请求成功",
"mchid": "10000",
"out_trade_no": "DEMO_PAYOUT_001",
"amount": "100000.00",
"transaction_id": "DEMO_PLATFORM_PAYOUT",
"refCode": "1",
"refMsg": "成功",
"success_time": "2026-10-11 12:05:00",
"sign": "CALCULATE_WITH_YOUR_APIKEY"
}响应示例
{
"status": "success",
"msg": "请求成功",
"mchid": "10000",
"out_trade_no": "DEMO_PAYOUT_001",
"amount": "100000.00",
"transaction_id": "DEMO_PLATFORM_PAYOUT",
"refCode": "3",
"refMsg": "处理中",
"sign": "CALCULATE_WITH_YOUR_APIKEY"
}失败响应示例
{
"status": "error",
"msg": "请求成功",
"refCode": "7",
"refMsg": "交易不存在"
}代付查询状态码
| refCode | refMsg |
|---|---|
| 1 | 成功 |
| 2 | 失败 / 失败,请驳回 |
| 3 | 处理中 |
| 4 | 待处理 |
| 5 | 审核驳回 |
| 6 | 待审核 |
| 7 | 交易不存在 |
| 8 | 未知状态 |
余额查询
| 属性 | 内容 |
|---|---|
| 版本 | 1.0 |
| 网关 | https://merchant.88pay.net/Payment_Dfpay_querybalance.html |
| 请求方式 | POST |
| 参数名称 | 参数含义 | 是否参与签名 | 参数说明 |
|---|---|---|---|
| mchid | 商户号 | 是 | 平台分配商户号 |
| pay_md5sign | MD5数据签名 | 否 | 请看MD5签名处理 |
| 参数名称 | 参数含义 | 参数说明 |
|---|---|---|
| status | 状态 | success:请求成功 error:请求失败 |
| msg | 描述 | 结果描述 |
| balance | 余额 | status=success 返回 |
请求参数示例(以表单提交)
{
"mchid": "10000",
"pay_md5sign": "CALCULATE_WITH_YOUR_APIKEY"
}成功响应示例
{
"status": "success",
"msg": "查询成功",
"balance": "1000000.00"
}失败响应示例
{
"status": "error",
"msg": "签名验证失败",
"data": []
}常见问题
超时、HTML 错误页或无法解析的响应属于结果未知,请先用原商户订单号查询并核对后台,再决定后续处理;不要立即换订单号重复发起代付。
金额使用接口规定的货币单位,不要自行乘除 100;小数位和原始字符串格式在签名与提交时必须一致。商户订单号应保持唯一。
验签失败时核对参与字段、大小写、空值、金额格式、回调地址和密钥。接口参数名与 JSON 状态值不随页面语言切换而改变。