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添加自定义右键菜单的完整实例
Dec 08 Vue.js
vue实现图片裁剪后上传
Dec 16 Vue.js
Vue 组件注册全解析
Dec 17 Vue.js
基于VUE实现简单的学生信息管理系统
Jan 13 Vue.js
vue.js实现点击图标放大离开时缩小的代码
Jan 27 Vue.js
vue2实现provide inject传递响应式
May 21 Vue.js
vue-cropper插件实现图片截取上传组件封装
May 27 Vue.js
Vue中Object.assign清空数据报错的解决方案
Mar 03 Vue.js
Vue OpenLayer 为地图绘制风场效果
Apr 24 Vue.js
Vue组件化(ref,props, mixin,.插件)详解
May 15 Vue.js
vue中data里面的数据相互使用方式
Jun 05 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 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
Jquery遍历checkbox获取选中项value值的方法
2014/02/13 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
bootstrap输入框组代码分享
2016/06/07 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
JS库之wow.js使用方法
2017/09/14 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
vue-cli3 引入 font-awesome的操作
2020/08/11 Javascript
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
Python3基础之条件与循环控制实例解析
2014/08/13 Python
python实现自动更换ip的方法
2015/05/05 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
Python聊天室程序(基础版)
2018/04/01 Python
python中pip的安装与使用教程
2018/08/10 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
django创建css文件夹的具体方法
2020/07/31 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
AJAX应用和传统Web应用有什么不同
2013/08/24 面试题
考试作弊检讨书大全
2014/02/18 职场文书
学习标兵获奖感言
2014/02/20 职场文书
经济职业学院毕业生自荐书
2014/03/17 职场文书
新农村建设标语
2014/06/24 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
大学生入党自传2015
2015/06/26 职场文书
开学第一周总结
2015/07/16 职场文书
python中Matplotlib绘制直线的实例代码
2021/07/04 Python
Java 多态分析
2022/04/26 Java/Android