更加准确的描述点击如下链接

https://www.cnblogs.com/dandan1924/p/8359620.html

一.首先,需要确认是否在微信开通了这个服务,如果开通了,如下图

二.就是前段和后台互调。

??微信h5支付官网地址:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4
根据官网解释,前段要做的事情很简单:就是在用户点击微信支付按钮的时候,跳转到后台返回的MWEB_URL即可。

但是,官网说:
注意:

1.需对redirect_url进行urlencode处理
2.由于设置redirect_url后,回跳指定页面的操作可能发生在:1,微信支付中间页调起微信收银台后超过5秒 2,用户点击“取消支付“或支付完成后点“完成”按钮。因此无法保证页面回跳时,支付流程已结束,所以商户设置的redirect_url地址不能自动执行查单操作,应让用户去点击按钮触发查单操作。回跳页面展示效果可参考下图

也就是说跳转MWEB_URL打开微信支付页面和MWEB_URL返回我们自己的页面是同时发生的。那么怎么返回支付成功页面呢?官网给出的方案是给一个提示框,让用户点击再去判断有没有支付
ps:经过测试:1.小米的没有返回支付成功页面,直接返回了支付选择页面,没有任何反应
      2.华为有提示框,但是他们没有直接跳转url,是通过form表单提交去跳转的。这样导致的结果是:ios跳转微信支付页面会有一个弹窗,如果是ios的用户点了取消,那么再次点击,也去不了支付页面,除非刷新页面。而安卓用户点击了取消,必须清缓存才能去支付成功页面。体验很不好
我们的解决方案:

