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 相关文章推荐
JavaScript 权威指南(第四版) 读书笔记
Aug 11 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
Jul 09 Javascript
深入理解javascript作用域和闭包
Sep 23 Javascript
jQuery基于图层模仿五星星评价功能的方法
May 07 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
Sep 14 Javascript
微信小程序 开发之顶部导航栏实例代码
Feb 23 Javascript
vue实现表格增删改查效果的实例代码
Jul 18 Javascript
在vue里面设置全局变量或数据的方法
Mar 09 Javascript
vue webpack实用技巧总结
Apr 24 Javascript
layer.js之回调销毁对话框的例子
Sep 11 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
May 06 Javascript
js实现查询商品案例
Jul 22 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脚本的10个技巧(4)
2006/10/09 PHP
打造计数器DIY三步曲(下)
2006/10/09 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
一个可以显示阴历的JS代码
2007/03/05 Javascript
JS的数组的扩展实例代码
2008/07/09 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
ES6中异步对象Promise用法详解
2019/07/31 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
python进阶教程之异常处理
2014/08/30 Python
python3中dict(字典)的使用方法示例
2017/03/22 Python
python的文件操作方法汇总
2017/11/10 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
Python3处理HTTP请求的实例
2018/05/10 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
Python ini文件常用操作方法解析
2020/04/26 Python
python numpy实现rolling滚动案例
2020/06/08 Python
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
结婚邀请函范文
2014/01/14 职场文书
领导失职检讨书
2014/02/24 职场文书
公证委托书格式
2014/09/13 职场文书
放假通知范文
2015/04/14 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
2021/06/11 Python
动画《平凡职业成就世界最强》宣布制作OVA
2022/04/01 日漫