• C#获取用户基本信息一(关注了公众号的用户)


    一、获取Code 

     假设我们需要网页授权的页面的地址为redirect_uri

    需要获取Code的话我们第一步是跳转到授权地址,我们第一步便是获取拼接授权地址 --采用snsapi_base方式

    public partial class WebAuth : System.Web.UI.Page
        {
            string Appid = "XXXXXXXXXXXXXXXXXX";
            string redirect_uri = "http://www.xxxxx.com/wx/GetUserInfor.aspx";
            protected void Page_Load(object sender, EventArgs e)
            {
                
                string url = GetCodeUrl(Appid, redirect_uri);
                Response.Redirect(url);
            }
    
            /// <summary>
            /// 对页面是否要用授权 用snsapi_base方式 获取Code Appid是微信应用id
            /// </summary>
            /// <returns></returns>
            public string GetCodeUrl(string Appid, string redirect_uri)
            {
                return string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect", Appid, redirect_uri);
            }
    
            
        }

    当在微信中打开如下地址的时候如果授权成功,会自动跳转到页面redirect_uri?code=CODE&state=STATE,这样我们就可以获取到Code了

    二、用Code换取Openid、再用Openid获取用户的基本信息

    用get方法获取到json格式的数据,

    {
       "access_token":"ACCESS_TOKEN",
       "expires_in":7200,
       "refresh_token":"REFRESH_TOKEN",
       "openid":"OPENID",
       "scope":"SCOPE",
       "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
    }
    public partial class GetUserInfor : System.Web.UI.Page
        {
            string Appid = "wxceefad22b094e8a9";
            string Appsecret = "935c3d938aa26fa4f627b4926afd4b16";
            protected void Page_Load(object sender, EventArgs e)
            {
                string code = Request["code"];
                string openid = CodeGetOpenid(code);
                Dictionary<string, object> userInfor = GetUserInfo(openid);
                Response.Write(userInfor["nickname"]);
            }
    
            /// <summary>
            /// 用Code换取Openid
            /// </summary>
            /// <param name="Code"></param>
            /// <returns></returns>
            public string CodeGetOpenid(string Code)
            {
                string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", Appid, Appsecret, Code);
                string ReText = WebRequestHelper.WebRequestPostOrGet(url, "");//post/get方法获取信息 
    
                JavaScriptSerializer Jss = new JavaScriptSerializer();
                Dictionary<string, object> DicText = (Dictionary<string, object>)Jss.DeserializeObject(ReText);
                if (!DicText.ContainsKey("openid"))
                    return "";
                return DicText["openid"].ToString();
            }
    
            /// <summary>
            /// 用openid换取用户信息
            /// </summary>
            /// <param name="openid">微信标识id</param>
            /// <returns></returns>
            public Dictionary<string, object> GetUserInfo(string openid)
            {
                JavaScriptSerializer Jss = new JavaScriptSerializer();
                string access_token = AccessToken.GetAccessToken();//获取access_token
                string url = string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN", access_token, openid);
                Dictionary<string, object> respDic = (Dictionary<string, object>)Jss.DeserializeObject(WebRequestHelper.WebRequestPostOrGet(url, ""));
                return respDic;
    
                //{"subscribe":1,"openid":"oOPoPs_d7K8mVLX6--WPMSbaNl5o","nickname":"SKY","sex":1,"language":"zh_CN","city":"武汉","province":"湖北","country":"中国","headimgurl":"http://wx.qlogo.cn/mmopen/icayX4JkqCu1d3esVCQ8rSfXlgibQLKaD3z73qhbPln3ZhMh5oNw5243vpoVZFXDKMhTqxQ76OzY934nlm3iaulq60058VmEV5v/0","subscribe_time":1495188935,"remark":"","groupid":0,"tagid_list":[]}
    
            }
        }

    WebRequestHelper.WebRequestPostOrGet 方法如下:

    public class WebRequestHelper
        {
            public static string WebRequestPostOrGet(string posturl, string postData)
            {
                Stream outstream = null;
                Stream instream = null;
                StreamReader sr = null;
                HttpWebResponse response = null;
                HttpWebRequest request = null;
                Encoding encoding = Encoding.UTF8;
    
                byte[] data = encoding.GetBytes(postData);
                // 准备请求...
                try
                {
                    // 设置参数
                    request = WebRequest.Create(posturl) as HttpWebRequest;
                    CookieContainer cookieContainer = new CookieContainer();
                    request.CookieContainer = cookieContainer;
                    request.AllowAutoRedirect = true;
                    request.Method = "POST";
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.ContentLength = data.Length;
                    outstream = request.GetRequestStream();
                    outstream.Write(data, 0, data.Length);
                    outstream.Close();
                    //发送请求并获取相应回应数据
                    response = request.GetResponse() as HttpWebResponse;
                    //直到request.GetResponse()程序才开始向目标网页发送Post请求
                    instream = response.GetResponseStream();
                    sr = new StreamReader(instream, encoding);
                    //返回结果网页(html)代码
                    string content = sr.ReadToEnd();
                    return content;
                }
                catch (Exception ex)
                {
                    string err = ex.Message;
                    return string.Format("{"errcode":-2,"errmsg":"{0}"}", err);
                }
            }
        }

    说明:以上代码本人也是在网上搜索根本别人的代码综合参考改写而来。

    如需要获取“未关注公众号的用户信息”,这个本人项目中还没有遇到,仅提供参考链接:http://www.cnblogs.com/net-xiejun/p/4632711.html

  • 相关阅读:
    JVM垃圾回收之三色标记
    负载均衡之LVS与Nginx对比
    浅析虚拟机内存管理模型
    JVM调优之垃圾定位、垃圾回收算法、垃圾处理器对比
    JAVA对象分析之偏向锁、轻量级锁、重量级锁升级过程
    全局负载均衡与CDN内容分发
    内存屏障在CPU、JVM、JDK中的实现
    JVM类加载与双亲委派机制被打破
    JVM虚拟机Class类文件研究分析
    Redis分布式锁升级版RedLock及SpringBoot实现
  • 原文地址:https://www.cnblogs.com/sky6699/p/6890012.html
Copyright © 2020-2023  润新知