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 相关文章推荐
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
Jan 04 Javascript
JavaScript创建类/对象的几种方式概述及实例
May 06 Javascript
JavaScript实现GriwView单列全选(自写代码)
May 13 Javascript
JavaScript修改浏览器tab标题小技巧
Jan 06 Javascript
AngularJS模块详解及示例代码
Aug 17 Javascript
用js实现简单算法的实例代码
Sep 24 Javascript
JavaScript中const、var和let区别浅析
Oct 11 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
Feb 14 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
Nov 30 Javascript
React中使用UMEditor的方法示例
Dec 27 Javascript
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
动态规划之使用备忘录来改进Javascript函数
Apr 07 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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
php表单提交问题的解决方法
2011/04/12 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
2019/04/16 PHP
在vs2010中调试javascript代码方法
2011/02/11 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
基于javascript实现页面加载loading效果
2020/09/15 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
JQuery实现定时刷新功能代码
2017/05/09 jQuery
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
JavaScript阻止表单提交方法(附代码)
2017/08/15 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
python使用Berkeley DB数据库实例
2014/09/26 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
详解Python中openpyxl模块基本用法
2021/02/23 Python
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
DJI大疆德国官方商城:大疆无人机
2018/09/01 全球购物
公司财务工作总结的自我评价
2013/11/23 职场文书
幼儿评语大全
2014/04/30 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
详解JS ES6编码规范
2021/05/07 Javascript