pc端嵌入微信扫码登录(vue篇)

1,568 阅读1分钟

vue中微信扫码界面嵌入pc端

通用组件部分vue-wxlogin

<template>
  <div>
    <iframe sandbox="allow-scripts allow-top-navigation allow-same-origin allow-modals" scrolling="no" width="300" height="400" frameBorder="0" allowTransparency="true" :src="setSrc"></iframe>
  </div>
</template>

<script>
export default {
  data () {
    return {
      // src: 'https://open.weixin.qq.com/connect/qrconnect?appid=wxe1f5def243e0390b&scope=snsapi_login&redirect_uri=https://abstest.tenpay.com/abs/author/callBack.do&state=0001&login_type=jssdk&self_redirect=default&style=black&href=./wx.css',
      // https://open.weixin.qq.com/connect/qrconnect?appid=wxe1f5def243e0390b&scope=undefined&redirect_uri=undefined&state=&login_type=jssdk&self_redirect=default&style=black&href=
    }
  },
  mounted() {
    window.addEventListener("message", this.handleMessage);
  },
  methods: {
    handleMessage(data) {
      if(data.data.method === 'codeMessage') {
        this.$emit('handleCode', data.data.data)
      }
      console.log('data -----------------------------------', data)
    }
  },
  computed : {
      setSrc () {
          var _url = 'https://open.weixin.qq.com/connect/qrconnect?appid='+ this.appid
              + '&scope=' + this.scope
              + '&redirect_uri='  + this.redirect_uri
              + '&state=' + this.state
              + '&login_type=' + this.login_type
              + '&style=' + this.theme
              + '&self_redirect=' + this.self_redirect
              + '&href=' + this.href;
          return _url;
      },
  },
  props:{
      //应用唯一标识,在微信开放平台提交应用审核通过后获得
      appid : String,
      //应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即可
      scope : String,
      //重定向地址,需要进行UrlEncode
      redirect_uri : String,
      //用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
      state : {
          type : String,
          default: ''
      },
      //提供"black"、"white"可选,默认为黑色文字描述。详见文档底部FAQ
      theme : {
          type : String,
          default: 'black'
      },
      // 自定义样式链接,第三方可根据实际需求覆盖默认样式。详见文档底部FAQ
      href : {
          type : String,
          default: ''
      },
      // true:手机点击确认登录后可以在 iframe 内跳转到 redirect_uri,false:手机点击确认登录后可以在 top window 跳转到 redirect_uri。默认为 false。
      self_redirect : {
          type : String,
          default: 'default'
      },
      // sdk的扩展字符串,但是在这里就默认了jssdk,暂时不建议修改
      login_type : {
          type : String,
          default: 'jssdk'
      },
},
}
</script>

vue-wxlogin 组件调用

<wxlogin
        :appid="appid"
        :self_redirect="'true'"
        :scope="'snsapi_login'"
        :theme="'black'"
        :redirect_uri="encodeURIComponent(url + '/wxLogin')
        href="data:text/css;base64,QGNoYXJzZXQgIlVURi04IjsKLmltcG93ZXJCb3ggLnRpdGxlIHsgZGlzcGxheTogbm9uZSB9Ci5pbXBvd2VyQm94IC5xcmNvZGUgeyB3aWR0aDogMTgwcHg7IG1hcmdpbi10b3A6IDEwN3B4IH0KLmltcG93ZXJCb3ggLmpzX3d4X2RlZmF1bHRfdGlwIHA6bnRoLWNoaWxkKDIpIHsgZGlzcGxheTogbm9uZSB9Ci5pbXBvd2VyQm94IC5pY29uMzhfbXNnLnN1Y2MgeyBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7IGJhY2tncm91bmQtcG9zaXRpb24teTogLTMxcHghaW1wb3J0YW50O30KLmltcG93ZXJCb3ggLmljb24zOF9tc2cgeyB3aWR0aDogMjZweDsgaGVpZ2h0OiAyN3B4OyB9"
        rel="external nofollow"
        @handleCode="handleCode">
      </wxlogin>

参数意义详见:developers.weixin.qq.com/doc/oplatfo…

redirect_uri:重定向到第三方网站地址
href:data:text/css;base64,及base64加密后的地址(二维码样式)
本例所加密内容:
 @charset "UTF-8";
.impowerBox .title { display: none }
.impowerBox .qrcode { width: 180px; margin-top: 107px }
.impowerBox .js_wx_default_tip p:nth-child(2) { display: none }
.impowerBox .icon38_msg.succ { background-size: 100%; background-position-y: -31px!important;}
.impowerBox .icon38_msg { width: 26px; height: 27px; }

扫码流程:

1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据 code 参数;
2. 通过 code 参数加上 AppID 和AppSecret等,通过 API 换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。