if(paytype==2){//微信支付if(isWeiXin()){//微信公众号支付var apiConfig=back.data.wxpaysignmap;// alert(JSON.stringify(apiConfig));function onBridgeReady(){WeixinJSBridge.invoke('getBrandWCPayRequest', {"appId":apiConfig.appId,//公众号名称,由商户传入     "timeStamp":apiConfig.timeStamp,//时间戳,自1970年以来的秒数     "nonceStr":apiConfig.nonceStr,//随机串     "package":apiConfig.package,   "signType":apiConfig.signType,//微信签名方式:     "paySign":apiConfig.paySign //微信签名},function(res){     if(res.err_msg == "get_brand_wcpay_request:ok" ) {window.location.href="paysuccess.html?tradeno="+tradeno;//到支付成功页面}else if(res.err_msg == "get_brand_wcpay_request:fail" || res.err_msg=="get_brand_wcpay_request:cancel"){This.isAjax=true;} }); }if (typeof WeixinJSBridge == "undefined"){if( document.addEventListener ){document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);}else if (document.attachEvent){document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);}}else{onBridgeReady();}This.initQuestSuc(back.data.tradeno);This.isAjax=true;return;}if(IsPC()){//pc端的微信支付//微信支付This.returnpay=true;$(".paylist_tit").addClass("hide");$(".pay_tit").html("微信支付");$(".paytype_con").addClass("hide");$(".ercodecon").fadeIn(100);$("#ercode").qrcode(back.data.wxpaycodeurl);This.canvasInter=setInterval(function(){if($("#ercode").find("canvas").length>0){var canvas=$("#ercode").find("canvas").get(0);  /***<p>苹果用户保存图中二维码,发送至微信会话<br>在微信会话中长按识二维码完成支付</p>****/var tips_html='<div class="wechat_tips"><p>1. 请长按二维码或手机截图先保存至相册<br>2. 打开微信客户端,将二维码图片发送至微信会话<br>3. 在微信会话中打开并长按识别二维码完成支付</p></div>';if(IsPC()){tips_html='<div class="wechat_tips"><p>请打开微信客户端扫描二维码支付</p></div>';}$("#ercode").html('<img src="'+canvas.toDataURL("image/png")+'" style="width:2.8rem; height:2.8rem; padding:5px; display:block; background:#fff; margin:0 auto;" />'+tips_html);This.canvasInter=null;clearInterval(This.canvasInter);}})This.isercode=true;    This.initQuestSuc(back.data.tradeno);                }else{//重点:第一步:h5微信支付setTimeout(function() {$.Dialog({//出弹窗。让用户确认是否支付成功(一开始在此处出弹窗,但是经过测试发现,ios系统的浏览器不适用,只适用于安卓浏览器。所以用了当前url和redirect_url区分开的方法=====>总之:这个地方弹窗可删除)cname:"owhat_dialog",title:"<em style='font-weight:500;padding-top:0.2rem;display:block;'>请确认支付是否已成功</em>",tips:"<p style='text-align:left;padding-top:0.1rem;'>1.如果您已打开微信且完成支付,请点击“我已支付”按钮</p><p style='text-align:left;padding-top:0.1rem;'>2.如果您没有安装微信支付客户端,请点击“取消”并选择其他支付方式付款</p>",close_btn:false,confirm_btn:true,//确认按钮cancel_btn:true,//取消按钮confirm_art:"我已支付",cancel_art:"取消",cancel_call:function(){//用户点击取消$.CloseDialog();clearCookie("h5weixinpay");//用户点击就清cookie},confirm_call:function(){//用户点击确认支付$.CloseDialog();clearCookie("h5weixinpay");//用户点击就清cookieThis.ispaysuccess(back.data.tradeno);//去后台调接口询问是否成功。}});                            }, 1000);setCookie("h5weixinpay","1",1);//1表示没有弹窗,0表示弹窗了,存贮一天(判断是否出弹窗)window.location.href = back.data.wxpaymweburl+"&redirect_url=url;//此处写上需要跳转的url(此处的url需要和当前页面的url区分开来,以此来判断如果是这个链接就出弹窗,然后用存的
h5weixinpay的判断是否显示弹窗) } }
第二步:已进入页面就判断是否有cookie。然后判断出弹窗
if(!isWeiXin()){var h5weixinpay=getCookie("h5weixinpay") ? getCookie("h5weixinpay") : null; if(h5weixinpay!=null&&This.tradeno!=null){//微信外支付返回判断(如果连接上有tradeno并且有cookie)$.Dialog({cname:"owhat_dialog",title:"<em style='font-weight:500;padding-top:0.2rem;display:block;'>请确认支付是否已成功</em>",tips:"<p style='text-align:left;padding-top:0.1rem;'>1.如果您已打开微信且完成支付,请点击“我已支付”按钮</p><p style='text-align:left;padding-top:0.1rem;'>2.如果您没有安装微信支付客户端,请点击“取消”并选择其他支付方式付款</p>",close_btn:false,confirm_btn:true,//确认按钮cancel_btn:true,//取消按钮confirm_art:"我已支付",cancel_art:"取消",cancel_call:function(){$.CloseDialog();clearCookie("h5weixinpay");},confirm_call:function(){$.CloseDialog();clearCookie("h5weixinpay");This.ispaysuccess(This.tradeno);//去后台调接口询问是否成功。
} }); } }

注意:本文章是从其他网站迁移过来的,是 2018年1月26日写的,后续可能已经有开发人员相处更合理的优化方案

