主题
快速开始
本文档面向调用 Payment 网关的商户服务端,依据本仓库当前实现编写。文档中的 https://pay.example.com、商户号、应用编号和密钥均为示例,请替换为实际部署配置。
接入准备
- 在管理端创建商户与商户应用,取得
mchNo、appId、应用私钥appSecret。 - 为应用配置支付渠道参数和支付通道,启用要使用的
wayCode,核对费率、限额与结算分账策略。 - 准备可被支付服务访问的 HTTPS 通知地址,在商户服务端完成验签和订单幂等处理。
- 确认部署提供的 Payment 网关域名。接口路径自身已含
/api,不要重复添加。
密钥使用
应用私钥仅用于商户服务端签名和验签,不作为请求字段发送。开放接口不使用后台的 iToken,也不要将密钥放入网页、收银台或客户端包。
选择接入方式
需要用户选择支付方式时,从 聚合收银台 开始:下单传 QR_CASHIER,开放 API 返回 payurl 链接。自行展示二维码或调起 SDK 时,选择实际开通的具体 wayCode。
接口总览 列出认证与开放状态;服务端示例 提供 PHP / Node.js 代码。
一次支付的流程
- 服务端生成唯一
mchOrderNo,构建统一下单参数并签名。 - 调用 统一下单,验签响应中的
data。 - 根据
payDataType调起支付,或展示payData中的二维码内容。 - 接收并验签 异步通知,核对金额、商户订单号及状态,幂等更新商户订单。
- 网络异常或结果不明确时,用原商户订单号调用 支付查询。不要直接换单号再次扣款。
支付成功后的结算分账由后台配置自动安排,不需要商户再调用分账接口。浏览器跳转、Bridge 返回和下单的 code=0 均不能单独作为支付成功依据。
统一下单示例
json
{
"mchNo": "M_DEMO",
"appId": "APP_DEMO",
"mchOrderNo": "ORDER_20261016_001",
"wayCode": "ALI_QR",
"amount": 100,
"currency": "cny",
"subject": "测试商品",
"body": "一笔测试订单",
"notifyUrl": "https://merchant.example.com/payment/notify",
"reqTime": "1792108800000",
"signType": "MD5",
"sign": "由服务端计算"
}请求使用 POST https://pay.example.com/api/pay/unifiedOrder,推荐 Content-Type: application/json。签名示例见 协议与签名,可在文档项目目录执行 npm run check:examples 生成完整签名请求。
接口范围
| 能力 | 入口 | 当前状态 |
|---|---|---|
| 支付 | 下单、查询、关闭 | 已实现,需启用对应支付通道 |
| 退款 | 申请、查询 | 已实现,受渠道与结算状态约束 |
| 转账 | 创建、查询 | 路由存在,当前未注册转账渠道 |
| 收银台 | 候选项、确认、二维码/跳转、OAuth/JSAPI | 供聚合收银台前端使用 |
| 结算分账 | 后台应用支付配置 | 自动执行,无商户开放分账入口 |
| 渠道回调 | 渠道专用通知路径 | 供渠道使用,不属于商户请求接口 |