创 创支付OPEN API DOCUMENTATION
V2 开发文档
CHUANGPAY OPEN API

V2 RSA 开放接口

使用 SHA256WithRSA 双向签名,适合正式生产环境和高安全业务。

V2
请求格式form / JSON
签名算法SHA256WithRSA
时间容差10 分钟
响应验签平台公钥

接入说明

V2 对请求、成功响应和支付通知进行 RSA 签名。

推荐版本

新接入项目建议使用 V2。请在用户中心「API 信息」生成商户 RSA 密钥对,妥善保存商户私钥,并使用平台公钥验证响应和通知。

字符编码UTF-8
请求签名商户私钥
响应验签平台公钥
成功状态code = 0

接口能力

接口请求方式地址用途
页面跳转支付GET / POST/api/pay/submit浏览器跳转到统一支付页面
统一下单POST/api/pay/create创建订单并返回支付信息
订单查询POST/api/pay/query查询订单状态并返回签名结果
订单退款POST/api/pay/refund按原支付通道提交退款
退款查询POST/api/pay/refundquery查询退款处理状态并返回签名结果

支付方式与场景

支付配置决定实际调用的支付通道,API 参数只选择支付方式和场景。

参数组合支付场景返回形式说明
type=alipay, scene=auto支付宝自动路由jump 或 qrcode按浏览器环境、金额和额度自动选择网页、小程序或二维码
type=wxpay, scene=auto微信自动路由jump 或 qrcode按浏览器环境、金额和额度自动选择网页、小程序或二维码
type=alipay, scene=miniapp支付宝小程序jump拉起支付配置绑定的支付宝小程序
type=wxpay, scene=miniapp微信小程序jump拉起支付配置绑定的微信小程序
type=qqpay, scene=webQQ 个人码自挂qrcode严格按应付金额付款;采集确认后才通知商户
微信 Native / 自挂 / 商家账单扫码收款qrcodeNative 不要求 OpenID;自挂和账单依赖对应到账来源
支付宝预授权扫码冻结后自动转支付qrcode冻结不代表已支付,须实际转支付成功
指定支付配置

channel_id 可指定已启用的支付配置。不传时系统根据支付方式、金额限制和通道路由规则自动选择。

金额匹配与关闭规则

自挂与账单按同一真实收款主体的有效应付金额唯一匹配,最多按配置递增若干分。订单关闭立即释放金额、不恢复、不设保护期。旧码迟付可能匹配当前新订单,商户须接受此金额识别风险;可靠订单号存在时严格按订单号,不降级猜单。

可用通道查询

GET /openapi/channels 携带 pid 与签名,V1 从 data.channels 取数组;V2 加 version=2、timestamp、RSA 签名,成功响应的 channels_json 为参与签名的 JSON 字符串,先验签再解析。此查询不返回账号凭据。

RSA 密钥配置

商户和平台分别保管自己的私钥,只交换公钥。

配置流程

  1. 1

    在用户中心「API 信息」生成商户 RSA 密钥对。

  2. 2

    立即保存商户私钥,平台不会在后续页面重复展示私钥。

  3. 3

    平台保存商户公钥,用于验证商户请求。

  4. 4

    商户保存平台公钥,用于验证平台响应和支付通知。

私钥管理

商户私钥不得上传到平台、提交到代码仓库或发送给第三方。建议通过环境变量或密钥管理服务读取。

RSA 签名与验签

V2 使用 SHA-256 摘要和 RSA 私钥签名,签名结果采用 Base64 编码。

请求签名步骤

  1. 1

    添加 timestamp(当前 Unix 秒级时间戳)和 sign_type=RSA。

  2. 2

    移除 sign、sign_type、数组参数和空值参数。

  3. 3

    按参数名 ASCII 升序拼接 key=value&key=value。

  4. 4

    使用商户私钥执行 SHA256WithRSA 签名,再进行 Base64 编码。

