uniapp实现公众号H5、小程序和App微信授权登录功能

本文介绍在使用uniapp开发的H5、小程序和App中使用微信授权登录的方法。
由于微信的公众号、小程序和App是相对独立的体系,同一个用户在这些不同的端中授权所返回的openid是不一样的,这个时候就必须在微信开放平台注册账号,并把对应的公众号、小程序和移动应用绑定上去,在授权的时候就能返回一个unionid了,这样就可以在后台识别到是同一个用户了。
前期要准备的工作:
1、申请公众号、小程序和微信开放平台,并拿到对应平台的appid和secret;
2、H5网页授权还要在公众号后台设置网页授权域名;
3、小程序的接口域名必须启用https,且要设置request、download合法域名等;
4、App必须在微信开放平台申请应用并绑定。
上述工作准备好后,就可以开干了!
一、H5网页授权
1、授权按钮

// official.vue
立即授权


2、js代码

// official.vue
onLoad(options) {
    if (options.scope) {
        this.scope = options.scope
    }
    if (this.$wechat && this.$wechat.isWechat()) {
        uni.setStorageSync('scope', this.scope)
    let code = this.getUrlCode('code')
        if (code) {
        this.checkWeChatCode(code)
    } else {
        if (this.scope == 'snsapi_base') {
        this.getWeChatCode()
        }
        }
    }
},
methods: {
    getUrlCode(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ''])[1].replace(/\+/g, '%20')) || null
    },
    getWeChatCode() {
    if (this.$wechat && this.$wechat.isWechat()) {
        let appid = '公众号appid'
        let local = encodeURIComponent(window.location.href)
        let scope = uni.getStorageSync('scope')
        window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${local}&response_type=code&scope=${scope}&state=1#wechat_redirect`
    } else {
        uni.showModal({
        content: '请在微信中打开',
        showCancel: false
        })
    }
    },
    checkWeChatCode(code) {
    if (code) {
        let scope = uni.getStorageSync('scope')
        this.$http.post('/wechat/login', {
        code,
        scope,
        type: 1
    }).then(res => {
        if (res.code == 1) {
        if (scope == 'snsapi_userinfo') {
            this.login(res.data.userinfo)
            uni.navigateBack()
            }
        } else {
        uni.showModal({
            content: res.msg,
            showCancel: false
        })
        }
        }).catch(err => {
        uni.showModal({
        content: err.msg,
        showCancel: false
        })
        })
    }
}


注意,
1、公众号授权scope有两种方式:snsapi_ba

你可能感兴趣的:(uni-app,小程序,微信,javascript,前端)