JSAPI支付是什么?适用哪些场景?
JSAPI支付(又名公众号支付)是微信支付提供的核心支付能力之一,指用户在微信客户端内打开商户H5页面,直接拉起微信支付收银台完成付款的支付方式,它依托微信生态,具备开发成本低、场景适配灵活、用户体验流畅等特点,广泛应用于线上线下各类商户场景:
线上场景

商户通过微信公众号、朋友圈等渠道触达用户,用户在微信内打开商户H5商城、服务页面,确认商品或服务后直接完成支付。
- 公众号内的知识付费课程购买
- 餐饮品牌的线上外卖点单
- 电商平台的微信端商品结算
线下场景
商户无需铺设传统收银设备,只需张贴收款二维码,用户扫码后进入H5页面输入金额即可支付,适合:
- 个体小店、路边摊等轻量级收款需求
- 展会、快闪店等临时场景的快速收款
2026最新开发流程全步骤
JSAPI支付的开发需遵循微信支付官方规范,核心流程分为商户下单→调起支付→用户支付→订单确认→对账退款五大环节,以下是2026年最新的详细步骤:
商户下单:生成预支付会话标识
商户后端调用JSAPI/小程序下单接口,传入关键参数获取prepay_id(预支付交易会话标识),这是调起支付的核心凭证。
- 必填参数:
openid:用户在商户公众号下的唯一标识(需通过微信授权获取)total_fee:订单总金额(单位:分)body:商品或服务描述
- 重要参数说明:
time_expire:可设置订单支付截止时间,超出后用户无法支付,需商户主动关单;默认有效期7天prepay_id:有效期2小时,过期需重新调用下单接口获取
- 注意事项:前端下单按钮需做防抖处理,避免用户重复点击导致重复下单
配置授权目录,调起支付
- 前置配置:登录微信商户平台,在“产品中心→开发配置”中设置JSAPI支付授权目录,只有配置过的域名下页面才能调起支付
- 前端调起:通过微信浏览器内置的
WeixinJSBridge对象调用支付接口,传入appId、prepay_id、签名等参数,示例代码如下:WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId":"wx2421b1c4370ec43b", //公众号ID,由商户传入 "timeStamp":"1395712654", //时间戳,自1970年以来的秒数 "nonceStr":"e61463f8efa94090b139993507c857f", //随机串 "package":"prepay_id=wx2014001365225073ddb10000", "signType":"RSA", //签名方式,v3版本推荐RSA "paySign":"oR9d8PuhnIc+YZ8cBHFCwfgpaK9gd7vaRvkYD7rthRAZ\/X+QBhcCYL21N7cHCTUxbQ+EAt6Uy+lwSN22f5YZvI45MLko8Pfso0jm46v5hqcVwrk6uddkGuT+Cdvu4WBqDzaDjnNa5UK3GfE1Wfl2gHxIIY5lLdUgWFts17D4WuolLLkiFZV+JSHMvH7eaLdT9N5GBovBwu5yYKUR7skR8Fu+LozcSqQixnlEZUfyE55feLOQTUYzLmR9pNtPbPsu6WVhbNHMS3Ss2+AehHvz+n64GDmXxbX++IOBvm2olHu3PsOUGRwhudhVf7UcGcunXt8cqNjKNqZLhLw4jq\/xDg==" //签名 }, function(res){ if(res.err_msg == "get_brand_wcpay_request:ok" ){ // 前端回调成功,需后端查单确认真实状态 } } );
用户支付与订单状态确认
用户在微信收银台完成支付/取消支付后,会返回商户H5页面:
- 前端回调:
WeixinJSBridge会返回支付结果,但不可仅依赖前端回调判断订单状态(存在篡改风险) - 后端校验:商户必须调用查询订单API确认订单真实状态,同时微信支付会主动发送支付成功回调通知(需确保回调地址公网可访问)
- 订单状态流转:
- 未支付(NOTPAY)→ 用户支付成功→ 支付成功(SUCCESS)
- 未支付订单超时/主动关单→ 已关闭(CLOSED)
- 支付成功后发起退款→ 转入退款(REFUND)
对账与退款
- 对账:商户可通过微信商户平台下载每日交易账单,与自身系统数据核对
- 退款:调用退款接口发起退款,支持全额/部分退款,退款资金会原路返回用户支付账户
常见问题与解决方案
前端调起支付报错
-
报错:当前页面的URL未注册
解决方案:检查商户平台“JSAPI支付授权目录”是否配置正确,需精确到支付页面的父级目录(如支付页面为https://xxx.com/order/pay/123,授权目录需配置为https://xxx.com/order/pay/) -
报错:下单账号与支付账号不一致
解决方案:确保下单接口传入的openid是当前支付用户在对应公众号下的唯一标识,需通过微信授权正确获取 -
报错:为保障支付安全,暂不支持从外部进入微信网页并完成支付
解决方案:JSAPI支付仅支持微信内置浏览器,外部浏览器需切换为H5支付
后端接口报错
-
报错:appid和mch_id不匹配
解决方案:确认下单接口传入的sp_appid已与商户号完成绑定,可在商户平台“账户中心→AppID账号管理”中配置 -
报错:商户未申请过证书
解决方案:登录商户平台申请API证书,并在后端请求中正确携带证书序列号和签名
如何判断是否在微信内置浏览器?
可通过以下代码检测:
function detectWeChatBrowser() {
if (typeof navigator === 'undefined') return false;
return navigator.userAgent.includes('MicroMessenger');
}
核心注意事项
- 场景限制:JSAPI支付仅能在微信内置浏览器中使用,外部浏览器需使用H5支付
- 状态可靠性:订单支付状态必须以后端查询结果或微信回调为准,前端回调仅作参考
- 安全规范:敏感参数需加密传输,接口请求需携带正确的签名和证书,避免数据泄露
- 异常处理:针对重复下单、支付超时、退款失败等异常场景,需做好兜底逻辑,保障资金安全
通过以上流程和技巧,开发者可快速实现符合2026年最新规范的JSAPI支付功能,为用户提供流畅、安全的微信内支付体验。










