业务场景

应公司需求,需要在项目中接入支付宝h5支付,微信h5支付和微信公众号支付功能,本编主要讲述支付踩坑和h5支付后跳转的回调问题

微信h5支付

微信h5支付时需要校验下单域名,微信从referer中获取到后与微信后台中设置的支付域名进行校验,若不符则不能支付成功,报错如下后端希望由前端在下单时传入referer瞒过微信校验,然而前端并不能直接改变’源’,所以只能尽可能在保证代码逻辑的前提下,发布到测试环境(微信校验的referer域名)去测试支付,

下单成功的返回值如下"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn",redirect_url可由前端自行拼接,作为支付成功后的回调地址,其中"?"后的参数选需要使用encodeURIComponent进行转码,否则参数会被删除,回调只有域名,血淋淋的教训-…-
楼主回调如下

var url = "https://" + window.location.host + "/dev/?id=1
url = encodeURIComponent(url)
window.location.href = res.h5Pay + "&redirect_url=" + url

res.h5Pay为下单成功未拼接redirect_url的返回值,可参考微信官方文档

微信公众号支付

微信公众号支付比较无脑,走流程就行,登录=>token=>下单=>支付
下单成功后会返回微信支付所需要的参数,传入微信支付方法中就ok,详细说明可参考微信官方文档

function weixinPay (params) {WeixinJSBridge.invoke('getBrandWCPayRequest',{"appId": params.appId,              //公众号名称,由商户传入"timeStamp": params.timeStamp,      //时间戳,自1970年以来的秒数"nonceStr": params.nonceStr,        //随机串"package": params.package,"signType": params.signType,        //微信签名方式"paySign": params.paySign           //微信签名},function(res) {if (res.err_msg === "get_brand_wcpay_request:ok") {console.log('支付成功')} else if (res.err_msg === "get_brand_wcpay_request:cancel") {console.log('取消支付')} else if (res.err_msg === "get_brand_wcpay_request:fail") {console.log('支付失败')}})
}

:在此告诫前端的小伙伴们,不要在微信公众号支付的成功回调中调后端的方法去通知后端该订单已支付,微信统一下单文档中有介绍后端如何配置微信支付成功后的异步回调,由于微信公众号支付成功后不会刷新页面,所以可以在res.err_msg === "get_brand_wcpay_request:ok时做一些前端的逻辑处理

支付宝h5支付

相对来说,支付宝的h5支付还是比较友好的,不需要校验referer,回调支付后回调地址也没提供前端拼接的方法,对前端来说只是调了个下单接口,打开支付宝支付,完成支付后只需要处理下页面刷新的问题就可以,本人下单成功后代码如下

 window.location.href = res.alipay_str

对比微信h5支付少了redirect_url的转码和拼接

首次发文,有错请指出,会及时纠正

支付宝H5,微信H5,微信公众号支付回调相关推荐

  1. 第三方微信支付,WAP、H5、APP、公众号支付的区别

    你说一个微信支付被腾讯搞了N个版本出来,是技术问题还收费原因不得而知.公众号支付,H5(wap)支付,APP支付.看得小编一头雾水. 带点N个疑问? 1.公众号支付是在公众号里支付,支众号里引入的三方 ...

  2. uniapp之APP/微信小程序/公众号支付

    涉及到微信支付的都需要从后端接口获取支付配置信息: await this.$http({apiName:"wxPayConfig",type:"POST",da ...

  3. 【微信开发】---- 公众号支付

    公众号支付就是在微信里面的H5页面唤起微信支付,不用扫码即可付款的功能.做这个功能首先要明确的就是,只有和商户号mch_id匹配的appid才能成功支付.商户号在注册成功的时候就会将相关信息发送到邮箱 ...

  4. 微信公众号支付回调函数“time_end”的坑

    在微信支付成功后,微信是会给我们的回调地址发送成功信息,具体可以看官方文档https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7 返回 ...

  5. vue 微信公众号支付接口_基于vue的h5项目之支付宝支付与微信支付

    本文仅记录基于vue开发h5项目过程中使用支付宝和微信支付过程中的重点与槽点,仅为前端部分,如有疏漏不正之处,请于文末评论探讨.注意:标红部分灰常重要,仔细阅读官方文档非常重要,耐心非常重要,细心非常 ...

  6. 微信公众号支付(JSAPI)对接备忘

    0 说明 本文里说的微信公众号支付对接指的是对接第三方支付平台的微信公众号支付接口. 非微信支付官方文档里的公众号支付开发者文档那样的对接.不过,毕竟腾讯会把一部分渠道放给银行或有支付牌照的支付机构, ...

  7. 微信公众号支付的那些坑

    在之前记录了一下做微信公众号支付的过程,但是有些混乱,之前做的内个也不是直接接的微信官方,而是转接的别人在接的微信官方,他们赚个手续费,在这之后因为app停用了一段时间,上游公司把我们的appid给关 ...

  8. h5通过php微信支付宝支付,用H5调用支付微信公众号支付的解析

    这篇文章主要为大家详细介绍了微信公众号支付H5调用支付,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 最近项目需要微信支付,然后看了下微信公众号支付,虽然不难,但是细节还是需要注意的,用了大半天时 ...

  9. 微信h5支付和公众号支付、支付宝h5支付

    1.微信h5支付: 首先是支付参数的构建,这个需要通过后台进行组装,后台会跟微信进行数据的交互,而你所需要做的是拿到返回的数据,然后传递给微信的JSSDK,由微信的JSSDK进行后续操作,比如说先跳转 ...

最新文章

  1. 滴滴笔试编程题第一题
  2. python源码精要(10)-python源代码阅读概要(1)
  3. 为什么销售员贷款比较难?
  4. java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.classes.views.index_jsp
  5. 单独编译使用WebRTC的音频处理模块 - android
  6. MapReduce Shuffle详解
  7. Python移植MATLAB的巴特沃斯滤波器,椭圆滤波器
  8. Debian11 安装Chromium浏览器
  9. mysql查询财两个人信息_MYSQL学习与数据库综合实验—数据查询实验
  10. Ubuntu16.04装拼音/Sogou遇到的问题(卸载/重装 Fcitx / Fcitx Configuration、卸载/重装Sogou)
  11. 完美解决cx_oracle连接us7ascii字符集数据库
  12. 计算机二级买那几本书,计算机二级公共基础知识买哪本书复习好?重点在哪..._公共英语考试_帮考网...
  13. 一条校招/社招潜规则~
  14. java时间戳与LocalDateTime常用转换方式
  15. java 时区 edt_JAVA TimeZone发行EDT对EST
  16. 文献管理软件 linux,5款常用的文献管理软件
  17. Datawhale 图神经网络task4
  18. 基于遥感的大蒜种植面积量测
  19. 6-TCP 协议(序号和确认号)
  20. MyEclipse上CVS的使用说明

热门文章

  1. 十六进制与rgb颜色转换
  2. 点云损失函数Chamfer Distance 和 Earth Mover‘s Distance
  3. 数开头的成语有哪些_一至十数字开头的成语有哪些?
  4. 【仪器常用操作方法】TDS1012示波器常用操作方法
  5. [Angular实战网易云]——15、歌词渲染
  6. 1.Windows server 2022 AD域的安装与如何加入域中
  7. 希望计算机专业同学都知道这些老师
  8. Python 如何截取字符函数
  9. 鸿蒙系统下拉菜单,华为鸿蒙系统官方
  10. 安装算量软件快速选择计算图元