码支付API开发文档 · 下单查询回调通知签名算法接口手册
码支付官方API接口文档提供完整的RESTful接入指南, 包含统一下单接口、订单状态查询接口、退款申请接口、异步回调通知机制、 签名验证算法等详细技术说明, 并附PHP、Java、Python、Node.js多语言对接示例代码供开发者参考。
1. 接入基础说明
所有 API 请求均通过 HTTPS 协议以 POST 方式提交至统一网关入口, 请求参数与返回数据均采用标准 JSON 格式进行编码传输。 商户接入前需在控制台创建应用并获取 appid 与 appsecret 密钥对。
| 网关地址 |
https://api.mapay.example.com/v1/
|
|---|---|
| 请求方式 | POST / GET(部分接口) |
| Content-Type | application/x-www-form-urlencoded 或 application/json |
| 字符编码 | UTF-8 |
| 签名算法 | MD5 或 HMAC-SHA256 |
| 响应格式 | JSON { code, msg, data } |
2. 接口签名算法
为确保接口调用安全,所有请求必须携带 sign 签名参数, 签名生成需遵循以下标准步骤以避免签名校验失败。
- 将所有请求参数(除 sign 本身)按参数名 ASCII 码从小到大排序(字典序);
- 使用 URL 键值对的格式(即 key1=value1&key2=value2…)拼接成字符串 stringA;
- 在 stringA 最后拼接上 &key=AppSecret 得到 stringSignTemp 字符串;
- 对 stringSignTemp 进行 MD5/HMAC-SHA256 运算,并将得到的字符串所有字符转换为大写,即 sign 值。
// 签名函数示例
function generateSign($params, $appSecret) {
ksort($params);
$str = http_build_query($params) . '&key=' . $appSecret;
return strtoupper(md5($str));
}
// 参数示例
$params = [
'appid' => 'MP20240001',
'out_trade_no' => 'O202407311530001',
'total_fee' => '19800',
'body' => 'VIP会员开通'
];
$sign = generateSign($params, 'YOUR_APP_SECRET');
3. 统一下单接口
POST/pay/unifiedorder
商户通过该接口创建支付订单,平台会根据支付类型参数返回对应的支付二维码链接或跳转地址。 建议订单号在商户系统内保证全局唯一性。
请求参数
| 字段名 | 类型 | 必填 | 长度 | 说明 |
|---|---|---|---|---|
appid
|
string | 是 | 32 | 商户应用ID,控制台创建应用后分配 |
out_trade_no
|
string | 是 | 64 | 商户订单号,系统内须唯一 |
total_fee
|
int | 是 | - | 订单金额,单位为分,不得为0 |
body
|
string | 是 | 128 | 商品标题或简单描述 |
pay_type
|
string | 是 | 16 | 支付方式:wxpay/alipay/qqpay |
notify_url
|
string | 是 | 256 | 支付成功后异步回调通知地址 |
return_url
|
string | 否 | 256 | 电脑端支付后同步跳转地址 |
attach
|
string | 否 | 128 | 附加数据,回调时原样返回 |
nonce_str
|
string | 是 | 32 | 随机字符串,防重放攻击 |
sign
|
string | 是 | 32/64 | 按签名算法生成的签名字符串 |
响应示例
{
"code": 1,
"msg": "下单成功",
"data": {
"appid": "MP20240001",
"out_trade_no": "O202407311530001",
"trade_no": "MP20240731000012345",
"total_fee": 19800,
"pay_type": "wxpay",
"code_url": "weixin://wxpay/bizpayurl?pr=AbCdEf123",
"qr_code": "https://api.mapay.com/qrcode/xxxx.png",
"pay_url": "https://pay.mapay.com/h5/xxxx",
"expire_time": 1722411000,
"nonce_str": "a8b9c0d1e2f3",
"sign": "A1B2C3D4E5F67890123456789ABCDEF0"
}
}
4. 订单查询接口
POST/pay/orderquery
该接口用于主动查询指定订单的实时支付状态, 建议配合回调通知机制作为兜底查询,避免因网络抖动导致的回调延迟或丢失。
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
appid
|
string | 是 | 商户应用ID |
out_trade_no
|
string | 二选一 | 商户订单号,与trade_no二选一 |
trade_no
|
string | 二选一 | 平台订单号,与out_trade_no二选一 |
nonce_str
|
string | 是 | 随机字符串 |
sign
|
string | 是 | 签名 |
7. 异步回调通知
订单支付成功后,码支付服务器会通过 POST 方式将支付结果主动推送到商户在下单时传入的 notify_url 地址。 商户接收后需完成验签与业务逻辑处理,并返回特定字符串应答。
| 字段名 | 类型 | 说明 |
|---|---|---|
appid
|
string | 商户应用ID |
out_trade_no
|
string | 商户订单号 |
trade_no
|
string | 码支付平台订单号 |
pay_type
|
string | 支付方式:wxpay/alipay |
total_fee
|
int | 订单金额(单位:分) |
pay_fee
|
int | 实际付款金额(单位:分) |
transaction_id
|
string | 微信/支付宝官方交易流水号 |
pay_time
|
int | 用户付款完成时间戳(秒) |
attach
|
string | 下单时传入的附加数据,原样返回 |
status
|
int | 订单状态:1=支付成功 2=已关闭 3=已退款 |
nonce_str
|
string | 随机字符串 |
sign
|
string | 签名,商户需用相同算法校验 |
⚠️
处理要求:商户回调接口接收到通知后,校验成功必须原样返回字符串
success,否则平台会按重试策略重复推送,最多10次。
请务必做好幂等性处理,避免同一订单重复发货。
8. 返回状态码说明
| 状态码 | 含义 | 常见原因与处理建议 |
|---|---|---|
1
|
接口调用成功 | 正常处理返回的 data 数据 |
0
|
通用失败 | 检查 msg 字段具体错误提示排查 |
1001
|
参数缺失 | 对照文档检查必填参数是否已全部传递 |
1002
|
签名错误 | 核对签名算法步骤、AppSecret 是否正确,注意字符编码 |
1003
|
appid无效 | 检查应用ID是否正确、应用状态是否正常启用 |
1004
|
订单不存在 | 订单号是否错误,或是否为跨应用查询 |
1005
|
订单已过期 | 用户未在规定时间内完成付款,需重新下单 |
1006
|
通道维护中 | 当前支付通道临时维护,请稍后重试或切换备用通道 |
1007
|
IP白名单拦截 | 在控制台将您的服务器出口IP加入白名单 |
1008
|
请求过于频繁 | 触发限流策略,请降低调用频率或联系客服调高阈值 |