本文总结了前端开发中常见的微信支付三种接入场景及其核心流程。
1. 公众号支付 (JSAPI)
适用场景:微信内置浏览器、微信客户端扫码、企业微信网页。
核心流程
- 网页授权获取 Code:
引导用户访问微信授权链接,获取
code。1https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=123#wechat_redirect - 获取 OpenID:
后端使用
appid、secret和前端传来的code换取用户的openid。 - 统一下单:
后端调用微信统一下单接口,获取支付参数(
timeStamp,nonceStr,package,signType,paySign)。 - 唤起支付:
前端使用
WeixinJSBridge.invoke或wx.chooseWXPay调起支付窗口。
⚠️ 注意事项
- 授权域名:
redirect_uri的域名必须在微信公众平台的“网页授权域名”中配置。 - 支付目录:支付页面的路径必须在微信商户平台配置“JSAPI支付授权目录”。
- AppID:此处使用公众号的 AppID。
2. H5 支付
适用场景:外部移动端浏览器(如 Safari, Chrome)、App 内嵌 H5(非微信环境)。
核心流程
- 后端下单:
后端调用微信统一下单接口(交易类型为
MWEB)。 - 获取跳转链接:
接口返回
mweb_url(即原文中的pay_url)。 - 跳转支付:
前端直接跳转该链接,微信会中间页唤起微信客户端进行支付。
1 2// 示例:跳转并指定支付后的回调页 window.location.href = mweb_url + '&redirect_url=' + encodeURIComponent(window.location.href);
⚠️ 注意事项
- Referer 校验:微信会校验发起支付请求的域名(Referer),需在商户平台配置“H5支付域名”。
- AppID:此处使用商户绑定的移动应用或公众号 AppID。
3. 小程序支付
适用场景:微信小程序原生环境。
核心流程
- 获取登录凭证:
前端调用
wx.login()获取code。 - 获取 OpenID:
后端通过
appid、secret和code换取openid。 - 后端下单:
后端调用统一下单接口,返回支付核心参数(
paySign等)。 - 唤起支付:
前端调用小程序 API 进行支付:
1 2 3 4 5 6 7 8 9wx.requestPayment({ timeStamp: '', nonceStr: '', package: '', signType: 'MD5', paySign: '', success (res) { }, fail (res) { } })
⚠️ 注意事项
- AppID:此处必须使用小程序的 AppID。
- 账号关联:小程序必须已关联到微信商户号。
4. 附录:前端环境判断工具
在发起支付前,我们需要根据当前运行环境(User Agent)来决定调用 JSAPI 支付还是 H5 支付。可以使用以下工具函数进行判断:
| |
补充说明
- 企业微信兼容性:在企业微信(wxwork)中,通常也兼容微信的 JSAPI 支付,但建议参考企业微信官方文档确认是否需要引入特定的 jweixin-module。
- 小程序环境判断:如果您还需要判断是否在小程序 Webview 中,可以增加一个判断条件:
| |