• H5调起微信授权

    一、通过连接调起授权后重定向至页面

    window.location.href =
                    'https://open.weixin.qq.com/connect/oauth2/authorize?		
    				appid=wxXXXXXXXXXXXX 小程序appid 
    				&redirect_uri=http://XXX.com 重定向至当前页面
    				&response_type=code
    				&scope=snsapi_userinfo //用户手动授权
    				&state=#wechat_redirect'

    二、微信云托管登陆

    const wechatAppId = process.env.VUE_APP_WECHAT_APPID_MK;
    const wechatResourceId = process.env.VUE_APP_WECHAT_RESOURCE_ID;
    const wechatEnvId = process.env.VUE_APP_WECHAT_ENV_ID;
     
    // 微信云托管登录 换取用户信息 
    window.mplogin2.checkCloud({
        appid: wechatAppId,               // 必填,公众号appid,将以此appid名义进行请求
        resourceAppid: wechatAppId,       // 必填,如果是资源复用模式,需要填环境共享下资源方微信账号
        envid: wechatResourceId,                  // 必填,资源方微信云托管环境,如果传递此参数则会返回初始化的cloud操作对象
        signature: window.location.href,       // 选填,如果需要微信SDK的API方法,则填写要使用的地址,会返回signature签名对象,envid参数不填则无效。
        // region: ''                             // 选填,环境的地域,可选ap-guangzhou、ap-beijing,不填默认为ap-shanghai
        traceUser: false                        // 选填,默认true,是否在将用户访问记录到用户管理中,非上海地域请设置成false
    }).then(res => {
        if (res.login === true) {
            if (res.cloud != null) {
                // 挂载全局函数
                window.app = res.cloud;
                // 开始业务
                window.flag = true
                console.log('用于操作的CLOUD对象', res.cloud)
                console.log('微信用户信息', res.info)
     
                const getWechatUserInfo = function () {
                    return new Promise((resolve, reject) => {
                        let wx_userInfo, userInfo // {cloud_id, json}
                        try {
                            wx_userInfo = JSON.parse(localStorage.getItem('wx_userInfo'))
                            userInfo = JSON.parse(localStorage.getItem('userInfo'))
                        } catch (error) {
                            // 如果解析失败,证明未授权成功,需要重新授权
                        }
     
                        if (wx_userInfo && userInfo) {
                            resolve()
                        } else {
                            window.app.callContainer({
                                path: '/api/user/info',     // 填入业务自定义路径和参数,根目录,就是 / '/api/user/info', 
                                method: 'POST',                     // 按照自己的业务开发,选择对应的方法
                                header: {
                                    'X-WX-SERVICE': wechatEnvId,            // xxx中填入服务名称(微信云托管 - 服务管理 - 服务列表 - 服务名称)
                                },
                                data: {
                                    info: window.app.CloudID(res.info)
                                }
                                // 其余参数同 wx.request
                            }).then(res => {
                                return res.data.data_list[0]
                            }).then(userInfo => {
                                // {cloud_id, json}
                                localStorage.setItem('wx_userInfo', JSON.stringify(userInfo));
     
                                let openid, nickname, headimgurl, unionid, activity_id
                                try {
                                    const json = JSON.parse(userInfo.json);
                                    const data = json.data
                                    const data2 = JSON.parse(localStorage.getItem('activity_id'))
                                    activity_id = data2
                                    openid = data.openId
                                    nickname = data.nickName
                                    unionid = data.unionId
                                    headimgurl = data.avatarUrl
                                } catch (e) {
                                    // 错误上报
                                }
     
                               
                                } else {
                                    resolve()
                                }
                            })
                        }
                    })
     
                };
     
                // 获取用户信息
                // getWechatUserInfo();
     
                // 监听签名注册成功
                wx.ready(() => {
                    getWechatUserInfo().then(() => {
                        next()
                    })
                })
     
                // 使用微信公众号SDK,开始签名,签名信息在result.signature中
                // 发起签名注册,是一个异步操作,成功会触发wx.ready
                wx.config({
                    appId: wechatAppId, // 微信公众号appid
                    timestamp: res.signature.timestamp + '',   // 时间戳,从返回result.signature中获取
                    nonceStr: res.signature.nonceStr,          // 随机字符串,从返回result.signature中获取
                    signature: res.signature.signature,        // 签名,从返回result.signature中获取
                    jsApiList: [],                // 注册的api列表
                    openTagList: ['wx-open-launch-weapp'] // 可选,需要使用的开放标签列表,例如['wx-open-launch-app']
                })
            } else {
                // 登录成功,但环境加载失败,需按照提示解决
                console.log(res.msg)
            }
        } else {
            // 没有登录,需跳转到登录页面
            // 以下方式可以适应IOS、安卓、PC平台的跳转和返回
            //   const a = document.createElement("a");
            //   a.href = './login.html' // 需要和登录页保持一致
            //   a.click()
            window.mplogin2.doLogin({
                appid: wechatAppId,                   // 必填,公众号appid,将以此appid名义进行请求
                scope: 'snsapi_userinfo',                     // 必填,登录方式:snsapi_userinfo、snsapi_base// 必填,登录方式:snsapi_userinfo、snsapi_base
                // noback: true,                              // 选填,登录完不直接返回业务页面,执行自定义附加操作
                // redirect: window.location.href             // 跳转的页面,默认是当前页面,如果你有自定义登录成功页,可以联动设置 
            }).then(res => {
                // noback为true时,将不会返回业务页面,执行到这里
                // 此时需要自行控制跳转回业务页面
                console.log(res)
                next();
            })
        }
    })
  • 发表回复