vue项目中的支付功能实现(微信支付和支付宝支付)


Posted in Vue.js onFebruary 18, 2022

项目中常见的支付方式    

  • 支付宝支付   
  • 微信支付   
  • 余额支付(也需要支付宝或微信充值)

注意:本文仅从前端角度展开讲解

支付宝支付

项目难点:

页面是h5网页,用支付宝支付必须得到支付宝授权,调用支付宝的api。

支付宝支付的一般过程是:

    调用订单接口,获得订单号,支付金额等。
    传递订单号,金额 至预支付接口
    后台会返回来一个form,然后提交form自动跳转到支付宝支付页面

支付过程:

    下图为为接口文档,支付接口

vue项目中的支付功能实现(微信支付和支付宝支付)

vue项目中的支付功能实现(微信支付和支付宝支付)

    当我们选中支付宝,radio=1;
    当我们点击支付按钮,pay()方法执行
    此时我们调用后端支付接口,传入接口文档要求字段,订单号,金额等。
    后台回传给我们一个{code:201,data:""};
    此时我们把form注入到我们页面中,让form表单提交,跳转到支付宝页面

topay(){
      switch(this.radio){
        case '3':
        this.yuer();
        break;
        case '1':
        this.zhifubao();
        case '0':
        this.getWechatCode();
      }
    },
   zhifubao(){
     payByZhifubao(
       {
         OutTradeNo:'Oct20200909095646265303127',//商户订单号,商户网站订单系统中唯一订单号,必填 。需要保证商户端唯一。
          Subject: "手机网站支付测试",//主题
          ProductCode: "QUICK_WAP_WAY",
          body: "手机网站支付描述信息",//商品描述,可空
          TotalAmount: 20 //付款金额,必填        }
     ).then(res=>{
       console.log(res);
        if (res.code === 201) {
            //将数据存到vuex中
            // this.$store.dispatch('addAliFrom', res.data.data)
            this.html = res.data;
            var form = res.data;
            const div = document.createElement("div");
            div.innerHTML = form; //此处form就是后台返回接收到的数据
            document.body.appendChild(div);
            document.forms[0].submit();
            //return this.$router.push('/aliPay')
          } else {
            return alert(res.data.msg);
          }
     })
    },

微信支付

步骤:
微信支付后台程序员会给你返一个地址,首先我们需要安装qrcodejs2将地址转换成二维码,需要先npm install qrcodejs2
然后需要一个div来存放这个微信二维码,宽高样式各位自己可以去css里写,我在这里还加了一个loading,有需要的也可以自己加

<div id="wechatcode" v-loading="loading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)">
</div>

导入模块

import QRCode from 'qrcodejs2' // 引入qrcode

下面是接口数据获取然后操作二维码

getWechatCode() {
                Models
                    .getModel("wechatpay")
                    .get({
                        orderId:this.orderId
                    })
                    .then(res => {
                        if(res.data.code == 200){
                            this.wechatPayUrl = res.data.resultData
                            if(!this.flag){
                            //重点是这里,其余的是为了我的切换业务逻辑和接口
                                let wechatcode = new QRCode('wechatcode', {
                                    width: 200,
                                    height: 200,
                                    text: this.wechatPayUrl, // 二维码地址
                                    colorDark: "#000",
                                    colorLight: "#fff",
                                })
                            }
                            this.flag = true
                            this.loading = false
                            this.isWechatCodeShow = true
                        }
                    })
        },

在微信扫描支付完之后,后台人员可以拿到支付成功结果,返给前台人员,那么前端人员只能不断去调接口查询是否已支付,在这里我们可以用生命周期来做轮询,在跳出之后需要销毁

mounted() {
        this.getWechatCode()
        //实现轮询
        this.interval = window.setInterval(() => {
        setTimeout(this.getOrderStatus(), 0);
        }, 3000);
        
    },
    beforeDestroy() {
        //清除轮询   
        clearInterval(this.interval)
        this.interval = null
    },

这里的`getOrderStatus()方法是为了查询后台支付状态的,如果成功跳转到支付页面,做个If else判断即可

到此这篇关于vue项目中的支付功能实现(微信支付和支付宝支付)的文章就介绍到这了,更多相关vue项目支付内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
用vue设计一个日历表
Dec 03 Vue.js
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 Vue.js
vuex页面刷新导致数据丢失的解决方案
Dec 10 Vue.js
如何在vue中使用kindeditor富文本编辑器
Dec 19 Vue.js
浅析vue中的nextTick
Dec 28 Vue.js
Vue中的nextTick作用和几个简单的使用场景
Jan 25 Vue.js
Vite和Vue CLI的优劣
Jan 30 Vue.js
vue3.0 自适应不同分辨率电脑的操作
Feb 06 Vue.js
vue-cli中实现响应式布局的方法
Mar 02 Vue.js
Vue的过滤器你真了解吗
Feb 24 Vue.js
vue ref如何获取子组件属性值
Mar 31 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
vue3获取当前路由地址
Feb 18 #Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 #Vue.js
vue项目支付功能代码详解
Feb 18 #Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 #Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 #Vue.js
详解Vue项目的打包方式(生成dist文件)
Jan 18 #Vue.js
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 #Vue.js
You might like
php实现爬取和分析知乎用户数据
2016/01/26 PHP
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
2012/10/11 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
Express.JS使用详解
2014/07/17 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
python学习 流程控制语句详解
2016/06/01 Python
python2.7到3.x迁移指南
2018/02/01 Python
Python 使用with上下文实现计时功能
2018/03/09 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
关于HTML5+ API plusready的兼容问题
2020/11/20 HTML / CSS
毕业生自我鉴定
2013/12/04 职场文书
师说教学反思
2014/02/07 职场文书
就业协议书的作用
2014/04/11 职场文书
梅花魂教学反思
2014/04/25 职场文书
小学六一主持词开场白
2015/05/28 职场文书
法律讲堂观后感
2015/06/11 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
资产移交协议书
2016/03/24 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang