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>
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进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。