移动应用微信登录开发

一、官方文档
地址
官方文档地址
在这里插入图片描述
接入流程

  1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
  2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
  3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

第一步:(本人没做app端,故直接引用文档内容)
在这里插入图片描述

第二步:
在这里插入图片描述

示例代码

public void getAccessToken(String code) {
    String url = "https://api.weixin.qq.com/sns/oauth2/access_token";
    Map<String, String> uriParams = new HashMap<>();
    uriParams.put("appid", APP_ID);
    uriParams.put("secret", APP_SECRET);
    uriParams.put("grant_type", "authorization_code");
    uriParams.put("code", code);
    ResponseEntity<String> response = restTemplate.getForEntity(url, String.class, uriParams);
    // 成功返回的样例
    /*{
      "access_token": "ACCESS_TOKEN",
        "expires_in": 7200,
        "refresh_token": "REFRESH_TOKEN",
        "openid": "OPENID",
        "scope": "SCOPE"
    }*/
    if (response != null && StringUtil.isNotEmpty(response.getBody())) {
      JSONObject resJson = JSON.parseObject(response.getBody());
      if (resJson.containsKey("access_token")) {
        // TODO access_token等相关信息到数据库或者redis
      }
    }
  }

第三步:
加粗样式

 public void refreshToken() {
    String url = "https://api.weixin.qq.com/sns/oauth2/refresh_token";
    Map<String, String> uriParams = new HashMap<>();
    uriParams.put("appid", APP_ID);
    uriParams.put("grant_type", "refresh_token");
    // 填写通过 access_token 获取到的 refresh_token 参数
    // 信息安全问题,应取redis或者数据库(access_token不存客户端)
    uriParams.put("access_token", "");
    ResponseEntity<String> response = restTemplate.getForEntity(url, String.class, uriParams);
    // 成功返回样例
    /*{
      "access_token": "ACCESS_TOKEN",
        "expires_in": 7200,
        "refresh_token": "REFRESH_TOKEN",
        "openid": "OPENID",
        "scope": "SCOPE"
    }*/
    if (response != null && StringUtil.isNotEmpty(response.getBody())) {
      JSONObject resJson = JSON.parseObject(response.getBody());
      if (resJson.containsKey("access_token")) {
        // TODO access_token等相关信息到数据库或者redis
      }
    }
  }

第四步:获取个人信息,也是最终目的
在这里插入图片描述

@Override
  public void getWxUserInfo(String openid) {
    String url = "https://api.weixin.qq.com/sns/userinfo";
    Map<String, String> uriParams = new HashMap<>();
    // TODO 本系统应从redis获取access_token
    uriParams.put("access_token", "");
    uriParams.put("openid", openid);
    ResponseEntity<String> response = restTemplate.getForEntity(url, String.class, uriParams);
    // 成功返回样例
    /*{
      "openid": "OPENID",
      "nickname": "NICKNAME",
      "sex": 1,
      "province": "PROVINCE",
      "city": "CITY",
      "country": "COUNTRY",
      "headimgurl": "https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
      "privilege": ["PRIVILEGE1", "PRIVILEGE2"],
      "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
    }*/
    if (response != null && StringUtil.isNotEmpty(response.getBody())) {
      JSONObject resJson = JSON.parseObject(response.getBody());
      if (resJson.containsKey("nickname")) {
        // TODO 得到个人信息后,拿unionid或者openid做自己系统用户表的关联来达到微信登陆的目的
      }
    }
  }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值