签名与验签代码
ksort($params);
$content = buildSignContent($params);
openssl_sign($content, $signature, $merchantPrivateKey, OPENSSL_ALGO_SHA256);
$params['sign'] = base64_encode($signature);
const crypto = require('crypto');
const content = buildSignContent(params);
const sign = crypto.sign('RSA-SHA256', Buffer.from(content), merchantPrivateKey).toString('base64');
const ok = crypto.verify('RSA-SHA256', Buffer.from(responseContent), platformPublicKey, Buffer.from(response.sign, 'base64'));
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(merchantPrivateKey);
signature.update(content.getBytes(StandardCharsets.UTF_8));
String sign = Base64.getEncoder().encodeToString(signature.sign());
时间戳校验

平台只接受与服务器当前时间相差不超过 600 秒的请求,请确保服务器已开启时间同步。

页面跳转支付

浏览器提交后跳转至统一支付页面,请求必须通过 RSA 签名。

请求 URLhttps://czf.xxau.cn/api/pay/submit
请求方式GET / POST
数据格式application/x-www-form-urlencoded(同时兼容 JSON)

请求参数

参数名称类型必填说明示例
pid商户 IDString是用户中心 API 信息中的商户 ID1001
type支付方式String是wxpay、alipay 或 qqpayalipay
out_trade_no商户订单号String是同一商户下唯一,最长 100 字符M202607150001
name商品名称String是具体商品或服务名称,最长 120 字符测试商品
money订单金额String是单位元,大于 0,最多两位小数1.00
notify_url异步通知地址String推荐公网 HTTP(S),仅 80/443;禁止内网、凭据、重定向跳转,推荐 HTTPShttps://merchant.example.com/pay/notify
notify_method通知方法String否GET(默认)或 POST;创建后按快照执行POST
notify_format通知格式String否form(默认)或 json;json 必须使用 POST,全部标量字段仍参与验签json
notify_fields_version通知字段版本Integer否1 保持原字段;2 追加应付与实收元字符串2
return_url页面跳转地址String否用户完成支付后的浏览器跳转地址https://merchant.example.com/pay/return
method接口模式String否web 或 jump,默认 webweb
scene支付场景String否auto、web 或 miniapp;默认 auto。auto 会在支付中转页根据浏览器环境、金额、当日限额和轮询规则选择通道auto
channel_id支付配置 IDInteger否指定已启用的支付配置,不传则自动路由12
clientip用户 IPString否发起支付的真实客户端 IP203.0.113.10
buyer_id买家标识String否JSAPI 或小程序支付需要时传入openid_or_buyer_id
param扩展参数String否通知时原样返回,最长 500 字符order_source=shop
timestamp时间戳String是Unix 秒级时间戳,有效期 600 秒1784044800
sign_type签名类型String是固定为 RSARSA
sign请求签名String是商户私钥生成的 Base64 签名<BASE64_SIGNATURE>
请求示例
curl -X POST 'https://czf.xxau.cn/api/pay/submit' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'pid=1001&type=alipay&out_trade_no=M202607150001&name=测试商品&money=1.00&timestamp=1784044800&sign_type=RSA&sign=<BASE64_SIGNATURE>'
{
  "pid": "1001",
  "type": "alipay",
  "out_trade_no": "M202607150001",
  "name": "测试商品",
  "money": "1.00",
  "notify_url": "https://merchant.example.com/pay/notify",
  "timestamp": "1784044800",
  "sign_type": "RSA",
  "sign": "<BASE64_SIGNATURE>"
}
成功返回

请求成功后返回 HTTP 302,并跳转到统一支付页面。

失败返回
{
  "code": -1,
  "msg": "签名校验失败"
}
注意事项
  • out_trade_no 在同一商户下必须唯一;重复请求会返回原订单,不能更换支付场景或支付配置。
  • 商品金额使用元,必须大于 0,最多保留两位小数。
  • method=jump 固定返回统一支付页;method=web 根据支付方式返回支付链接或二维码。

