这里有新鲜出炉的 Java 并发编程示例,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要介绍了 Java 微信公众号开发之通过微信公众号获取用户信息, 需要的朋友可以参考下
最近由于公司业务,就开始研究微信开发的流程,说实话,这东西刚开始看到时候和看天书的一样,总算,看了一天的文档,测试代码终于出来了。
1、首先需要到微信网站去设置一下,我是直接用的微信测试号。
接口配置信息必须要填写的,所以说必须能将自己的服务发布出去
到此微信配置完毕,接下来就是直接上代码了
2、获取用户信息的方式一共是两种,前提都是用户关注微信公众号,一种是静默获取 (snsapi_base, 这种方式只能获取 openid),另一种是授权获取 (snsapi_userinfo, 可以获取用户的详细信息)。
先说第一种
(1) 首先需要先访问微信的链接
这里的 uri 就是直接回掉我们的服务地址,一定要记住,服务校验的判断,我是按照来判断的 echostr(第二种方式也是这样)
- package net.itraf.controller;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.PrintWriter;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
- import com.alibaba.fastjson.JSONObject;
- @Controller
- @RequestMapping("/open")
- public class OpenController {
- @RequestMapping("/toOpenId")
- public @ResponseBody String getOpenId(String code,String echostr,HttpServletResponse res) throws IOException{
- if(echostr==null){
- String url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx24d47d2080f54c5b&secret=95011ac70909e8cca2786217dd80ee3f&code="+code+"&grant_type=authorization_code";
- System.out.println(code);
- String openId="";
- try {
- URL getUrl=new URL(url);
- HttpURLConnection http=(HttpURLConnection)getUrl.openConnection();
- http.setRequestMethod("GET");
- http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
- http.setDoOutput(true);
- http.setDoInput(true);
- http.connect();
- InputStream is = http.getInputStream();
- int size = is.available();
- byte[] b = new byte[size];
- is.read(b);
- String message = new String(b, "UTF-8");
- JSONObject json = JSONObject.parseObject(message);
- openId = json.getString("openid");
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return openId;
- }else{
- PrintWriter out = res.getWriter();
- out.print(echostr);
- return null;
- }
- }
- //做服务器校验
- @RequestMapping("/tovalid")
- public void valid(String echostr,HttpServletResponse res) throws IOException{
- PrintWriter out = res.getWriter();
- out.print(echostr);
- }
- }
第二种
(1)
https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxxxx&redirect_uri=http:// 域名
/open/openid&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirect
- package net.itraf.controller;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import net.sf.json.JSONObject;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- @Controller
- @RequestMapping("/weixin")
- public class Oauth2Action {
- @RequestMapping("/oauth")
- public void auth(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String echostr = request.getParameter("echostr");
- if(echostr==null){
- String appId = "wx24d47d2080f54c5b";
- String appSecret = "95011ac70909e8cca2786217dd80ee3f";
- //拼接
- String get_access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?"
- + "appid="
- + appId
- + "&secret="
- + appSecret
- + "&code=CODE&grant_type=authorization_code";
- String get_userinfo = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
- request.setCharacterEncoding("UTF-8");
- response.setCharacterEncoding("UTF-8");
- String code = request.getParameter("code");
- System.out.println("******************code=" + code);
- get_access_token_url = get_access_token_url.replace("CODE", code);
- String json = HttpsGetUtil.doHttpsGetJson(get_access_token_url);
- JSONObject jsonObject = JSONObject.fromObject(json);
- String access_token = jsonObject.getString("access_token");
- String openid = jsonObject.getString("openid");
- get_userinfo = get_userinfo.replace("ACCESS_TOKEN", access_token);
- get_userinfo = get_userinfo.replace("OPENID", openid);
- String userInfoJson = HttpsGetUtil.doHttpsGetJson(get_userinfo);
- JSONObject userInfoJO = JSONObject.fromObject(userInfoJson);
- String user_openid = userInfoJO.getString("openid");
- String user_nickname = userInfoJO.getString("nickname");
- String user_sex = userInfoJO.getString("sex");
- String user_province = userInfoJO.getString("province");
- String user_city = userInfoJO.getString("city");
- String user_country = userInfoJO.getString("country");
- String user_headimgurl = userInfoJO.getString("headimgurl");
- response.setContentType("text/html; charset=utf-8");
- PrintWriter out = response.getWriter();
- out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
- out.println("<HTML>");
- out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
- out.println(" <BODY>");
- out.print(" This is ");
- out.print(this.getClass());
- out.println(", using the POST method \n");
- out.println("openid:" + user_openid + "\n\n");
- out.println("nickname:" + user_nickname + "\n\n");
- out.println("sex:" + user_sex + "\n\n");
- out.println("province:" + user_province + "\n\n");
- out.println("city:" + user_city + "\n\n");
- out.println("country:" + user_country + "\n\n");
- out.println("<img src=/" + user_headimgurl + "/");
- out.println(">");
- out.println(" </BODY>");
- out.println("</HTML>");
- out.flush();
- out.close();
- }else{
- PrintWriter out = response.getWriter();
- out.print(echostr);
- }
- }
- }
- package net.itraf.controller;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- public class HttpsGetUtil {
- public static String doHttpsGetJson(String Url)
- {
- String message = "";
- try
- {
- System.out.println("doHttpsGetJson");//TODO:dd
- URL urlGet = new URL(Url);
- HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
- http.setRequestMethod("GET"); //必须是get方式请求 24
- http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
- http.setDoOutput(true);
- http.setDoInput(true);
- System.setProperty("sun.net.client.defaultConnectTimeout", "30000");//连接超时30秒28
- System.setProperty("sun.net.client.defaultReadTimeout", "30000"); //读取超时30秒29 30
- http.connect();
- InputStream is =http.getInputStream();
- int size =is.available();
- byte[] jsonBytes =new byte[size];
- is.read(jsonBytes);
- message=new String(jsonBytes,"UTF-8");
- }
- catch (MalformedURLException e)
- {
- e.printStackTrace();
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
- return message;
- }
- }
以上所述是小编给大家介绍的 Java 微信公众号开发之通过微信公众号获取用户信息,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 PHPERZ 网站的支持!
来源: http://www.phperz.com/article/17/1228/356975.html