100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java获取openid_JAVA获取微信小程序openid和获取公众号openid 以及通过openid获取用户信息...

java获取openid_JAVA获取微信小程序openid和获取公众号openid 以及通过openid获取用户信息...

时间:2024-03-31 00:15:42

相关推荐

java获取openid_JAVA获取微信小程序openid和获取公众号openid 以及通过openid获取用户信息...

/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./sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";//

8 // public final static String GetPageAccessTokenUrl = "https://api./sns/jscode2session?appid=APPID&secret=SECRET&js_code=CODE&grant_type=authorization_code";

9 public final static String GetPageAccessTokenUrl = "https://api./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 }

三,获取公众号openid~

1 public class HttpGetUtil {

2 public static String httpRequestToString(String url,

3 Map params) {

4 String result = null;

5 try {

6 InputStream is = httpRequestToStream(url, params);

7 BufferedReader in = new BufferedReader(new InputStreamReader(is,

8 "UTF-8"));

9 StringBuffer buffer = new StringBuffer();

10 String line = "";

11 while ((line = in.readLine()) != null) {

12 buffer.append(line);

13 }

14 result = buffer.toString();

15 } catch (Exception e) {

16 return null;

17 }

18 return result;

19 }

20

21 private static InputStream httpRequestToStream(String url,

22 Map params) {

23 InputStream is = null;

24 try {

25 String parameters = "";

26 boolean hasParams = false;

27 for(String key : params.keySet()){

28 String value = null;

29 try {

30 value = URLEncoder.encode(params.get(key), "UTF-8");

31 } catch (UnsupportedEncodingException e) {

32 e.printStackTrace();

33 }

34 parameters += key +"="+ value +"&";

35 hasParams = true;

36 }

37 if(hasParams){

38 parameters = parameters.substring(0, parameters.length()-1);

39 }

40

41

42 url += "?"+ parameters;

43

44 URL u = new URL(url);

45 HttpURLConnection conn = (HttpURLConnection) u.openConnection();

46 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

47 conn.setRequestProperty("Accept-Charset", "UTF-8");

48 conn.setRequestProperty("contentType", "utf-8");

49 conn.setConnectTimeout(50000);

50 conn.setReadTimeout(50000);

51 conn.setDoInput(true);

52 //设置请求方式,默认为GET

53 conn.setRequestMethod("GET");

54

55

56 is = conn.getInputStream();

57 } catch (UnsupportedEncodingException e) {

58 e.printStackTrace();

59 } catch (MalformedURLException e) {

60 e.printStackTrace();

61 } catch (IOException e) {

62 e.printStackTrace();

63 }

64 return is;

65 }

66

67 public static String GetCodeRequest1 = "https://open./connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";

68 public static String getCodeRequest(String appid){

69 HttpClient client = null;

70 String result = null;

71 String appId = appid;

72 String REDIRECT_URI= "";//回调请求地址

73 String SCOPE="snsapi_base";

74

75 GetCodeRequest1 = GetCodeRequest1.replace("APPID", urlEnodeUTF8(appId));

76 GetCodeRequest1 = GetCodeRequest1.replace("REDIRECT_URI",urlEnodeUTF8(REDIRECT_URI));

77 GetCodeRequest1 = GetCodeRequest1.replace("SCOPE", SCOPE);

78 result = GetCodeRequest1;

79

80 System.out.println(REDIRECT_URI);

81

82 return result;

83 }

84 public static String urlEnodeUTF8(String str){

85 String result = str;

86 try {

87 result = URLEncoder.encode(str,"UTF-8");

88 } catch (Exception e) {

89 e.printStackTrace();

90 }

91 return result;

92 }

93 }

@RequestMapping("/get/gzh/openid")

public @ResponseBody

String GetGZHOpenid(HttpServletRequest request, HttpServletResponse response) throws IOException {

String code = request.getParameter("code");//获取code

Map params = new HashMap();

params.put("secret", 你的公众号秘钥);

params.put("appid", 你的公众号APPID);

params.put("grant_type", "authorization_code");

params.put("code", code);

String result = HttpGetUtil.httpRequestToString(

"https://api./sns/oauth2/access_token", params);

JSONObject jsonObject = JSONObject.fromObject(result);

String openid = jsonObject.get("openid").toString();

LOGGER.debug("code------" + code);

LOGGER.debug("得到的openid为:" + openid);

return openid;

}

四,通过微信获取的openid来获取用户信息

1 /**

2 * 获取accessToken

3 *

4 */

