• 微信公众平台--网页授权获取用户基本信息(snsapi_userinfo方式)


    关于snsapi_userinfo网页授权的说明

    以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

    微信打开链接(https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx48414ee14f7d7158
    &redirect_uri=http://test.cn/testWx//servlet/Oauth2Servlet&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirect)
    即可看到效果,效果截图如下:



    具体代码如下:(代码参考博客:http://www.cnblogs.com/zyw-205520/p/3581088.html)
    Oauth2Servlet.java
    package com.payroll.wx.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import net.sf.json.JSONObject;
    
    import com.payroll.wx.util.CommendDef;
    import com.payroll.wx.util.HttpsGetUtil;
    /**
     * Oauth2Servlet
     *
     * @author admin 
     * @date 2015-2-27 下午04:32:55
     */
    public class Oauth2Servlet extends HttpServlet {
    
        private static final long serialVersionUID = 1L;
        /**
         * snsapi_userinfo为scope发起的网页授权<br/>
         * 是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
         */
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            
            String get_access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?"
                    + "appid="
                    + CommendDef.AppId
                    + "&secret="
                    + CommendDef.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";
    
            // 将请求、响应的编码均设置为UTF-8(防止中文乱码)
            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");
    
            // UserInfo_weixin userInfo=new UserInfo_weixin(user_openid,
    
            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 
    ");
            out.println("openid:" + user_openid + "
    
    ");
            out.println("nickname:" + user_nickname + "
    
    ");
            out.println("sex:" + user_sex + "
    
    ");
            out.println("province:" + user_province + "
    
    ");
            out.println("city:" + user_city + "
    
    ");
            out.println("country:" + user_country + "
    
    ");
            out.println("<img src=/" + user_headimgurl + "/");
            out.println(">");
            out.println(" </BODY>");
            out.println("</HTML>");
            out.flush();
            out.close();
        }
    }
    HttpsGetUtil.java
    package com.payroll.wx.util;
    
    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;
        }
    }
    
    
    
     
  • 相关阅读:
    【程序15】成绩>=90分用A表示,60-89分用B表示, 60分以下用C表示。
    【程序13】打印出所有的“水仙花数”,运算符和表达式
    cacti安装
    lamp安装
    虚拟机克隆之后网络重启失败
    Linux 标准输入输出、重定向
    /etc/crontab和crontab -e的区别
    nginx安装
    【程序11】有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,问每个月的兔子总数为多少?
    【程序9】输出国际象棋棋盘
  • 原文地址:https://www.cnblogs.com/haha12/p/4303760.html
Copyright © 2020-2023  润新知