首页 > 编程 > Java > 正文

Java微信公众号开发之通过微信公众号获取用户信息

2019-11-26 12:16:35
字体:
来源:转载
供稿:网友

最近由于公司业务,就开始研究微信开发的流程,说实话,这东西刚开始看到时候和看天书的一样,总算,看了一天的文档,测试代码终于出来了。

1、首先需要到微信网站去设置一下,我是直接用的微信测试号。

        接口配置信息必须要填写的,所以说必须能将自己的服务发布出去

          

            

            

                             到此微信配置完毕,接下来就是直接上代码了

2、获取用户信息的方式一共是两种,前提都是用户关注微信公众号,一种是静默获取(snsapi_base,这种方式只能获取openid),另一种是授权获取(snsapi_userinfo,可以获取用户的详细信息)。

      先说第一种

  (1)首先需要先访问微信的链接

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxxxxxxxxxxxx&redirect_uri=http://xxxxxx/open/openid&response_type=code&scope=snsapi_base

           这里的 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微信公众号开发之通过微信公众号获取用户信息,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表