微信扫码登录PC网站实现思路

微信扫码登录PC网站实现思路

点点

2021-04-25 10:00 阅读 500 喜欢 1

思路整理

登录页面,当点击微信登录后,根据地址url生成一个二维码,让用户扫描。 在生成二维码的同时,我在数据库插入一条记录,然后将ID放在这个二维码中。 然后用户拿着微信去扫描这个二维码(地址),后面的就是公众号通过网页获取用户信息了.. 获取到用户信息后,根据地址中的ID,查找数据库,更新状态和用户信息 与此同时,在PC端二维码生成后,一直轮询向后台请求状态,根据状态获取对应的结果 大体思路就是这样,真实现起来.. 感觉也就微信公众号获取用户信息这段稍微麻烦点..毕竟得翻着API才能写.

需要感受完整功能的可以在 我的亿万店 随便找个商品,点击购买的时候,选择普通登录,就会跳转到我的第三方登录系统啦

代码是用nodejs实现的,后端的接口:

创建二维码 轮询状态 跳转到第三方地址(这个大家用的话,可能就是登录成功后跳转的地址了) 微信公众号跳转地址,用于获取code 微信公众号重定向地址,用户获取用户信息,并展示对应的信息 简单写下关于微信公众号获取用户信息的代码吧。

公众号获取用户信息代码部分

nodejs - thinkjs - controller/wechat.js

/***

module.exports = class extends Base{

/**
 * 微信扫描二维码进入该地址,附带地址信息。
 */
async indexAction(){
    let code = this.query('code');
    let redirectURI = this.config('site').domain.value+'/oauth/wechat/redirect';
    let appid = this.config('site').wechatappid.value;
    let scope = 'snsapi_userinfo';
    await this.model('lxxx').where({id : code}).update({
        status : 1//已扫描
    });
    let codeUrl =  `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirectURI}&response_type=code&scope=${scope}&state=${code}#wechat_redirect`;
    return this.redirect(codeUrl);
}

/**
 * 重定向后的地址,换取access_token
 */
async redirectAction(){
    let code = this.query('code');
    let state = this.query('state');

    let appid = this.config('site').wechatappid.value;
    let secret = this.config('site').wechatappsecret.value;
    let tokenUrl = `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appid}&secret=${secret}&code=${code}&grant_type=authorization_code`;

    let rs = await axios.get(tokenUrl).then(rs=>rs.data);
    console.log(rs);
    let access_token = rs.access_token;
    let openId = rs.openid;

    let userUrl = `https://api.weixin.qq.com/sns/userinfo?access_token=${access_token}&openid=${openId}&lang=zh_CN`

    let userInfo = await axios.get(userUrl).then(rs=>rs.data);
    console.log(userInfo);
    let {nickname,headimgurl} = userInfo;
    //查找state
    let record = await this.model('xxx').where({id : state}).find();
    console.log(record);
    if(!think.isEmpty(record) && openId && userInfo && !userInfo.errmsg){
        //获取用户信息成功
        console.log('登录成功,更新信息')
        await this.model('xxx').where({id : state}).update({
            json : JSON.stringify(userInfo),
            code : think.uuid().replace(/-/g,''),
            name : nickname,
            openid : openId,
            avatar : headimgurl,
            status : 2
        });
        this.assign('suc',true);
    }else{
        console.log('登录失败')
        await this.model('xxx').where({id : state}).update({status : 4});
        this.assign('suc',false);
    }
    //此处需要将获得的state ,然后查找对应的记录,进行数据更新。并提示关闭当前页面。
    return this.display('wechat/logintip');

}

/**
 * 扫描成功后,进入该地址,根据session进行页面地址跳转
 */
async wechatAction(){
    let id = this.query('id');
    let record = await this.model('xxx').where({id : id}).find();
    //获取对应的appid
    let loginInfo = await this.session('loginInfo');
    let clientCode = record.code;
    return this.redirect(loginInfo.redirect_uri+'?code='+clientCode+'&state='+loginInfo.state);
}

}

转载请注明出处: http://sdxlp.cn/article/weixindengru.html


如果对你有用的话,请赏给作者一个馒头吧 ...或帮点下页面底部的广告,感谢!!

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
你是否也有过这样的经历,翻看微信相册时,突然发现一些图片已经过期无法查看,它们或许是曾经的朋友圈,或许是某个特别的日子,亦或许是一段难忘的回忆。这些图片虽然已经过期,但它们所承载的记忆却是永恒的。
现在小伙伴们都会在手机端的微信中创建笔记,但是在电脑端该怎么创建呢?今天就跟小伙伴们介绍一下如何在电脑端微信中新建笔记的具体操作步骤。
现在很多小伙伴使用手机都会安装微信,可以用来社交聊天,还可以转账提现,最近有小伙伴在询问财产提现很久没有到账,怎么才能解决,那么点点在这里分享一下微信提现未到账解决方法,有需要的小伙伴,可以看看哦!小知识解决大问题!
智能手机已经很普遍了,苹果手机是国内很多人的主流手机,因为拥有强悍的手机性能,还有流畅的使用体验,拥有一大批的果粉,但是很多用户都是第一次使用,所以想要知道苹果手机录屏功能在哪里?
现在时下qq是很多年轻的小伙伴重要的交流工具,很多热恋的情侣,整天没日没夜私发双方的照片。可也因为一点小事提了分手,可求原谅太难了!一没有保存对方照片不知道如何是好?但是小编带你如何解决这些疑惑。
在使用电脑时突然发现系统win10 c盘爆满,越来越卡,这关乎到小伙伴们的电脑运行以及系统流畅度,如果系统盘变成了红色爆满,那可以说电脑几乎就卡到无法运行了,因为各种临时文件都是需要在C盘中存储的,这里为小伙伴们带来C盘爆满的解决办法。
如何在荣耀手机中调整图标大小,我们可以根据自己的使用体验去自定义一些手机的内容,其中桌面图标是我们使用手机的第一使用体验,过大的手机软件图标会影响我们的桌面应用放置量。
无论是上班族,还是上学党,只要一提到钉钉这款软件,想必小伙伴们都很熟悉,因为不管是上课直播,还是云办公,我们都会在手机上用到钉钉这款软件。