客户端集成微信登录

作者: 垃圾简书_吃枣药丸 | 来源:发表于2020-02-26 13:54 被阅读0次

    1.申请账号-微信开放平台
    https://open.weixin.qq.com/

    1. 创建移动应用


      image.png
    2. 可得到AppID与AppSecret


      image.png
    3. 客户端(IOS Android)集成微信登录
      目的是获取临时票据 code,传给服务端
      略.

    1. 服务端
      文档: 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上。

    相关文章

      网友评论

        本文标题:客户端集成微信登录

        本文链接:https://www.haomeiwen.com/subject/yiamchtx.html