统一下单

服务端创建支付订单,成功响应携带平台 RSA 签名。

请求 URLhttps://czf.xxau.cn/api/pay/create
请求方式POST
数据格式application/x-www-form-urlencoded(同时兼容 JSON)

请求参数

参数名称类型必填说明示例
pid商户 IDString是用户中心 API 信息中的商户 ID1001
type支付方式String是wxpay、alipay 或 qqpayalipay
out_trade_no商户订单号String是同一商户下唯一,最长 100 字符M202607150001
name商品名称String是具体商品或服务名称,最长 120 字符测试商品
money订单金额String是单位元,大于 0,最多两位小数1.00
notify_url异步通知地址String推荐公网 HTTP(S),仅 80/443;禁止内网、凭据、重定向跳转,推荐 HTTPShttps://merchant.example.com/pay/notify
notify_method通知方法String否GET(默认)或 POST;创建后按快照执行POST
notify_format通知格式String否form(默认)或 json;json 必须使用 POST,全部标量字段仍参与验签json
notify_fields_version通知字段版本Integer否1 保持原字段;2 追加应付与实收元字符串2
return_url页面跳转地址String否用户完成支付后的浏览器跳转地址https://merchant.example.com/pay/return
method接口模式String否web 或 jump,默认 webweb
scene支付场景String否auto、web 或 miniapp;默认 auto。auto 会在支付中转页根据浏览器环境、金额、当日限额和轮询规则选择通道auto
channel_id支付配置 IDInteger否指定已启用的支付配置,不传则自动路由12
clientip用户 IPString否发起支付的真实客户端 IP203.0.113.10
buyer_id买家标识String否JSAPI 或小程序支付需要时传入openid_or_buyer_id
param扩展参数String否通知时原样返回,最长 500 字符order_source=shop
timestamp时间戳String是Unix 秒级时间戳,有效期 600 秒1784044800
sign_type签名类型String是固定为 RSARSA
sign请求签名String是商户私钥生成的 Base64 签名<BASE64_SIGNATURE>
请求示例
curl -X POST 'https://czf.xxau.cn/api/pay/create' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'pid=1001&type=alipay&out_trade_no=M202607150001&name=测试商品&money=1.00&timestamp=1784044800&sign_type=RSA&sign=<BASE64_SIGNATURE>'
{
  "pid": "1001",
  "type": "alipay",
  "out_trade_no": "M202607150001",
  "name": "测试商品",
  "money": "1.00",
  "notify_url": "https://merchant.example.com/pay/notify",
  "timestamp": "1784044800",
  "sign_type": "RSA",
  "sign": "<BASE64_SIGNATURE>"
}
成功返回
{
  "code": 0,
  "msg": "success",
  "trade_no": "API202607150001",
  "pay_type": "jump",
  "pay_info": "https://pay.example.com/openapi/pay/API202607150001",
  "timestamp": "1784044800",
  "sign_type": "RSA",
  "sign": "<BASE64_SIGNATURE>"
}
失败返回
{
  "code": -1,
  "msg": "签名校验失败"
}

返回字段

字段名称类型说明示例
code返回状态码Integer0 表示成功,-1 表示失败0
msg返回信息String成功或失败原因success
trade_no平台订单号String平台生成的 API 订单号API202607150001
pay_type支付信息类型Stringjump、qrcode 或 htmljump
pay_info支付信息String跳转地址、二维码内容或 HTMLhttps://pay.example.com/openapi/pay/...
timestamp平台时间戳String用于响应验签1784044800
sign_type签名类型String固定为 RSARSA
sign平台签名String使用平台公钥验签<BASE64_SIGNATURE>
注意事项
  • out_trade_no 在同一商户下必须唯一;重复请求会返回原订单,不能更换支付场景或支付配置。
  • 商品金额使用元,必须大于 0,最多保留两位小数。
  • method=jump 固定返回统一支付页;method=web 根据支付方式返回支付链接或二维码。

