在小程序中获取用户 openid 基本上是小程序开发面对的第一个问题,在这里分享下获取用户 openid 的简单例子。html
一、经过登陆调用接口 wx.login 获取临时登陆凭证 code ,并回传到开发者服务器 。java
二、后台使用 code、appid、appsecret 换取用户惟一标识 openid 和会话密钥 session_key。 (appid、appsecret 这2个值在开通微信公众号认证以后,能够在微信公众平台小程序后台获取)json
刚开始进入小程序调用登陆接口,不过如今小程序获取用户信息做出调整,若是登陆用到此接口,须要开发者对登陆作出调整参考获取用户信息接口调整 ,这里根据本身业务需求判断调用该接口,涉及到后台须要 iv 和 encryptedData 等解密用户信息等。小程序
直接上代码:api
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 示例仅提供一个思路,具体的实现须要开发者根据本身项目来定。网络
水平有限,如有问题请留言交流!session
互相学习,共同进步 :) 转载请注明出处谢谢!app