vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题


Posted in Javascript onApril 14, 2020

web端的微信支付可分为JSAPI与H5

JSAPI使用场景为微信内部,而H5支付则是使用在非微信下的外部浏览器。

1.JSAPI

在微信内部可以直接唤起微信浏览器的内置对象 WeixinJSBridge
废话不多说直接上代码:

// 调用后端接口拿到JSAPI支付所需参数,我在beforeRouteEnter的时候调用。
api.apply.jsApiPay(obj).then(res => {
     if (res.data.code === '0000') {
      vm.params = res.data.bean
     } else {
      alert('微信支付调起失败!')
     }
    }).catch(err => {
     alert(err)
    })

// 点击支付时候调用
if (typeof WeixinJSBridge === 'undefined') {
    if (document.addEventListener) {
     document.addEventListener('WeixinJSBridgeReady', this.onBridgeReady(this.params), false)
    } else if (document.attachEvent) {
     document.attachEvent('WeixinJSBridgeReady', this.onBridgeReady(this.params))
     document.attachEvent('onWeixinJSBridgeReady', this.onBridgeReady(this.params))
    }
   } else {
    this.onBridgeReady(this.params)
   }


onBridgeReady (params) {
   const that = this
   WeixinJSBridge.invoke(
    'getBrandWCPayRequest',
    {
     appId: params.appId, // 公众号名称,由商户传入
     timeStamp: params.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
     nonceStr: params.nonceStr, // 支付签名随机串,不长于 32 位
     package: params.prepay_id, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
     signType: params.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
     paySign: params.paySign // 支付签名
    },
    function (res) {
     if (res.err_msg === 'get_brand_wcpay_request:ok') {
      that.queryOrder() // 这里是查询订单是否支付完成,然后执行成功和失败的业务逻辑
     } else if (res.err_msg === 'get_brand_wcpay_request:fail') {
      alert('支付失败!')
     }
    }
   )
  },

在微信支付的回调函数中,当res.err_msg 为

get_brand_wcpay_request:ok 时,支付状态不一定准确,因此需要调用后端的查询订单接口,查询是否支付完成,然后再执行相应的逻辑。

2、H5支付

h5相对简单,前端只需要跳转到后端返回的链接即可

api.apply.h5Pay({
      title: ''
      orderNum: '',
      expireMinute: 10,
      redirectUrl: `${window.location.origin}/pay/card?orderId=${vm.orderId}`
     }).then(res => {
      vm.h5PayUrl = res.data.bean
      // 查询订单
     }).catch(err => {
      alert(err)
     })

第一步,请求后端接口,需要传支付的标题,订单号,支付时间,重定向链接。

第二部,们只需要点击支付按钮时候跳转至后端返回链接即可。

window.location.href = this.h5PayUrl

需要注意的是H5支付查询订单需要用户去手动触发,因此需要增加一个确定订单的弹层。如图:

vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题

查询订单是否支付成功与JSAPI一致~

到此这篇关于vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题的文章就介绍到这了,更多相关vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
js压缩利器
Feb 20 Javascript
两个DIV等高的JS的实现代码
Dec 23 Javascript
jQuery右键菜单contextMenu使用实例
Sep 28 Javascript
JavaScript中的16进制字符(改进)
Nov 21 Javascript
javascript实现颜色渐变的方法
Oct 30 Javascript
jquery单行文字向上滚动效果示例
Mar 06 Javascript
全面解析Bootstrap图片轮播效果
Dec 03 Javascript
基于Bootstrap3表格插件和分页插件实例详解
May 17 Javascript
详解vue-cli官方脚手架配置
Jul 20 Javascript
详解Vue路由自动注入实践
Apr 17 Javascript
js中关于Blob对象的介绍与使用
Nov 29 Javascript
JS深入学习之数组对象排序操作示例
May 01 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
Apr 13 #Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
Apr 13 #Javascript
vue cli3适配所有端方案的实现
Apr 13 #Javascript
RxJS在TypeScript中的简单使用详解
Apr 13 #Javascript
JS错误处理与调试操作实例分析
Apr 13 #Javascript
JS正则表达式常见函数与用法小结
Apr 13 #Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
Apr 13 #Javascript
You might like
用PHP和ACCESS写聊天室(三)
2006/10/09 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
Adnroid 微信内置浏览器清除缓存
2016/07/11 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
2018/06/19 Javascript
vue 中固定导航栏的实例代码
2019/11/01 Javascript
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
Python实现简单的可逆加密程序实例
2015/03/05 Python
python插入数据到列表的方法
2015/04/30 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
对Python 语音识别框架详解
2018/12/24 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
Python 自由定制表格的实现示例
2020/03/20 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
python Paramiko使用示例
2020/09/21 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
国际领先的学术出版商:Springer
2017/01/11 全球购物
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
演讲主持词
2014/03/18 职场文书
单位租车协议书
2015/01/29 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
2016国培学习心得体会
2016/01/08 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书
Java 关于String字符串原理上的问题
2022/04/07 Java/Android
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技
Android中的Launch Mode详情
2022/06/05 Java/Android