微信登录-服务端

简介: 微信登录-服务端

1.申请账号-微信开放平台


https://open.weixin.qq.com/


  1. 创建移动应用


image.png



可得到AppID与AppSecret


image.png


  1. 客户端(IOS Android)集成微信登录
    目的是获取临时票据 code,传给服务端
    略.
  2. 服务端
    文档: https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Development_Guide.html


5.1 通过客户端传过来的code,以及AppId和AppSecret调用微信服务,获取accessToken以及openId

String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appId + "&secret=" + secret + "&code=" + code + "&grant_type=authorization_code";
        //获取accessToken
        String accessTokenStr = restTemplate.getForObject(url, String.class);
        JSONObject accessTokenObj = JSON.parseObject(accessTokenStr);
        log.info("wechatLogin accessTokenResult:{}", accessTokenObj);
        if (StringUtils.isNotEmpty(accessTokenObj.getString("errcode"))) {
            throw Excep.le(UserErrMsgs.Err_000900040013);
        }
        //用户的openId
        String openId = accessTokenObj.getString(WeChatConsts.OPEN_ID);
       //用户的accessToken,可用来获取微信用户的基本信息
        String accessTokenObjString = accessTokenObj.getString(WeChatConsts.ACCESS_TOKEN);


openId: 每个微信用户对应一个微信应用都有一个唯一的openId,所以可以根据获取到的openId是否绑定了本系统的用户来判断用是否已经进行了微信绑定。

5.2 获取用户的基本信息(解决乱码问题)


  • 解决乱码问题:先使用ISO8859-1获取到用户信息的字节数组,再将字节数组使用UFT8编码成字符串。

String result = new RestTemplate().getForObject("https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openId, String.class);
        JSONObject jsonObject = JSON.parseObject(new String(result.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
        if (StringUtils.isNotEmpty(jsonObject.getString("errcode"))) {
            return null;
        }


  • 注意: 如果需要存储微信用户的头像,不可直接存储微信返回的头像地址,因为如果微信用户更换了头像,该地址将失效。所以正确的做法是将微信用户的头像转储到自己的OSS上。
相关文章
|
移动开发 小程序 前端开发
Taro 的实现原理是怎么样的?
Taro 的实现原理是怎么样的?
763 0
|
缓存 Shell API
一文带你掌握nest.js访问静态资源
一文带你掌握nest.js访问静态资源
一文带你掌握nest.js访问静态资源
|
存储 JSON JavaScript
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-1
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
475 0
|
人工智能 自然语言处理 搜索推荐
智能语音助手的发展与未来:开启人机交互的新篇章
智能语音助手的发展与未来:开启人机交互的新篇章
2089 28
|
前端开发
Taro——环境变量配置
最近准备开发移动端相关的内容,调研后选择了Taro,基于Taro+Vue3进行开发,在初始化框架后,又加入了一些前端规范限制,都完成后,打算配置环境变量,却发现按着官方的文档去配置,并没有生效;在封装的axios中去使用的使用,获取到的是undefined,所以这里做下记录;
269 0
|
开发工具 git
git 恢复单个文件到指定版本
git 恢复单个文件到指定版本
728 0
|
机器学习/深度学习 人工智能 算法
AI大模型学习理论基础
本文探讨了AI大模型学习的理论基础,包括深度学习(模拟神经元工作原理,通过多层非线性变换提取特征)、神经网络结构(如前馈、循环和卷积网络)、训练方法(监督、无监督、强化学习)、优化算法(如SGD及其变种)、正则化(L1、L2和dropout防止过拟合)以及迁移学习(利用预训练模型加速新任务学习)。这些理论基础推动了AI大模型在复杂任务中的应用和人工智能的发展。
|
弹性计算
阿里云服务器升级带宽流程及收费标准参考
阿里云服务器如何升级带宽,升级带宽需要多少钱?对于初次购买阿里云服务器的用户来说,可能并不知道阿里云服务器如何升级带宽,也不清楚升级带宽要多少钱,带宽的收费标准是怎样的,有哪些注意事项,下面小编为大家介绍下。
2041 0
阿里云服务器升级带宽流程及收费标准参考
|
并行计算 C++ Windows
windows10下visual studio 2019安装以及cuda11配置
windows10下visual studio 2019安装以及cuda11配置
2276 0

热门文章

最新文章