微信h5支付前端代码相关推荐

  1. 小程序支付及H5支付前端代码小结

    小程序支付和H5支付前端都不需要引入其他的js , 只需要后台将相关的参数 ( timeStamp: '', nonceStr: '', package: '', signType: 'MD5', p ...

  2. React中微信H5支付实现代码

    一.请求自己服务器获取data数据 二.解析获取数据 const urlArr = window.location.href;const hostUrl = urlArr.split("/& ...

  3. WebView调用微信H5支付

    相关文章:WebView启动支付宝客户端支付失败的解决办法 好长时间没有写博客了,感觉自己颓废了不少,这也取决于移动端逐渐趋于稳定的原因,随着自己公司业务的不断扩大,还是会遇到种种问题,最近手上一个需 ...

  4. 微信H5支付,HTML页面代码

    微信H5支付,前端HTML代码 说明 test.com是服务器地址,createH5Order接口要调用微信的统一下单接口,并返回微信返回的mwebUrl. <html> <body ...

  5. 微信支付—微信H5支付「非微信内部浏览器-QQ/UC浏览器等」

    前言 微信支付-微信H5外部浏览器支付「本文」 微信H5内部浏览器支付「待写」 PC端扫码支付「待写」 一直计划着写一写微信支付相关的文章,希望能加深一下自己的印象,拖了一天又一天- 最近终于空出时间 ...

  6. 微信h5支付,微信外浏览器支付实现

    对接第三方比较重要的点都有什么? 1.按规则 2.单独封装 3.做好出入参 2021-02-07修改 看一下官方文档还是很必要的,知道必不可少的参数是什么:https://pay.weixin.qq. ...

  7. java微信网页支付_java实现微信H5支付

    原标题:java实现微信H5支付 前面做了app微信支付的回调处理,现在需要做微信公众号的支付,花了一天多时间,终于折腾出来了!鉴于坑爹的微信官方没有提供Java版的demo,所以全靠自己按照同样坑爹 ...

  8. 微信h5支付在iframe弹窗的坑

    官方接入文档 参考链接: 微信H5支付遇到的坑 微信H5支付iframe在苹果Safari的问题 在苹果Safari浏览器通过iframe唤起微信或支付宝APP支付 遇到的问题 网络环境未能通过安全验 ...

  9. 手把手教你完成微信H5支付

    关于微信支付支付,个人觉得相比支付宝复杂的太多了,但是慢慢理解起来还是很简单的 1,首先准备工作,下方是一个时序图,认真看,图看懂了做起来真的很简单 , 2,第二按照上图说明,开始下单时,调用微信下单 ...

最新文章

  1. python socket编程
  2. 10.9 ping:测试主机之间网络的连通性
  3. 99. Recover Binary Search Tree 恢复二叉搜索树
  4. rsync 一条命令实现远程文件传输
  5. 代码创建按钮,文本输入框
  6. 随想录(c语言的优缺点)
  7. canal与mysql高可用_canal 高可用介绍(4)
  8. 使用prometheus+grafana监控k8s集群
  9. 神经网络pid控制原理框图,神经网络pid控制原理图
  10. linux RDP 共享磁盘,USB Over Network - USB Server for Linux (RDP使用讀卡機殘念)
  11. 修复Mac中Mounty无法显示的文件
  12. 计算机在英语中有哪些运用,计算机在英语教学中的运用
  13. vlan的几种划分方式
  14. 企业微信与帆软BI内网服务器集成
  15. 若依前后端分离版本集成Mybatis-plus
  16. 03 - 滤波器组典型相关分析(Filter bank canonical correlation analysis,fbcca)
  17. ArcToolbox的运行结果发布为GP服务
  18. AI CC2019中文破解版软件下载及安装教程(附破解包)
  19. h5拼手气红包java_Java模拟微信发红包(普通红包、拼手气红包)
  20. 18种常见室内植物的功效

热门文章

  1. 按字母A——Z排列的中国城市(地级市)json数据
  2. 关于线的做法T568A与T568B网络故障
  3. 【CV/Matlab系列】基于matlab的视频质量仿真评价系统设计【含Matlab源码】
  4. 基于JAVA的网上订餐外卖系统(Java+MySQL)
  5. 工作一年了,回顾过去一年的点滴(一)
  6. CSS选择器、网页美化(字体、阴影、列表、渐变)
  7. 无机铜杀真菌剂行业调研报告 - 市场现状分析与发展前景预测
  8. linux 日历软件,云日历linux版下载
  9. 多个工作表按数字大小排序_我的数字工作区
  10. selenium 教程