栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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("");
      out.println("");
      out.println(" A Servlet");
      out.println(" ");
      out.print(" This is ");
      out.print(this.getClass());
      out.println(", using the POST method n");
      out.println("openid:" + user_openid + "nn");
      out.println("nickname:" + user_nickname + "nn");
      out.println("sex:" + user_sex + "nn");
      out.println("province:" + user_province + "nn");
      out.println("city:" + user_city + "nn");
      out.println("country:" + user_country + "nn");
      out.println("");
      out.println(" ");
      out.println("");
      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微信公众号开发之通过微信公众号获取用户信息,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对考高分网网站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/146164.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号