https://www.cnblogs.com/lxwt/p/10154540.html?tdsourcetag=s_pcqq_aiomsg
一,首先说明下这个微信的openid
为了识别用户,每个用户针对每个公众号会产生一个安全的OpenID,如果需要在多公众号、移动应用之间做用户共通,则需前往微信开放平台,将这些公众号和应用绑定到一个开放平台账号下,绑定后,一个用户虽然对多个公众号和应用有多个不同的OpenID,但他对所有这些同一开放平台账号下的公众号和应用,只有一个UnionID
我用简单自己理解的话来说就是 这个 你在每个公众号 或者小程序 都是在这个小程序或者这个公众号下会有一个openid 你去别的公众号 或者 小程序 这个是会改变的 但是unionid是不管你在哪个小程序或者公众号是唯一不变的。
微信官方提供了 了一个 可以通过用户的openid来获取用户信息,前提是用户必须关注了你的公众号,这个好像要做的话需要关联一个需要三百块钱认证的那个啥来着。这个就先不说了吧,现在我们要说的问题是如何获取openid
二,小程序获取openid
1 /**
2 * 微信小程序获取openid
3 * @author Mr.Lin
4 */
5 public class GetOpenIDUtil {
6 // 网页授权接口
7 // public final static String GetPageAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";//
8 // public final static String GetPageAccessTokenUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=CODE&grant_type=authorization_code";
9 public final static String GetPageAccessTokenUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=CODE&grant_type=authorization_code";
10 public static Map oauth2GetOpenid(String appid,String code,String appsecret) {
11 String requestUrl = GetPageAccessTokenUrl.replace("APPID", appid).replace("SECRET", appsecret).replace("CODE", code);
12 HttpClient client = null;
13 Map result =new HashMap();
14 try {
15 client = new DefaultHttpClient();
16 HttpGet httpget = new HttpGet(requestUrl);
17 ResponseHandler responseHandler = new BasicResponseHandler();
18 String response = client.execute(httpget, responseHandler);
19 JSONObject OpenidJSONO=JSONObject.fromObject(response);
20 String openid =String.valueOf(OpenidJSONO.get("openid"));
21 String session_key=String.valueOf(OpenidJSONO.get("session_key"));
22 String unionid=String.valueOf(OpenidJSONO.get("unionid"));
23 String errcode=String.valueOf(OpenidJSONO.get("errcode"));
24 String errmsg=String.valueOf(OpenidJSONO.get("errmsg"));
25
26 result.put("openid", openid);
27 result.put("sessionKey", session_key);
28 result.put("unionid", unionid);
29 result.put("errcode", errcode);
30 result.put("errmsg", errmsg);
31 } catch (Exception e) {
32 e.printStackTrace();
33 } finally {
34 client.getConnectionManager().shutdown();
35 }
36 return result;
37 }
38 }