- 小程序端请求后台获取用户唯一 : code
示例代码:
wx.login({
success (res) {
if (res.code) {
//发起网络请求
wx.request({
url: '后台服务登陆接口',
data: {
code: res.code
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
- 向服务后台(JAVA) 请求-参数code获取小程序认证信息(openid)
- 后台调用微信code转换接口获取小程序用户openid
- 代码示例
- 微信后台地址(获取openId) https://api.weixin.qq.com/sns/jscode2session
- 请求参数 : appid 小程序id \secret 密钥 \ js_code 小程序login 返回的 code、grant_type: 授权类型
- 代码示例
public final static String appId = "wx615fc0c3affd8884";
public final static String secret = "5b3a6d9e9c7ddd6f327f526ed391a095";
@Autowired
private RedisTemplate<String, String> redisTemplate;
public SessionDTO jscode2session(LoginDTO loginDTO) throws Exception {
String url = "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code";
HttpResponse response = HttpUtil.createPost(String.format(url, appId, secret, loginDTO.getCode())).execute();
if (response.getStatus() == HttpStatus.HTTP_OK) {
SessionDTO sessionDTO = JSON.parseObject(response.body(), SessionDTO.class);
logger.info("jscode2session get url -> {}, info -> {}", String.format(url, appId, secret, loginDTO.getCode()), JSON.toJSONString(sessionDTO));
if (Objects.isNull(sessionDTO) || sessionDTO.getOpenid() == null) {
throw new UserLoginException("获取openId为空,请检查code!");
}
return sessionDTO;
} else {
logger.error("jscode2session authorize error -> {}", loginDTO.getCode());
throw new UserLoginException(ErrorCodeEnum.USER_LOGIN_ERR);
}
}
登陆成功
- 手机登陆认证