微信小程序登录

微信小程序登录

  •  2018 年 12 月 8 日
  •  472
  •  Java 小程序 

首先看一下微信官方给出的流程图,可以知道小程序登录大概需要三步操作:

    1. 前端调用wx.login()方法获取code也就是用户的一次性登录凭证。

    2. 登录凭证传送到服务端,服务端调用方法使用凭证换取openid和session_key。

    3. 获取到openid后根据项目的逻辑为用户颁发登录凭证。




话不多说,下面看代码。

1. 前端获取一次性登录凭证

wx.login({
    success: res => {
        // 临时凭证
        let code = res.code;
        // code传到服务端获取登录凭证
    }
})

2. 服务端根据临时凭证调用微信接口换取openid和session_key

微信接口地址和格式如下:

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

具体代码如下:

public String verifyCode(String code) {
    logger.info("小程序根据code临时登录凭证校验, code:{}", code);
    try {
        // 参数map
        Map<String, String> params = new HashMap<String, String>() {{
            this.put("appid", "appId");
            this.put("secret", "secret");
            this.put("js_code", code);
            this.put("grant_type", "authorization_code");
        }};

        // 发送请求
        JSONObject response = HttpUtil.get("https://api.weixin.qq.com/sns/jscode2session", params);
        if (response.containsKey("errcode")) {
            throw new RuntimeException("小程序临时登录凭证校验失败:" + response.getString("errcode"));
        }

        // 获取session_key and openid
        String session_key = response.getString("session_key");
        String openid = response.getString("openid");
        logger.info("小程序临时登录凭证校验完成, session_key:{}, openid:{}", session_key, openid);

        return openid;
    } catch (Exception e) {
        logger.error("小程序临时登录凭证校验失败", e);
        throw new ApiException(505, "小程序临时登录凭证校验失败.");
    }
}

3. 颁发登录凭证

为了安全方面的原因,请不要直接使用这些信息作为你小程序的用户标识和session标识回传到小程序客户端中去,可以根据项目需求为用户颁发登录凭证方便后续业务进行登录态的校验。

扫一扫分享到微信

已有 条评论
写评论