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

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

点点

2021-04-25 10:00 阅读 497 喜欢 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


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

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
虽然不承认,但是win7确实不适合现在工作使用了,毕竟存在安全隐患。 之前,都是因为win7系统对于配置要求不高,而且系统稳定兼容性好,所以也就一直使用。但是,现在如果想升级新版的win10系统,旧电脑的配置也不知道可以不可以。
最近很多的小伙伴都在问小编,QQ通过离线传输的文件找不到了,是不是也会过期?是不是会接收不到?首先它是肯定会过期的,哪怎么找到离线接收的文件?
微信收款码是分为个人码和商家码两种,虽然看似差不多,但其实功能上是有差别的。商家收款码不仅支持顾客使用信用卡支付,还可以享受直接提现等便利功能。那么微信商家收款码怎么申请?第一步商户需要开通微信收款商业版。
平常很多小伙伴喜欢看小说,问小编微信上怎么看,手机版微信读书软件被很小伙伴们使用,用来看小说等,有的小伙伴在使用该软件时,想要读更多有权限的小说,因此想要获得无限卡,但是却不知道如何获取,那么小编就来为小伙伴们介绍一下吧。
智能手机的微信是目前受众用户群体广泛的社交平台,现在通过微信联系,然后微信上的数据也是非常重要的,无论是聊天记录的文字、语音、图片还是视频都是非常重要,如果微信聊天语言误删除怎么恢复呢?那么有什么方法可以帮你恢复呢?
荣耀手机是国内手机比较大的一个厂商,拥有众多的用户,并且在持续的推出各种新品,面对与时俱进的手机设置,很多用户想要知道荣耀手机微信怎么设置密码锁屏,那么下面就让点点给小伙伴们介绍一下设置方式。
自从有了微信后,QQ好像落寂了不少,不过玩游戏的小伙伴好像还是很多使用的,QQ不经常用的情况下,换手机或者需要传输大文件的时候,发现密码忘了,手机号也换了不能用了该怎么解决呢?
平常生活中,我们很多的时候都会用到电脑,现在大部分电脑都是win10系统,有些用户遇到了无法安装软件问题,想知道如何解决?跟小编来。