V2 订单查询

使用平台订单号或商户订单号查询订单,两个订单号至少传一个。

请求 URLhttps://czf.xxau.cn/api/pay/query
请求方式POST
数据格式application/x-www-form-urlencoded 或 application/json

请求参数

参数名称类型必填说明示例
pid商户 IDString是用户中心 API 信息中的商户 ID1001
trade_no平台订单号String二选一平台生成的 API 订单号API202607150001
out_trade_no商户订单号String二选一商户提交的唯一订单号M202607150001
timestamp时间戳String是Unix 秒级时间戳,有效期 600 秒1784044800
sign_type签名类型String是固定为 RSARSA
sign请求签名String是商户私钥生成的 Base64 签名<BASE64_SIGNATURE>
请求示例
curl -X POST 'https://czf.xxau.cn/api/pay/query' \
  -d 'pid=1001&out_trade_no=M202607150001&timestamp=1784044800&sign_type=RSA&sign=<BASE64_SIGNATURE>'
成功返回
{
    "code": 0,
    "msg": "success",
    "pid": 1001,
    "trade_no": "API202607150001",
    "out_trade_no": "M202607150001",
    "api_trade_no": "2026071500001",
    "type": "alipay",
    "name": "测试商品",
    "money": "1.00",
    "status": 1,
    "trade_status": "TRADE_SUCCESS",
    "addtime": "2026-07-15 10:00:00",
    "endtime": "2026-07-15 10:00:08",
    "buyer": "buyer_001",
    "param": "order_source=shop",
    "timestamp": "1784044800",
    "sign_type": "RSA",
    "sign": "<BASE64_SIGNATURE>"
}
失败返回
{
  "code": -1,
  "msg": "订单不存在"
}

返回字段

字段名称类型说明示例
pid商户 IDString订单所属商户1001
trade_no平台订单号String平台生成的订单号API202607150001
out_trade_no商户订单号String商户提交的订单号M202607150001
api_trade_no支付机构交易号String微信或支付宝交易号,未支付时为空2026071500001
type支付方式Stringwxpay 或 alipayalipay
name商品名称String下单时提交的商品名称测试商品
money订单金额String单位元1.00
status支付状态Integer1 已支付,0 未支付1
trade_status交易状态StringTRADE_SUCCESS、WAIT_BUYER_PAY 或 TRADE_CLOSEDTRADE_SUCCESS
addtime创建时间String订单创建时间2026-07-15 10:00:00
endtime支付时间String未支付时为空2026-07-15 10:00:08
buyer买家标识Stringopenid、buyer_id 或客户端标识buyer_001
param扩展参数String下单时提交的 paramorder_source=shop
timestamp平台时间戳String用于响应验签1784044800
sign_type签名类型String固定为 RSARSA
sign平台签名String使用平台公钥验签<BASE64_SIGNATURE>
注意事项
  • 同时传 trade_no 和 out_trade_no 时优先使用 trade_no。
  • 成功响应必须使用平台公钥验签。

V2 订单退款

根据平台订单号或商户订单号通过开放 API 发起原路退款。调用前需在用户中心 API 信息中开启退款 API。

请求 URLhttps://czf.xxau.cn/api/pay/refund
请求方式POST
数据格式application/x-www-form-urlencoded 或 application/json

请求参数

