H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。主要用于触屏版的手机浏览器请求微信支付的场景。可以方便的从外部浏览器唤起微信支付。
微信支付的坑很多,特别在平台的设置上:
首先需要APPID,微信支付商户号mch_id,API密钥key,Appsecret(secret),说明在这里
申请入口:登录商户平台-->产品中心-->我的产品-->支付产品-->H5支付
然后设置授权域名,在接口设置中就能找到,包括js接口安全域名和网页授权域名:
网页授权回调域名,用于你支付完毕后回调的域名,将下载的文件放到服务器的根路径,确保可以访问,
然后设置支付域名,设置路径:商户平台-->产品中心-->开发配置中设置域名,
微信官方体验链接:https://wxpay.wxutil.com/mch/pay/h5.v2.php,请在微信外浏览器打开。
H5支付满足条件:
已有H5商城网站,
已经过ICP备案。
通过微信H5支付可以实现在非微信浏览器
外部微信支付的逻辑 最主要的是在后台
主要流程:
1、用户在商户侧完成下单,使用微信支付进行支付
2、由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB
3、统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名“mweb_url”),商户通过mweb_url调起微信支付中间页
4、中间页进行H5权限的校验,安全性检查(此处常见错误请见下文)
5、如支付成功,商户后台会接收到微信侧的异步通知
6、用户在微信支付收银台完成支付或取消支付,返回商户页面(默认为返回支付发起页面)
7、商户在展示页面,引导用户主动发起支付结果的查询
8、商户后台判断是否接到收微信侧的支付结果通知,如没有,后台调用我们的订单查询接口确认订单状态
9、最终将支付的结果返回给客户
前端主要问题是支付后是否返回原页面还是去往新页面
这取决于redirect_url , 不过 redirect_url 需要进行 urlencode 处理
// 则拼接后的地址为
MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn
常见错误:
1、网络环境未能通过安全验证,请稍后再试(IP改变导致的)
2、商家参数格式有误,请联系商家解决(H5支付的referer为空导致)
3、商家存在未配置的参数,请联系商家解决(H5支付的域名问题)
4、支付请求已失效,请重新发起支付(有效期为5分钟)
5、请在微信外打开订单,进行支付(H5支付不能直接在微信客户端内调起)
本文主要 前端 部分 如果需要查看 后端 代码 请 点击 : 全文 微信外浏览器支付实现