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

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

点点

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


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

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
钉钉电子签名基于钉钉强大的安全保障体系,确保用户签名的真实性和不可篡改性。用户可以在钉钉应用中轻松完成签名操作,无论是审批流程、合同签署还是其他需要签名的场景,都能快速完成签名任务。可以帮到小伙伴们涨知识呦!
小米手机很早已推出了门禁卡功能,目前后知后觉的华为手机也在内测版的“钱包”应用内,增加了“门钥匙”功能。使用该功能结合手机NFC,可以将华为手机秒变门钥匙,轻松开门禁。免去忘记带门禁卡,在小区门口漫长等待的烦恼。
微信是我们常用的软件,平常生活和工作中都会在聊天中发送图片,可是有时候过几天可能就过期啦,我们无法查看啦。这时候我们还可以把过期的图片恢复过来。其实,也不叫恢复,本身就存在我们自己的手机中,只是加密啦,我们看不到而已,一会点点教小伙伴们先是怎样查看已过期或已清理图片的查看方法,再教小伙伴们永久清除微信内无用图片的方法。可以让手机瞬间腾出几个G的空间。
平时聊天或写文章的时候你是不是经常会在打字的时候蹦出表情来?想把这表情插入到文章里面吗?如果想的哈,同学们就来看看吧!
智能化的时代,聊天工具是不可缺的,QQ是80后一代的青春回忆,不知道还有没有小伙伴们在用,最近一直在研究这个青春,嘿嘿,方法来了,跟小编来看一下吧。
提供一个比较简单的小工具,或许能给你个灵感呢? 富文本内容存储在数据库,在页面展示的时候,需要向富文本添加一些字符串(比如说:ABCD ,又或者分数等)。
电脑版微信怎么发朋友圈,最近有很多小伙伴都在问关于微信电脑版的一些问题,小编下面给小伙伴们带来微信pc端发朋友圈教程分享,感兴趣的小伙伴们不要错过了哦,希望这篇文章能对小伙伴们有所帮助。
通讯工具有很多,微信账号作为我们实时通讯最常用的软件账号,但是有很多小伙伴们会遇到各种体验不好的可能,所以会想要注销自己的微信账号,其中很多小伙伴们想要知道如何注销微信账号,如何注销微信账号?