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 13 Vue.js
vue实现登录、注册、退出、跳转等功能
Dec 23 Vue.js
Vue实现简易购物车页面
Dec 30 Vue.js
vue-quill-editor插入图片路径太长问题解决方法
Jan 08 Vue.js
vue组件是如何解析及渲染的?
Jan 13 Vue.js
vue form表单post请求结合Servlet实现文件上传功能
Jan 22 Vue.js
解决vue项目本地启动时无法携带cookie的问题
Feb 06 Vue.js
用vite搭建vue3应用的实现方法
Feb 22 Vue.js
vue backtop组件的实现完整代码
Apr 07 Vue.js
解读Vue组件注册方式
May 15 Vue.js
Vue3.0 手写放大镜效果
Jul 25 Vue.js
如何优化vue打包文件过大
Apr 13 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
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
php中使用GD库做验证码
2016/03/31 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
分享JS表单验证源码(带错误提示及密码等级)
2020/01/05 Javascript
[03:56]显微镜下的DOTA2第十一期——鬼畜的死亡先知播音员
2014/06/23 DOTA
python求众数问题实例
2014/09/26 Python
简单谈谈Python中的反转字符串问题
2016/10/24 Python
Python线程指南详细介绍
2017/01/05 Python
Python单例模式实例详解
2017/03/01 Python
Python探索之Metaclass初步了解
2017/10/28 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
Python版中国省市经纬度
2020/02/11 Python
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
什么是虚拟内存?虚拟内存有什么优势?
2016/02/09 面试题
化工工艺专业求职信
2013/09/22 职场文书
员工拾金不昧表扬信
2014/01/09 职场文书
就职演讲稿范文
2014/05/19 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
关于观后感的作文
2015/06/18 职场文书
上班旷工检讨书
2015/08/15 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript
react 路由Link配置详解
2021/11/11 Javascript