微信小程序获取用户信息与 openid 完整实践
【摘要】 微信小程序获取用户信息与 openid 完整实践微信开放平台的文档体验确实不太理想:更新不够及时,内容组织也比较混乱,授权接口隔一段时间就会调整,每次改动都要在文档里跳来跳去,始终找不到一条完整的链路。同一套平台维护多套接口文档,也算是少见。不过吐槽归吐槽,该用的接口还是得用。先看官方规划的小程序登录流程。核心链路是小程序端调用 wx.login 获取临时 code,再通过 wx.reque...
微信小程序获取用户信息与 openid 完整实践
微信开放平台的文档体验确实不太理想:更新不够及时,内容组织也比较混乱,授权接口隔一段时间就会调整,每次改动都要在文档里跳来跳去,始终找不到一条完整的链路。同一套平台维护多套接口文档,也算是少见。不过吐槽归吐槽,该用的接口还是得用。
先看官方规划的小程序登录流程。核心链路是小程序端调用
wx.login 获取临时 code,再通过 wx.request 将 code 传给开发者自己的服务端;服务端再带着 appid、appsecret 和 code 与微信服务端通信,最终换取 openid 和 session_key 等用户信息。这里三个参数都很明确:
code 由 wx.login 接口获取;appid 是每个小程序固定的唯一标识,在小程序后台可以查到;appsecret 也可以在小程序后台生成。整体步骤其实并不复杂,真正的难点在于开发者服务端与微信服务端通信获取 openid 这一步。微信文档中点击 auth.code2Session 请求路径时有时会报 404,维护确实有疏漏。正确的新地址是 developers.weixin.qq.com/miniprogram...,打开后就能看到对应的接口文档。下面是我使用的后端代码片段,仅供参考:
String realLoginUrl = getRealUrl(code);
logger.info("=================请求微信获取用户信息地址:{}",realLoginUrl);
String result = HttpUtils.httpsRequest(realLoginUrl, HttpUtils.GET, null);
JSONObject resJson = JSON.parseObject(result);
String errcode = resJson.getString("errcode");
if (!StringUtils.isEmpty(errcode)) {
String errmsg = resJson.getString("errmsg");
logger.info("微信登录异常,异常原因:{},{}", errcode, errmsg);
throw new BussException("微信登录异常");
}
String openid = resJson.getString("openid");
if (StringUtils.isEmpty(openid)) {
throw new ParamException("无法获取openid信息");
}
String sessionKey = resJson.getString("session_key");
ApiResult apiResult = new ApiResult();
apiResult.getData().put("openid", openid);
apiResult.getData().put("sessionKey", sessionKey);
到这里,获取
openid 的完整过程就结束了。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)