在小程序中获取用户 openid 基本上是小程序开发面对的第一个问题,在这里分享下获取用户 openid 的简单例子。
基本流程:
1、通过登录调用接口 wx.login 获取临时登录凭证 code ,并回传到开发者服务器 。
2、后台使用 code、appid、appsecret 换取用户唯一标识 openid 和会话密钥 session_key。 (appid、appsecret 这2个值在开通微信公众号认证之后,可以在微信公众平台小程序后台获取)
刚开始进入小程序调用登录接口,不过现在小程序获取用户信息作出调整,如果登录用到此接口,需要开发者对登录做出调整参考获取用户信息接口调整 ,这里根据自己业务需求判断调用该接口,涉及到后台需要 iv 和 encryptedData 等解密用户信息等。
直接上代码:
App({
onLaunch: function() {
wx.login({
success: function(res) {
if (res.code) {
//发起网络请求
wx.request({
url: 'https://xxx/getOpenid',
data: {
code: res.code
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
});
}
})
后台简单使用 java
@Controller
@RequestMapping("/xxx")
public class GetOpenidController {
@Autowired
private TransferService transferService;
@RequestMapping(value = "/getOpenid")
public void getOpenid(HttpServletRequest req, HttpServletResponse resp) throws Exception {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=UTF-8");
//这 2 个值在开通公众号认证之后,可以在微信后台获取
String APPID = "xxx"; //小程序唯一标识
String SECRET = "xxx"; //小程序的 app secret
String code = req.getParameter("code");
String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + APPID + "&secret=" + SECRET + "&js_code=" + code + "&grant_type=authorization_code";
HttpUtil httpUtil = new HttpUtil();
String openid = "";
Map<String, String> map = new HashMap<String, String>();
try {
HttpResult httpResult = httpUtil.doGet(url, null, null);
if (httpResult.getStatusCode() == 200) {
com.google.gson.JsonParser jsonParser = new com.google.gson.JsonParser();
JsonObject obj = (JsonObject) jsonParser.parse(httpResult.getBody());
openid = obj.get("openid").getAsString();
}
} catch (Exception e) {
e.printStackTrace();
}
if (openid != "") {
map.put("openid", openid);
transferService.login(map); //保存用户信息
}
}
}
获取结果除了 openid 还有 session_key,但是切记获取会话密钥 session_key 可以保存在服务器或者用来解密信息。为了数据不被篡改,开发者不应该把 session_key 传到小程序客户端等服务器外的环境。
参考以上这个例子就可以获取用户 openid,代码写的有点 low 示例仅提供一个思路,具体的实现需要开发者根据自己项目来定。
水平有限,若有问题请留言交流!
互相学习,共同进步 :) 转载请注明出处谢谢!