参数名称类型必填说明示例
pid商户 IDString是用户中心 API 信息中的商户 ID1001
trade_no平台订单号String二选一与商户订单号至少传一个,同时传入时优先使用API202607150001
out_trade_no商户订单号String二选一商户下单时提交的订单号M202607150001
money退款金额String是单位元,大于 0,最多两位小数1.00
out_refund_no商户退款单号String推荐最长 100 字符,仅支持字母、数字、下划线和短横线;用于退款幂等MR202607150001
reason退款原因String否最长 80 字符,默认 API退款用户申请退款
return_profit_sharing回退分账Integer否1 表示同时回退已执行分账,默认 00
profit_sharing_refund_money分账退款金额String条件return_profit_sharing=1 时可填写,单位元0.00
timestamp时间戳String是Unix 秒级时间戳,有效期 600 秒1784044800
sign_type签名类型String是固定为 RSARSA
sign请求签名String是商户私钥生成的 Base64 签名<BASE64_SIGNATURE>
请求示例
curl -X POST 'https://czf.xxau.cn/api/pay/refund' \
  -d 'pid=1001&trade_no=API202607150001&money=1.00&out_refund_no=MR202607150001&reason=用户申请退款&timestamp=1784044800&sign_type=RSA&sign=<BASE64_SIGNATURE>'
{
  "pid": "1001",
  "trade_no": "API202607150001",
  "money": "1.00",
  "out_refund_no": "MR202607150001",
  "reason": "用户申请退款",
  "timestamp": "1784044800",
  "sign_type": "RSA",
  "sign": "<BASE64_SIGNATURE>"
}
成功返回
{
    "code": 0,
    "msg": "退款申请已提交",
    "refund_no": "RF202607150001",
    "out_refund_no": "MR202607150001",
    "trade_no": "API202607150001",
    "out_trade_no": "M202607150001",
    "money": "1.00",
    "reducemoney": "0.00",
    "status": 2,
    "refund_status": "PROCESSING",
    "reason": "用户申请退款",
    "addtime": "2026-07-15 10:10:00",
    "endtime": "",
    "timestamp": "1784044800",
    "sign_type": "RSA",
    "sign": "<BASE64_SIGNATURE>"
}
失败返回
{
  "code": -1,
  "msg": "今日API退款笔数已达到上限(1笔)"
}

返回字段

字段名称类型说明示例
code返回状态码Integer0 成功,-1 失败0
msg返回信息String处理结果或失败原因退款申请已提交
refund_no平台退款单号String平台生成的唯一退款单号RF202607150001
out_refund_no商户退款单号String商户提交的退款单号;未提交时返回平台生成值MR202607150001
trade_no平台订单号String原支付订单的平台订单号API202607150001
out_trade_no商户订单号String原支付订单的商户订单号M202607150001
money退款金额String单位元1.00
reducemoney扣减余额String当前系统原路退款不额外扣减账户余额,固定为 0.000.00
status退款状态码Integer0 失败、1 成功、2 处理中2
refund_status退款状态StringPENDING、PROCESSING、SUCCESS、FAILED 或 CLOSEDPROCESSING
reason退款原因String商户提交的退款原因用户申请退款
failure_reason失败原因String退款失败时返回支付机构的失败原因,其他状态为空退款单不存在(REFUNDNOTEXIST)
addtime创建时间String退款记录创建时间2026-07-15 10:10:00
endtime完成时间String成功或失败后的更新时间,处理中为空
timestamp平台时间戳String用于响应验签1784044800
sign_type签名类型String固定为 RSARSA
sign平台签名String使用平台公钥验签<BASE64_SIGNATURE>
注意事项
  • 同时传 trade_no 和 out_trade_no 时优先使用 trade_no。
  • out_refund_no 在同一商户下唯一;相同退款单号、订单和金额的重复请求返回原结果,不会重复退款或重复计算每日额度。
  • 每日最大退款笔数按退款记录创建时间统计,0 表示不限制;只统计待处理、处理中和成功的 API 退款,失败记录不占用当天笔数。
  • status=1 表示成功,status=2 表示处理中,status=0 表示失败。微信退款可能先返回处理中,请通过退款查询接口获取最终状态。
  • code=0 的成功响应必须使用平台公钥验签。

V2 退款查询

使用平台退款单号或商户退款单号查询退款状态,两个退款单号至少传一个。

请求 URLhttps://czf.xxau.cn/api/pay/refundquery
请求方式POST
数据格式application/x-www-form-urlencoded 或 application/json

请求参数

参数名称类型必填说明示例
pid商户 IDString是用户中心 API 信息中的商户 ID1001
refund_no平台退款单号String二选一平台返回的退款单号RF202607150001
out_refund_no商户退款单号String二选一发起退款时提交或平台返回的商户退款单号MR202607150001
timestamp时间戳String是Unix 秒级时间戳,有效期 600 秒1784044800
sign_type签名类型String是固定为 RSARSA
sign请求签名String是商户私钥生成的 Base64 签名<BASE64_SIGNATURE>
请求示例
curl -X POST 'https://czf.xxau.cn/api/pay/refundquery' \
  -d 'pid=1001&out_refund_no=MR202607150001&timestamp=1784044800&sign_type=RSA&sign=<BASE64_SIGNATURE>'
成功返回
{
    "code": 0,
    "msg": "success",
    "refund_no": "RF202607150001",
    "out_refund_no": "MR202607150001",
    "trade_no": "API202607150001",
    "out_trade_no": "M202607150001",
    "money": "1.00",
    "reducemoney": "0.00",
    "status": 1,
    "refund_status": "SUCCESS",
    "reason": "用户申请退款",
    "failure_reason": "",
    "addtime": "2026-07-15 10:10:00",
    "endtime": "2026-07-15 10:10:06",
    "timestamp": "1784044800",
    "sign_type": "RSA",
    "sign": "<BASE64_SIGNATURE>"
}
失败返回
{
  "code": -1,
  "msg": "退款记录不存在"
}

返回字段

字段名称类型说明示例
code返回状态码Integer0 成功,-1 失败0
msg返回信息String处理结果或失败原因退款申请已提交
refund_no平台退款单号String平台生成的唯一退款单号RF202607150001
out_refund_no商户退款单号String商户提交的退款单号;未提交时返回平台生成值MR202607150001
trade_no平台订单号String原支付订单的平台订单号API202607150001
out_trade_no商户订单号String原支付订单的商户订单号M202607150001
money退款金额String单位元1.00
reducemoney扣减余额String当前系统原路退款不额外扣减账户余额,固定为 0.000.00
status退款状态码Integer0 失败、1 成功、2 处理中2
refund_status退款状态StringPENDING、PROCESSING、SUCCESS、FAILED 或 CLOSEDPROCESSING
reason退款原因String商户提交的退款原因用户申请退款
failure_reason失败原因String退款失败时返回支付机构的失败原因,其他状态为空退款单不存在(REFUNDNOTEXIST)
addtime创建时间String退款记录创建时间2026-07-15 10:10:00
endtime完成时间String成功或失败后的更新时间,处理中为空
timestamp平台时间戳String用于响应验签1784044800
sign_type签名类型String固定为 RSARSA
sign平台签名String使用平台公钥验签<BASE64_SIGNATURE>
注意事项
  • 同时传 refund_no 和 out_refund_no 时优先使用 refund_no。
  • 退款查询不受退款 API 开关和每日笔数上限影响,关闭退款接口后仍可查询历史退款。
  • 微信处理中退款会主动查询微信侧状态;网关临时不可用时返回本地最近一次状态。
  • code=0 的成功响应必须使用平台公钥验签。

V2 支付结果通知

订单支付成功后,平台按下单快照发送 notify_method(默认 GET,可选 POST)和 notify_format(form 或 json)。JSON 仅允许 POST;页面跳转不能作为付款凭据。

通知参数

