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 $attrs &amp; inheritAttr实现button禁用效果案例
Dec 07 Vue.js
Vue中inheritAttrs的使用实例详解
Dec 31 Vue.js
Vue实现图书管理案例
Jan 20 Vue.js
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
vue3.0 自适应不同分辨率电脑的操作
Feb 06 Vue.js
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
Feb 20 Vue.js
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
Feb 26 Vue.js
vue实现滑动解锁功能
Mar 03 Vue.js
vue实力踩坑之push当前页无效
Apr 10 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
使用vuex-persistedstate本地存储vuex
Apr 29 Vue.js
vue如何清除浏览器历史栈
May 25 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中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
2020/08/30 PHP
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
js 文件引入实现代码
2010/04/23 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
React组件生命周期详解
2017/07/03 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
iview同时验证多个表单问题总结
2018/09/29 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
Node.js API详解之 vm模块用法实例分析
2020/05/27 Javascript
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
技校教师求职简历的自我评价
2013/10/20 职场文书
大学毕业后的十年规划
2014/01/07 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
英语系本科生求职信
2014/07/15 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
公司搬迁通知
2015/04/20 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
用python自动生成日历
2021/04/24 Python
idea 在springboot中使用lombok插件的方法
2021/08/02 Java/Android