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下判断 iframe 是否加载完成的完美方法
Oct 26 Javascript
uploadify 3.0 详细使用说明
Jun 18 Javascript
JS中递归函数
Jun 17 Javascript
AngularJS报错$apply already in progress的解决方法分析
Jan 30 Javascript
vue绑定class与行间样式style详解
Aug 16 Javascript
angular4 共享服务在多个组件中数据通信的示例
Mar 30 Javascript
vue+element-ui动态生成多级表头的方法
Aug 28 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
Dec 06 jQuery
使用element-ui table expand展开行实现手风琴效果
Mar 15 Javascript
node实现mock-plugin中间件的方法
Dec 25 Javascript
微信小程序服务器日期格式化问题
Jan 07 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
Jul 31 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类与对象中的private访问控制的疑问
2012/11/01 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
php+html5+ajax实现上传图片的方法
2016/05/14 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
2017/03/05 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
javascript removeChild 使用注意事项
2009/04/11 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
JavaScript实现图片本地预览功能【不用上传至服务器】
2017/09/20 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
Tensorflow简单验证码识别应用
2017/05/25 Python
python读取几个G的csv文件方法
2019/01/07 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
幼师自荐信范文
2013/10/06 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
社区护士演讲稿
2014/08/27 职场文书
一年级语文教学随笔
2015/08/14 职场文书
Pytorch可视化的几种实现方法
2021/06/10 Python
python开发制作好看的时钟效果
2022/05/02 Python
HttpClient实现文件上传功能
2022/08/14 Java/Android