更新日期:2026-10-30。适用于已升级“手动channel_id统一下单版”的平台;本文档补丁不升级支付逻辑。
客户携带签名请求本站 → 本站检查商户独立配置权限与金额 → 指定通道向上游下单 → 返回支付地址 → 用户付款 → 上游通知本站 → 本站验签处理 → 本站通知客户。
channel_id 必填,为平台后台手动设置的字符串。它不是内部自增ID,也不是上游通道编号。长度1至64位,以字母或数字开头,仅允许字母、数字、下划线和短横线;区分大小写,保留前导零。示例:客户传 00101,后台将其绑定到天下微信通道,上游编号为101。请向平台取得你被授权的实际编号,不能自行猜测。
type可省略,由通道确定;传入时必须匹配且参与签名。通道不存在、关闭、暂停或商户独立配置未授权时直接拒绝,不随机选用其他通道。未配置商户权限也拒绝。旧的仅type下单、自动收银台入口不再适用。
页面支付:POST https://你的平台域名/submit.php;服务端API:POST https://你的平台域名/mapi.php。Content-Type为 application/x-www-form-urlencoded,UTF-8,不能直接提交JSON请求体。密钥只保存在客户服务端。
| 参数 | 必填 | 说明 |
|---|---|---|
| pid | 是 | 本站分配给客户的商户号,不是上游商户号 |
| channel_id | 是 | 手动对外编号,例如字符串00101;参与签名 |
| type | 否 | 如alipay、wxpay;省略由通道决定,传入必须匹配 |
| out_trade_no | 是 | 商户订单号;同一商户不可换通道、金额或其他支付参数复用原订单号 |
| name | 是 | 商品名称,原接口超过127字节截取 |
| money | 是 | 元,正数,最多2位小数;例如100.00 |
| notify_url | 是 | 客户服务器接收本站异步通知的URL |
| return_url | 页面接口必填 | 用户支付后返回页面,mapi可省略 |
| clientip | mapi必填 | 付款用户IP |
| device | 否 | mapi原设备参数;pc、mobile、qq、wechat、alipay、app或jump。jump只返回本站跳转URL,不代表已完成上游下单 |
| param | 否 | 业务扩展参数,非空参与签名 |
| sign_type | 建议传MD5 | 不参与签名 |
| sign | 是 | 32位小写MD5,不参与自身计算 |
key1=value1&key2=value2,这一步不做URL编码。md5(拼接串 + 本站商户密钥)。不添加 &key=;不要套用上游签名算法。不含密钥的参数示例:
pid=1001 channel_id=00101 out_trade_no=TEST202610300001 money=100.00 name=test notify_url=https://merchant.example/notify return_url=https://merchant.example/return clientip=127.0.0.1 sign_type=MD5 sign=由服务端计算
金额需要同时满足全站配置、本站通道范围及上游实际支持范围。全站最大1000、通道最大10000时,提交2000仍会被全站拦截,提示“最大支付金额是1000元”。管理员在“系统设置 → 支付相关配置”设置全站限额,在“支付接口 → 支付通道 → 编辑”设置通道范围;修改本地限额不会提高上游限额。加费或金额调整后实际支付金额也会校验通道范围。
mapi返回JSON。成功 code=1 表示取得支付输出,不表示已付款。根据返回内容使用payurl跳转、qrcode生成二维码或urlscheme拉起客户端;部分插件返回html表单,须与平台确认支持方式。submit.php返回支付跳转/页面,不能当JSON解析。
{"code":1,"trade_no":"平台订单号","payurl":"https://支付地址示例"}
当前失败可能返回code=-1(校验或下单异常)、-2(插件错误结果)、-4(未传pid参数);客户应统一把所有非1结果视为失败并记录msg,不依赖文字作为固定错误码。
| 典型提示 | 处理 |
|---|---|
| channel_id必填/格式错误 | 按字符串发送授权编号 |
| 签名校验失败 | 检查编号是否参与签名、前导零、参数编码和本站商户密钥 |
| 商户未授权此channel_id | 由管理员勾选授权,客户不能绕过 |
| 指定通道不存在、已关闭或不可用 | 确认编号和通道状态 |
| type与channel_id绑定的支付方式不一致 | 省略type或传入正确值并重新签名 |
| 最大支付金额是…元/金额超过指定通道单笔最大限额 | 分别核对全站/通道及上游限额 |
| 同一商户订单号不能更换channel_id | 核实原单状态;新业务使用新订单号 |
| TX-*、上游业务错误、超时或下单未完成 | 保留平台订单号及完整脱敏提示,先查原单;可能上游已建单,不能盲目重新创建订单或切换通道 |
通知仍沿用现有本站协议,GET到notify_url,包含pid、trade_no、out_trade_no、type、name、money、trade_status=TRADE_SUCCESS、sign、sign_type及可选param。本次没有给回调新增channel_id字段。客户按自己的out_trade_no关联下单时保存的编号,不要因缺少channel_id拒绝合法通知。
客户必须验签,核对商户、订单、金额、成功状态,在本地事务中幂等处理,成功后返回纯文本 success。重复通知不能重复发货或入账。浏览器return_url和取得支付链接都不能代替服务端付款确认。查单、退款接口沿用站内下方文档,本次没有给它们新增channel_id参数,也不能把新下单签名规则强套到旧查询接口。
示例只生成请求,不会自动发起收款。请使用测试商户和已确认的通道。此前本地检查不能替代真实通道收款回调验收。