5 public class GetAccessTokenUtil {

6 // 网页授权接口

7 public final static String GetPageAccessTokenUrl = "https://api./cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";

8 public static Map getAccessToken(String appid, String appsecret) {

9 String requestUrl = GetPageAccessTokenUrl.replace("APPID", appid).replace("APPSECRET", appsecret);

10 HttpClient client = null;

11 Map result = new HashMap();

12 String accessToken = null;

13 try {

14 client = new DefaultHttpClient();

15 HttpGet httpget = new HttpGet(requestUrl);

16 ResponseHandler responseHandler = new BasicResponseHandler();

17 String response = client.execute(httpget, responseHandler);

18 JSONObject OpenidJSONO = JSONObject.fromObject(response);

19 accessToken = String.valueOf(OpenidJSONO.get("access_token"));

20 result.put("accessToken", accessToken);

21 } catch (Exception e) {

22 e.printStackTrace();

23 } finally {

24 client.getConnectionManager().shutdown();

25 }

26 return result;

27 }

28 }

//通过openid获取用户的信息,这个看你需要获取用户的哪些信息,

// https://mp./wiki?t=resource/res_main&id=mp1421140839 这个是微信官方的获取unionid机制 用户信息

public class GetBasicInformation {

// 网页授权接口

public final static String GetPageAccessTokenUrl = "https://api./cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";

public static Map getAccessToken(String access_token, String openid) {

String requestUrl = GetPageAccessTokenUrl.replace("ACCESS_TOKEN", access_token).replace("OPENID", openid);

HttpClient client = null;

Map result = new HashMap();

try {

client = new DefaultHttpClient();

HttpGet httpget = new HttpGet(requestUrl);

ResponseHandler responseHandler = new BasicResponseHandler();

String response = client.execute(httpget, responseHandler);

JSONObject OpenidJSONO = JSONObject.fromObject(response);

// String accessToken = String.valueOf(OpenidJSONO.get("access_token"));

String subscribe = String.valueOf(OpenidJSONO.get("subscribe"));

String nickname = new String(String.valueOf(OpenidJSONO.get("nickname")).getBytes("ISO8859-1"),"UTF-8");

String sex = String.valueOf(OpenidJSONO.get("sex"));

String language = String.valueOf(OpenidJSONO.get("language"));

String city = new String(String.valueOf(OpenidJSONO.get("city")).getBytes("ISO8859-1"),"UTF-8");

String province = new String(String.valueOf(OpenidJSONO.get("province")).getBytes("ISO8859-1"),"UTF-8");

String country = new String(String.valueOf(OpenidJSONO.get("country")).getBytes("ISO8859-1"),"UTF-8");

String headimgurl = String.valueOf(OpenidJSONO.get("headimgurl"));

String subscribeTime = String.valueOf(OpenidJSONO.get("subscribe_time"));

String unionid = String.valueOf(OpenidJSONO.get("unionid"));

// String accessToken =new String(String.valueOf(OpenidJSONO.get("access_token")).getBytes("ISO8859-1"),"UTF-8");

// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");

// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");

// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");

// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");

// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");

// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");

// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");

// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");

// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");

// String openid =new String(String.valueOf(OpenidJSONO.get("openid")).getBytes("ISO8859-1"),"UTF-8");

// String openid = String.valueOf(OpenidJSONO.get("openid"));

// result.put("accessToken", accessToken);

result.put("subscribe", subscribe);

result.put("nickname", nickname);

result.put("sex", sex);

result.put("language", language);

result.put("city", city);

result.put("province", province);

result.put("country", country);

result.put("headimgurl", headimgurl);

result.put("subscribeTime", subscribeTime);

result.put("unionid", unionid);

// System.out.println(accessToken+"==================="+unionid);

} catch (Exception e) {

e.printStackTrace();

} finally {

client.getConnectionManager().shutdown();

}

return result;

}

}

1 /**

2 * 微信公众号获取微信unionid和其他个人信息 需要关注公众号

3 *

4 * @param openid

5 * @return

6 */

7 @RequestMapping("/basic/Information")

8 public @ResponseBody

9 Map basicInformation(String openid) {

10 //得到access_token

11 String accessToken = GetAccessTokenUtil.getAccessToken(你的公众号APPID, 你的公众号APPID对应的秘钥).get("accessToken");

12 LOGGER.debug("accessToken------" + accessToken);

13 return GetBasicInformation.getAccessToken(accessToken, openid);

14 }

总结:这个就是微信小程序和微信公众号获取openid 以及通过openid获取unionid以及用户信息的代码,微信开发文档上面看感觉功力不深厚是很难看懂的,这个我也是通过网上或者同事慢慢总结出来的。 请大家多多指教,谢谢!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。