PC端实现微信支付功能(Vue2.0)

简介

        在实现微信支付之前,我们要知道,在提交订单是我们需要携带一个query参数去支付页面

为什么要携带参数?

        1.为了要获取支付信息,支付信息包含:

                1.1 需要支付多少钱,并渲染到支付界面,提示用户

                1.2 服务器返回的url,用于生成二维码                        

        2.为了下次请求查询支付状态(需要定时发请求检查支付状态)


获取支付信息:

  // 获取需要花多少钱
    async getPayInfo() {
      let result = await this.$API.reqPayInfo(this.$route.query.orderId);
      if (result.code == 200) {
        this.totalFee = result.data.totalFee;
        this.payInfo = result.data;
      } else {
        alert("失败");
      }
    },

 由上图我们可以看到,数据已经拿到了,价格为18486,   codeUrl就是可以生成二维码的url

 这里我们使用ElementUI组件库中的Message Box弹窗

点击支付按钮,进行弹窗,这个过程我就不再赘述了。

弹窗之后我们需要生成一个微信二维码,我们需要利用qrcode插件

qrcode - npm这是他的指导手册

import QRCode from "qrcode";

当我们点击支付按钮就应该生成二维码

// 生成二维码

let url = await QRCode.toDataURL(this.payInfo.codeUrl);

 此时二维码已经生成了,但没有实现支付功能,我们需要借助MessageBox中的beforeClose

——MessageBox 关闭前的回调,会暂停实例的关闭

具体参数可看文档Element - The world's most popular Vue UI framework

在此之前,我们需要在data中定义两个变量,code和timer

data() {

     return {

       totalFee: "",  //价格为18486

       payInfo: {},  //支付信息

       timer: null,  //为定时器准备的,这个不理解也可继续往下看

       code: ""   //我们需要留存请求支付的状态码,205的话说明支付成功

};

},

常规来说200是支付成功,205是支付中,我这样做的目的也是为了能不用付款(但发请求)就可实现功能。

 // 点击打开支付弹窗
    async open() {
      //  生成二维码
      let url = await QRCode.toDataURL(this.payInfo.codeUrl);
      this.$alert(`<img src=${url} />`, "请使用微信扫码支付", {
        showClose: false,
        showCancelButton: true,
        showConfirmButton: true,
        confirmButtonText: "支付成功",
        cancelButtonText: "支付遇到问题",
        center: true,
        dangerouslyUseHTMLString: true,
        beforeClose:(action, instance, done)=>{
          if (action == "confirm") {
            console.log("你点击的是支付成功");
            // 判断是否真的支付了
            
            if (this.code == 205) {
              console.log("支付成功啦");
              clearInterval(this.timer);
              this.timer = null;
            }
            done();
          } else {
            clearInterval(this.timer);
            this.timer = null;
            done();
          }
        }
   
      });
      // 查询支付状态
      if (!this.timer) {
        this.timer = setInterval(async () => {
          let result = await this.$API.reqPayStatus(this.$route.query.orderId);
          console.log(result);
          if (result.code == 205) {
            clearInterval(this.timer);
            this.timer = null;
            this.code = 205;
            // 关闭弹出框
           this.$msgbox.close()
          }
        }, 3000);
      }
    }

发现了吗我这里为什么用箭头函数

如果不使用箭头函数或者改变this指向的方法,在beforeClose中的this其实不是组件实例

instance 为 MessageBox 实例,下图证实想法是正确的

 于是我在上面的代码中使用的箭头函数,为什么箭头函数的this就可以?

this的指向问题_那只猫喝咖啡的博客-CSDN博客

上面链接有介绍,放心点开,篇幅非常短。

解决了this问题,基本上已经完成了支付功能,剩下的就是在判断支付成功的里面加上路由跳转至支付成功的界面。

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue PC端实现微信支付的过程中,可以采用JSAPI支付方式。首先,在微信公众号中进行支付需要调用微信支付的API接口。可以通过引入微信JS-SDK来实现这一功能。具体步骤如下: 1. 在项目中安装并引入微信JS-SDK库。 2. 在Vue组件中使用微信JS-SDK提供的接口,获取到微信支付所需的必要参数,例如appId、timestamp、nonceStr、package和signType等。 3. 调用微信JS-SDK中的chooseWXPay方法,传入支付所需的参数,实现支付功能。 4. 在支付过程中,可以使用定时器来不断轮询后端提供的接口,用来判断支付是否完成。一旦支付完成,可以进行相应的页面跳转。 需要注意的是,具体的支付流程和参数获取方式可能因微信支付版本和业务需求而有所不同,可以根据具体情况进行相应的调整和修改。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue实现微信支付(三种支付方法)](https://blog.csdn.net/qq_39098137/article/details/95985100)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [vue项目在PC端的支付(支付宝+微信)](https://blog.csdn.net/ahwangzc/article/details/128933450)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值