主题
支付发起(收银台与直出)
创建支付成功后,有两种发起支付的模式。
模式 A:收银台(微信内场景默认载体)
引导用户打开 cashier_url。收银台自动识别环境(微信内 JSAPI/浏览器 H5/PC 扫码)、处理 OAuth,完成后跳回:
{return_url}?out_trade_no=...&payment_no=...&status=paidWARNING
URL 参数仅作页面路由提示,不可作为支付凭证(用户可改写);状态必须以查单或回调为准。
收银台页面由智付通托管:微信内(JSAPI 需平台 OAuth 换 openid)与普通浏览器、扫码场景均可用。
你只需做的:
- 创建支付拿到
cashier_url后,用户浏览器(含微信内)直接打开即可; - 可选传
return_url:支付终态收银台跳回{return_url}?out_trade_no=...&payment_no=...&status=paid|closed|refunded——仅作页面路由提示,状态以查单为准(URL 可被用户改写)。
模式 B:prepay 凭证直出
POST /v1/open/payments/{out_trade_no}/prepay
json
{ "pay_method": "alipay_wap" }
{ "pay_method": "wechat_jsapi", "openid": "oXyz..." }请求参数
| 字段 | 类型 | 必填 | 约束 |
|---|---|---|---|
pay_method | string | 是 | alipay_wap(支付宝 wap)/ wechat_h5(微信 H5)/ native(支付宝订单码扫码)/ wechat_jsapi(微信内 JSAPI 直出,须带 openid) |
openid | string | wechat_jsapi 必填 | 16~64 字符;支付者在你自有认证公众号网页授权(snsapi_base)下的 openid,须与商户通道配置的渠道应用ID(channel_app_id)同源 |
响应 data(凭证按方式四选一)
| 字段 | 说明 |
|---|---|
pay_method | 回显请求的方式 |
h5_url | wechat_h5 / alipay_wap:302 跳转地址 |
code_url | native:二维码内容(你自行渲染二维码) |
jsapi_config | wechat_jsapi:微信 JS-SDK 调起参数(appId/timeStamp/nonceStr/package/signType/paySign,appId 为商户公众号 appid),用于拉起 wx.chooseWXPay / WeixinJSBridge |
响应 data 示例:
json
{
"pay_method": "wechat_jsapi",
"h5_url": "...",
"code_url": "...",
"jsapi_config": {
"appId": "...", "timeStamp": "...", "nonceStr": "...",
"package": "...", "signType": "...", "paySign": "..."
}
}wechat_h5/alipay_wap→ 302 跳h5_url;native→ 将code_url渲染为二维码(支付宝订单码),用户扫码支付;wechat_jsapi→ 用jsapi_config调微信 JS-SDK 拉起支付(见下节)。
前置:订单须为 pending 且未过期(否则 409 ORDER_NOT_PAYABLE)。重复调用资金安全(平台状态机防双付,重复支付自动原路退款);但每次调用独立路由,支付凭证以当次响应为准,请勿缓存重放。
直出时序
微信内可改用
wechat_jsapi直出(sub_appid 模式):需满足下节前置条件,openid换取与 JS-SDK 调起均在你自有公众号体系内完成。
wechat_jsapi:微信内 JSAPI 直出(sub_appid 模式)
微信内 H5 页面可不经收银台直接拉起 JSAPI 支付。平台以商户主体通道配置的渠道应用ID(channel_app_id)作为 sub_appid 向微信服务商下单,你传入的 openid 作为 payer.sub_openid;jsapi_config.appId 即该渠道应用ID 对应的公众号 appid。
前置条件(任一未满足将无法支付):
- 你的认证服务号 appid 已与该商户特约商户号绑定(微信服务商平台 → AppID 授权管理,每商户上限 5 个);
- 承载支付页面的 H5 目录已配入该公众号「JSAPI 支付授权目录」(上限 5 个);
- 平台运营已在管理后台为商户微信主体通道配置渠道应用ID(channel_app_id)。
openid 获取:在你自有公众号网页内做微信网页授权(snsapi_base,静默授权)换取用户 openid,随 prepay 请求传入。openid 必须与上述公众号 appid 同源。
报错对照
| 现象 | 含义 | 处理 |
|---|---|---|
400 PARAM_INVALID,message openid is required for wechat_jsapi (16..64 characters) | 缺 openid 或长度不在 16~64 | 补传/核对 openid |
| 503 CHANNEL_SUB_APPID_MISSING | 商户通道未配渠道应用ID(运营配置项) | 联系平台运营配置后重试 |
400 PARAM_INVALID,message openid does not belong to the app id bound to this payment channel | openid 与渠道应用ID 不同源(网页授权用了别的公众号) | 检查网页授权所用公众号与绑定关系 |
已知限制:商户存在多条微信 JSAPI 主体通道时,路由不感知渠道应用ID 是否已配置,可能选中未配置的通道报 503;平台运营为该商户全部微信 JSAPI 通道配置渠道应用ID 后即规避。openid 为瞬态字段不入库,排障请配合平台日志与微信商户平台核对。