Skip to content

支付发起(收银台与直出)

创建支付成功后,有两种发起支付的模式。

模式 A:收银台(微信内场景默认载体)

引导用户打开 cashier_url。收银台自动识别环境(微信内 JSAPI/浏览器 H5/PC 扫码)、处理 OAuth,完成后跳回:

{return_url}?out_trade_no=...&payment_no=...&status=paid

WARNING

URL 参数仅作页面路由提示,不可作为支付凭证(用户可改写);状态必须以查单或回调为准。

收银台页面由智付通托管:微信内(JSAPI 需平台 OAuth 换 openid)与普通浏览器、扫码场景均可用。

你只需做的

  1. 创建支付拿到 cashier_url 后,用户浏览器(含微信内)直接打开即可;
  2. 可选传 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_methodstringalipay_wap(支付宝 wap)/ wechat_h5(微信 H5)/ native(支付宝订单码扫码)/ wechat_jsapi(微信内 JSAPI 直出,须带 openid
openidstringwechat_jsapi 必填16~64 字符;支付者在你自有认证公众号网页授权(snsapi_base)下的 openid,须与商户通道配置的渠道应用ID(channel_app_id)同源

响应 data(凭证按方式四选一)

字段说明
pay_method回显请求的方式
h5_urlwechat_h5 / alipay_wap:302 跳转地址
code_urlnative:二维码内容(你自行渲染二维码)
jsapi_configwechat_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_openidjsapi_config.appId 即该渠道应用ID 对应的公众号 appid。

前置条件(任一未满足将无法支付):

  1. 你的认证服务号 appid 已与该商户特约商户号绑定(微信服务商平台 → AppID 授权管理,每商户上限 5 个);
  2. 承载支付页面的 H5 目录已配入该公众号「JSAPI 支付授权目录」(上限 5 个);
  3. 平台运营已在管理后台为商户微信主体通道配置渠道应用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 channelopenid 与渠道应用ID 不同源(网页授权用了别的公众号)检查网页授权所用公众号与绑定关系

已知限制:商户存在多条微信 JSAPI 主体通道时,路由不感知渠道应用ID 是否已配置,可能选中未配置的通道报 503;平台运营为该商户全部微信 JSAPI 通道配置渠道应用ID 后即规避。openid 为瞬态字段不入库,排障请配合平台日志与微信商户平台核对。