vue3+vite(4.3.9) 实现web网站微信扫码授权登录--内嵌

首先具体流程如下:

1. 需要在自己的页面上生成微信的二维码(如何生成?)

2. 微信扫码授权后,会在页面地址上返回一个code(如何拿到,并一直在当前的页面?)

3. 拿到以后 就可以去调用后端的接口,并把code 传过去,后端就会根据code 去调用微信官方的接口去换取 微信用户信息。

前提条件:需要去 微信开放平台-网站应用(创建网站应用并通过), 资质认证也需要通过哦~

微信开放平台地址:微信开放平台

废话不多说,流程解析开始:

1.需要在自己的页面上生成微信的二维码(如何生成?)

首先我这边的话,为了方便后续的操作,我这里是把生成微信二维码封装成了组件

appid:开放平台中申请的网站应用的appid

redirect_uri:授权后返回的地址(使用的域名必须要和授权回调域里面 填写的 域名一致才可以,或者可以尝试 模拟微信公众号的重定向操作

href: 必须使用base64格式(当前代码样式为:宽200px;高200px)

<template>
  <!-- 微信登录二维码 -->
  <div class="header">
    <div id="weiXin"></div>
  </div>
</template>
<script setup lang="ts">
  import { onMounted } from 'vue';
  import Config from '@/settings';

  const props = defineProps({
    permission: {
      type: String, //类型字符串
      default: () => {
        return '';
      },
    },
  });

  onMounted(() => {
    shows();
  });

  const WxLogin = function (e: any) {
    let r = 'default';
    !0 === e.self_redirect ? (r = 'true') : !1 === e.self_redirect && (r = 'false');
    let n = document.createElement('iframe') as any;
    let i =
      'https://open.weixin.qq.com/connect/qrconnect?appid=' +
      e.appid +
      '&scope=' +
      e.scope +
      '&redirect_uri=' +
      e.redirect_uri +
      '&state=' +
      e.state +
      '&login_type=jssdk&self_redirect=' +
      r +
      '&styletype=' +
      (e.styletype || '') +
      '&sizetype=' +
      (e.sizetype || '') +
      '&bgcolor=' +
      (e.bgcolor || '') +
      '&rst=' +
      (e.rst || '');
    (i += e.style ? '&style=' + e.style : ''),
      (i += e.href ? '&href=' + e.href : ''),
      (i += 'en' === e.lang ? '&lang=en' : ''),
      (n.src = i),
      (n.frameBorder = '0'),
      (n.allowTransparency = 'true'),
      (n.sandbox = 'allow-scripts allow-top-navigation allow-same-origin'),
      (n.scrolling = 'no'),
      (n.width = '300px'),
      (n.height = '400px');
    let s = document.getElementById(e.id) as any;
    (s.innerHTML = ''), s.appendChild(n);
  };

  const shows = () => {
    // 'http://xingchi-trade.liangpiao.net.cn/#/weixinLogin'

    // 父页面传过来的参数
    const DDNSResolution = encodeURIComponent(props.permission);

    var obj = new WxLogin({
      self_redirect: false,
      id: 'weiXin',
      appid: Config.data.appIdWei,
      scope: 'snsapi_login',
      redirect_uri: DDNSResolution,
      state: Math.random(), //建议使用时间戳+随机数,具体看你
      style: 'black', // 提供"black"、"white"可选。二维码的样式
      href: 'data:text/css;base64,LmltcG93ZXJCb3ggLnRpdGxlIHsNCiAgICBkaXNwbGF5OiBub25lOw0KfQ0KLmltcG93ZXJCb3ggLnFyY29kZS5saWdodEJvcmRlciB7DQogICAgd2lkdGg6IDIwMHB4Ow0KfQ==',
    });

    // console.log(obj);
  };
</script>
<style lang="scss" scoped>
  .header {
    width: 100%;
    display: flex;
    justify-content: center;
  }
</style>

把封装好的组件直接引入到 自己想展示的地方,再把需要的数据赋值 就会正常显示 如下图:

2. 微信扫码授权后,会在页面地址上返回一个code(如何拿到,并一直在当前的页面?)

首先,我的思路是这样的

(1)微信开放平台的微信回调域,填写必须是域名,不能是ip地址。所以会引发一个问题:测试的时候需要发布到 服务器上 才可以测试这个功能。(除非 会把本地ip 转为代理域名,这样就可以在本地进行测试)

(2)可以自己在项目中随便创建一个vue文件,写到自己的router里面(如果是登录之前,进行操作,则需要将该文件的路由,放到自己的路由白名单中。如果是账号 密码登录后,则可放可不放),并在路由全局前置守卫中,加一下判断,如果要跳入到该文件页面时,则将code 取下,并存入store中,然后让其再next() 到 显示二维码的页面。

如下图:

至于白名单就需要看各位小伙伴自己的逻辑是怎么写的了

NProgress.start();   不需要管

成功拿到,会返回当前页面后如下图:

3. 接下来就可以,让后端写个接收 code 的接口,去换取微信用户信息的接口啦,换取成功后,接口返回用户信息后 就代表 就成功啦~,这的具体逻辑各位小伙伴,可根据自己项目的逻辑去按照自己的想法去调整~

web网站 绑定微信也是同样的逻辑~

文章到这里就结束啦~   如果觉得不错的话,麻烦点点赞,点点收藏~

小编在这里提前谢谢大家啦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小牛学前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值