参数名称类型说明示例
pid商户 IDString订单所属商户1001
trade_no平台订单号String平台生成的订单号API202607150001
out_trade_no商户订单号String商户提交的订单号M202607150001
api_trade_no支付机构交易号String微信或支付宝交易号,未支付时为空2026071500001
type支付方式Stringwxpay 或 alipayalipay
name商品名称String下单时提交的商品名称测试商品
money订单金额String单位元1.00
trade_status交易状态StringTRADE_SUCCESS、WAIT_BUYER_PAY 或 TRADE_CLOSEDTRADE_SUCCESS
addtime创建时间String订单创建时间2026-07-15 10:00:00
endtime支付时间String未支付时为空2026-07-15 10:00:08
buyer买家标识Stringopenid、buyer_id 或客户端标识buyer_001
param扩展参数String下单时提交的 paramorder_source=shop
timestamp平台时间戳String用于通知验签1784044800
sign_type签名类型String固定为 RSARSA
sign平台签名String使用平台公钥验签<BASE64_SIGNATURE>
商户应答
success

处理要求

  1. 1

    先验证签名,再核对商户订单号、支付状态和订单金额。

  2. 2

    使用数据库唯一键保证通知幂等,同一订单可能收到多次通知。

  3. 3

    处理完成后返回纯文本 success;仅 notify_format=json 可改为 JSON {"code":0,"message":"success"}(整数 0,严格匹配)。

  4. 4

    平台在 8 秒内未收到 success 会判定本次通知失败。

自动重试

新订单首次立即通知,默认失败间隔为 5、15、30、60、120、300、600、1800、3600、7200、14400、28800、43200、86400 秒,默认随机抖动 ±15%,总计最多 15 次。平台可调整新订单策略,创建后保留快照。存量订单保留原策略。成功即停止;回调与认单分队列。

金额字段与通知版本

money 永远是下单原价。notify_fields_version=2 才追加 payable_money、paid_money,且同样参与验签。商户须核对原价与应付、实收的含义,不能用浮点数计算或把金额递增当修改商品价格。

通知验签示例
$params = $_SERVER['REQUEST_METHOD'] === 'POST' ? $_POST : $_GET;
$received = base64_decode((string) ($params['sign'] ?? ''), true);
$content = buildSignContent($params);
$ok = openssl_verify($content, $received ?: '', $platformPublicKey, OPENSSL_ALGO_SHA256);
if ($ok !== 1) { http_response_code(400); exit('fail'); }
// 核对 pid、out_trade_no、money、TRADE_SUCCESS;在数据库事务中幂等更新。
// 只有事务已提交才输出 success,失败不能 ACK;页面跳转不是支付凭据。
echo 'success';

错误说明与联调检查

接口失败时返回 code=-1 和具体 msg,以下为常见问题。

错误信息原因处理方式
请求参数为空 / 缺少商户ID未提交参数或 pid 缺失检查请求格式和 pid
签名校验失败参与签名参数、排序、密钥或私钥不一致打印待签名字符串逐项对比
请求时间戳无效或已过期V2 时间差超过 600 秒开启服务器 NTP 时间同步
当前商户未启用该支付方式没有启用对应支付配置在支付配置中启用微信或支付宝
当前支付金额暂无可用支付通道金额超出通道限制或路由无可用配置检查最小金额、最大金额、单日限额和路由
请先完成实名认证后使用该功能平台开启了商户强制认证完成实名认证后重新发起支付
商户订单号已存在相同订单号更换了场景或支付配置每笔业务使用稳定且唯一的订单号
退款API接口未开启用户关闭了退款 API 开关在用户中心 API 信息中开启退款 API
今日API退款笔数已达到上限当天待处理、处理中和成功的 API 退款记录达到配置上限次日再试或调整每日最大退款笔数
商户退款单号已存在,且退款订单或金额不一致重复使用退款单号但请求内容发生变化同一退款请求保持订单号和金额完全一致

上线前检查

  1. 1

    使用正式域名和 HTTPS notify_url。

  2. 2

    验证重复通知不会重复发货或重复入账。

  3. 3

    验证请求签名、响应验签和通知验签全部通过。

  4. 4

    使用真实的 0.01 元以上测试订单完成全流程联调。