vue项目PC端页面内嵌微信扫码登录

根据需求需要内嵌一个微信扫码登录获取用户信息

参考准备工作 | 微信开放文档

1 创建微信二维码盒子

<div id="weichat" v-else></div>

 因为一些参数是直接调接口得到的所以这个data就是接口返回的数据

// 获取微信二维码
    GET_weixin(data) {
      console.log(data);
      let href =
        "data:text/css;base64,aWZyYW1lewp3aWR0aDogMzAwcHg7CmhlaWdodDogMzAwcHg7Cm1hcmdpbjogMCBhdXRvOwp9Ci5pbXBvd2VyQm94IC5xcmNvZGV7CiAgd2lkdGg6IDE3MHB4ICFpbXBvcnRhbnQ7Cn0K";
      let obj = new WxLogin({
        self_redirect: false,
        id: "weichat",
        appid: data.appid,
        scope: "snsapi_login",
        redirect_uri: decodeURIComponent(data.redirectUri),
        state: "data.state",
        style: "black",
        href: href,
      });
    },

如果想自定义微信二维码的样式的话可以使用href参数,这个参数是一个链接,是需要base64加密,在线加密地址:https://tool.oschina.net/encrypt?type=3

注意密文前要添加  data:text/css;base64

 

二维码出来后就要获取token根据token获取用户信息了。

这里需要注意的是获取token是根据回调地址中的参数code然后传给后端进行获取的。这里的回调地址必须是当前项目的页面,这样才能得到code参数,而且回调地址必须是外网可以访问且要和微信配置中的回调地址一致,所以联调测试时需要部署到线上进行测试。

只需要监听路由判断路由中是否有code

 watch: {
    $route: {
      handler: function (route) {
        if (route.query.code) {
          this.getToken(route.query);
        }
        if (route.query.loginType) {
          this.loginType = route.query.loginType;
          this.bindPhone = route.query.bindPhone;
        }
        this.redirect = route.query && route.query.redirect;
      },
      immediate: true,
    },
  },

然后传给后端接口,的到后端返回的用户信息即可。

<template>
  <div>
    <div class="preloader">
      <div class="loader">
        <div class="ytp-spinner">
          <div class="ytp-spinner-container">
            <div class="ytp-spinner-rotator">
              <div class="ytp-spinner-left">
                <div class="ytp-spinner-circle"></div>
              </div>
              <div class="ytp-spinner-right">
                <div class="ytp-spinner-circle"></div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <!--====== PRELOADER PART ENDS ======-->

    <!--====== HEADER PART START ======-->

    <banner></banner>
    <section
      class="px-5 py-8 py-xxl-20 background-position-center background-size-cover bsb-overlay bsb-hover-pull bg"
    >
      <div class="container">
        <div class="row justify-content-md-center">
          <div
            class="col-12 col-md-11 col-lg-9 col-xl-7 col-xxl-6 text-center text-white"
          >
            <h1 class="display-3 fw-bold mb-5 text-white">注册 / 登录</h1>
            <!-- <p class="lead mb-5 text-white">I am an experienced UX/UI Designer with a strong background in developing award-winning applications.</p> -->
          </div>
        </div>
      </div>
    </section>
    <!--====== HEADER PART ENDS ======-->
    <div class="shop-wrapper fluid-padding-2 pt-120 pb-150">
      <div class="container">
        <div class="login-register-area ptb-130">
          <div class="container">
            <div class="row justify-content-center">
              <div class="col-lg-7 ms-auto me-auto">
                <div class="login-register-wrapper">
                  <div class="login-register-tab-list nav">
                    <a class="active" data-bs-toggle="tab" href="#lg1">
          
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在 Vue PC端页面实现微信扫码支付,你需要使用微信支付的 Native 支付模式。具体步骤如下: 1. 向服务器获取支付二维码链接:你需要向服务器发送请求,获取支付二维码的链接。 2. 生成支付二维码:你可以使用第三方库 `qrcode` 来生成支付二维码,并将生成的二维码显示在页面上。 ```javascript import QRCode from 'qrcode' export default { data() { return { qrCodeUrl: '' // 存储二维码链接 } }, mounted() { this.getPayQrCode() }, methods: { getPayQrCode() { // 向服务器获取支付二维码链接 axios.get('/api/getPayQrCode') .then(res => { const qrCodeUrl = res.data.qrCodeUrl // 生成二维码 QRCode.toDataURL(qrCodeUrl, { errorCorrectionLevel: 'H', margin: 1 }) .then(dataUrl => { this.qrCodeUrl = dataUrl }) .catch(err => { console.error(err) }) }) .catch(err => { console.error(err) }) } } } ``` 以上代码中,`getPayQrCode` 方法向服务器获取支付二维码链接,然后使用 `qrcode` 库生成二维码,并将二维码链接存储在 `qrCodeUrl` 变量中,你可以将该变量绑定到一个 `img` 标签上来显示二维码。 3. 轮询支付状态:使用轮询的方式来查询支付状态,如果支付成功,则弹出支付成功的提示框。 ```javascript checkPayStatus() { setInterval(() => { axios.get('/api/checkPayStatus') .then(res => { const status = res.data.status if (status === 'success') { // 支付成功 this.showPaySuccess() } }) .catch(err => { console.error(err) }) }, 3000) }, showPaySuccess() { // 弹出支付成功的提示框 alert('支付成功!') } ``` 以上代码中,`checkPayStatus` 方法使用轮询的方式查询支付状态,每隔 3 秒发送一次请求,如果支付成功,则调用 `showPaySuccess` 方法弹出支付成功的提示框。 4. 调起微信扫码支付界面:在支付成功后,你需要调用微信扫码支付界面,在微信扫描支付二维码后完成支付。 ```javascript startNativePay() { const qrCodeUrl = '支付二维码的链接' const userAgent = window.navigator.userAgent.toLowerCase() if (userAgent.indexOf('micromessenger') === -1) { // 不在微信中,跳转到支付链接 window.location.href = qrCodeUrl } else { // 在微信中,调起微信扫码支付界面 window.location.href = 'weixin://wxpay/bizpayurl?url=' + encodeURIComponent(qrCodeUrl) this.checkPayStatus() } } ``` 以上代码中,`startNativePay` 方法判断当前是否在微信中,如果在微信中,则使用 `weixin://wxpay/bizpayurl?url=` 协议调起微信扫码支付界面,并将支付二维码的链接作为参数传递给微信支付界面。支付成功后,使用轮询的方式查询支付状态,如果支付成功,则弹出支付成功的提示框。 希望这能帮助到你。如果你有其他问题,请随时提出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值