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使用vant中的checkbox实现全选功能
Nov 17 Vue.js
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
Nov 20 Vue.js
如何实现vue的tree组件
Dec 03 Vue.js
vue+openlayers绘制省市边界线
Dec 24 Vue.js
vue 实现基础组件的自动化全局注册
Dec 25 Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
原生JS封装vue Tab切换效果
Apr 28 Vue.js
vue实现无缝轮播效果(跑马灯)
May 14 Vue.js
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
Vue全局事件总线你了解吗
Feb 24 Vue.js
vue+iview实现手机号分段输入框
Mar 25 Vue.js
vue代码分块和懒加载非必要资源文件
Apr 11 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日历[测试通过]
2008/03/27 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
PHP实现简单搜歌的方法
2015/07/28 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
javascript 获取select下拉列表值的代码
2009/09/07 Javascript
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
2012/01/15 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
vue实现一个炫酷的日历组件
2018/10/08 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
全面理解Python中self的用法
2016/06/04 Python
python下10个简单实例代码
2017/11/15 Python
python中返回矩阵的行列方法
2018/04/04 Python
django js实现部分页面刷新的示例代码
2018/05/28 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
django删除表重建的实现方法
2019/08/28 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
《胖乎乎的小手》教学反思
2014/02/26 职场文书
廉洁使者实施方案
2014/03/29 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
员工生日会策划方案
2014/06/14 职场文书
党员作风建设整改方案
2014/10/27 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
运动会主持人开幕词
2016/03/04 职场文书
React如何创建组件
2021/06/27 Javascript
Java基础之this关键字的使用
2021/06/30 Java/Android
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS