微信公众号【获取openid和用户信息】

标签: 微信
13073人阅读 评论(0) 收藏 举报
分类:

梦想是一场华美的旅途,每个人在找到它之前,都只是孤独的少年。


Index.aspx.cs代码:

 public partial class Index : System.Web.UI.Page
    {

        //用户id
        public string openid = "";

        //公众号信息部分
        public string appid = ConfigurationManager.AppSettings["AppId"];
        public string appsecret = ConfigurationManager.AppSettings["AppSecret"];
        public string redirect_uri =HttpUtility.UrlEncode("http://www.china101.net/wxtest/Index.aspx");
        public string scope = "【删除这个并填入请求类型,例如:snsapi_userinfo】";

        #region 显示页面
        public string accesstoken;
        public string nickname;
        public string sex;
        public string headimgurl;
        public string province;
        public string country;
        public string language;
        public string city;

        public string privilege = "";
        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {

            /*
           *微信认证获取openid部分:
           *临时认证code
           */
            //微信认证部分:第二步 获得code
            string code = Request["code"];
            if (string.IsNullOrEmpty(code))
            {
                //如果code没获取成功,重新拉取一遍
                OpenAccess();
            }
            //微信认证部分:第三步    获得openid
            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 result = HttpClientHelper.GetResponse(url);
            LogHelper.WriteFile(result);
            JObject outputObj = JObject.Parse(result);

            //微信认证部分:第四步   获得更多信息
            accesstoken = outputObj["access_token"].ToString();
            openid = outputObj["openid"].ToString();
            url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN",accesstoken,openid);
            string result1 = HttpClientHelper.GetResponse(url);
            LogHelper.WriteFile(result1);
            JObject outputObj1 = JObject.Parse(result1);//将json转为数组
            //以下是第四步获得的信息:       
             nickname = outputObj1["nickname"].ToString(); //昵称
             sex = outputObj1["sex"].ToString(); //性别什么的
             headimgurl = outputObj1["headimgurl"].ToString(); //头像url
             province = outputObj1["province"].ToString(); ;
             country = outputObj1["country"].ToString(); ;
             language = outputObj1["language"].ToString(); ;
             city = outputObj1["city"].ToString(); ;
            //将获得的用户信息填入到session中
            Session["openid"] = outputObj1["openid"];
            //转向回入口
            //OpenAccess();
        }

        /*
         * 接入入口
         * 开放到微信菜单中调用
         * @param $dir_url 来源url
         * @since 1.0
         * @return void
         */
        public void OpenAccess()
        {
            //判断session不存在
            if (Session["openid"] == null)
            {
                //认证第一步:重定向跳转至认证网址
                string url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&&response_type=code&scope=snsapi_userinfo&m=oauth2#wechat_redirect", appid, redirect_uri);
                Response.Redirect(url);
            }
            //判断session存在
            else
            {
                //跳转到前端页面.aspx
                Response.Redirect(Request.Url.ToString());
            }
        }

    }

Index.aspx内容:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="TEST.Index" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
        td
        {
            word-wrap: break-word;
        }
    </style>
    <script type="text/javascript">

    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="wu" runat="server">
        <table style="width: 100%;">
            <tr>
                <td style="width: 150px;">
                    <p>
                        openid:<%=openid%></p>
                </td>
                <td>
                    <p>
                        nickname:<%=nickname%></p>
                </td>
                <td>
                    <p>
                        sex:<%=sex%></p>
                </td>
            </tr>
            <tr>
                <td>
                    <p>
                        language:<%=language%></p>
                </td>
                <td>
                    <p>
                        city:<%=city%></p>
                </td>
                <td>
                    <p>
                        country:<%=country%></p>
                </td>
            </tr>
            <tr>
                <td>
                    <p>
                        headimgurl:<img width="50px;" src="<%=headimgurl %>" alt=""></p>
                </td>
                <td>
                    <p>
                        privilege:<%=privilege%></p>
                </td>
                <td>
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>
</html>

HttpClientHelper.cs代码:

public class HttpClientHelper
    {
        /// <summary>
        ///     get请求
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string GetResponse(string url)
        {
            if (url.StartsWith("https"))
            {
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
            }

            var httpClient = new HttpClient();
            httpClient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage response = httpClient.GetAsync(url).Result;

            if (response.IsSuccessStatusCode)
            {
                string result = response.Content.ReadAsStringAsync().Result;
                return result;
            }
            return null;
        }

        public static T GetResponse<T>(string url)
            where T : class, new()
        {
            if (url.StartsWith("https"))
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

            var httpClient = new HttpClient();
            httpClient.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/json"));
            HttpResponseMessage response = httpClient.GetAsync(url).Result;

            T result = default(T);

            if (response.IsSuccessStatusCode)
            {
                Task<string> t = response.Content.ReadAsStringAsync();
                string s = t.Result;

                result = JsonConvert.DeserializeObject<T>(s);
            }
            return result;
        }

        /// <summary>
        ///     post请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="postData">post数据</param>
        /// <returns></returns>
        public static string PostResponse(string url, string postData)
        {
            if (url.StartsWith("https"))
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

            HttpContent httpContent = new StringContent(postData);
            httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var httpClient = new HttpClient();

            HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;

            if (response.IsSuccessStatusCode)
            {
                string result = response.Content.ReadAsStringAsync().Result;
                return result;
            }
            return null;
        }

        /// <summary>
        ///     发起post请求
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="url">url</param>
        /// <param name="postData">post数据</param>
        /// <returns></returns>
        public static T PostResponse<T>(string url, string postData)
            where T : class, new()
        {
            if (url.StartsWith("https"))
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

            HttpContent httpContent = new StringContent(postData);
            httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var httpClient = new HttpClient();

            T result = default(T);

            HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;

            if (response.IsSuccessStatusCode)
            {
                Task<string> t = response.Content.ReadAsStringAsync();
                string s = t.Result;

                result = JsonConvert.DeserializeObject<T>(s);
            }
            return result;
        }

        /// <summary>
        ///     V3接口全部为Xml形式,故有此方法
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="url"></param>
        /// <param name="xmlString"></param>
        /// <returns></returns>
        public static T PostXmlResponse<T>(string url, string xmlString)
            where T : class, new()
        {
            if (url.StartsWith("https"))
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

            HttpContent httpContent = new StringContent(xmlString);
            httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var httpClient = new HttpClient();

            T result = default(T);

            HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;

            if (response.IsSuccessStatusCode)
            {
                Task<string> t = response.Content.ReadAsStringAsync();
                string s = t.Result;

                result = XmlDeserialize<T>(s);
            }
            return result;
        }

        /// <summary>
        ///     反序列化Xml
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="xmlString"></param>
        /// <returns></returns>
        public static T XmlDeserialize<T>(string xmlString)
            where T : class, new()
        {
            try
            {
                var ser = new XmlSerializer(typeof (T));
                using (var reader = new StringReader(xmlString))
                {
                    return (T) ser.Deserialize(reader);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("XmlDeserialize发生异常:xmlString:" + xmlString + "异常信息:" + ex.Message);
            }
        }
    }

结果如图:

这里写图片描述

查看评论

.NET获取微信openid

.net获取微信OpenID
  • fxj805835819
  • fxj805835819
  • 2016-06-22 12:22:46
  • 5097

微信公众号开发系列-获取微信OpenID

在微信开发时候在做消息接口交互的时候需要使用带微信加密ID(OpenId),下面讲讲述2中类型方式获取微信OpenID,接收事件推送方式和网页授权获取用户基本信息方式获取。...
  • fuyifang
  • fuyifang
  • 2014-11-02 11:02:07
  • 164733

net/c# 微信企业号 userid转换成openid接口

#region 方法 GetQiyConvertToUserid(string accesstoken, string strOpenId)  openid转换成userid接口     /// ...
  • yelin042
  • yelin042
  • 2017-02-04 09:45:13
  • 511

微信公众平台获取“openid”的方法

微信公众平台的所谓“openid”分为两种: [第一种openid]为利用交互的xml中获取: 每个用户针对每个微信公众平台唯一,即同一个用户对不同微信公众平台[第一种openid]是不同...
  • china_skag
  • china_skag
  • 2015-05-27 11:31:22
  • 6408

微信小程序案例:获取微信访问用户的openid

在微信开发项目中,获取openid是项目常遇的问题,本文通过主要讲解实现在微信小程序中如何获取用户的openid,案例实现非常简单         具体实现方法是通过登录接口获取登录凭证,然后通过r...
  • canpark
  • canpark
  • 2017-01-06 17:00:58
  • 55008

基于Node.js微信授权获取用户信息

前期准备映射工具 将本机地址映射到公网ngrok下载地址: http://www.qydev.com/选择linux版本,将工具下载到目录: /home/b.jiang/ngrok02/linux_...
  • WificamSDK7
  • WificamSDK7
  • 2017-03-16 17:24:57
  • 3243

nodejs微信开发--网页获取用户授权信息

思路是这样的,第一步在页面获取到授权以后的code 拿code去nodejs后台的httpserver请求 nodejs接到请求以后,拿到code去拿accessToken,然后通过accessTok...
  • sinat_29843547
  • sinat_29843547
  • 2015-11-13 10:33:14
  • 4213

微信公众号开发-微信网页授权获取用户openid以及用户信息的步骤

一、微信网页授权获取用户openid以及用户信息的步骤 开发文档 http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75....
  • maguanghui_2012
  • maguanghui_2012
  • 2016-10-13 17:14:47
  • 951

微信强制请缓存和授权登录,vue框架

... import store from './vuex/store' import cookie from './libs/cookie' // 路由预先判断...
  • kilmas2012
  • kilmas2012
  • 2017-03-20 18:17:13
  • 4723

微信小程序 获取用户的openid

在微信开发项目中,获取openid是项目常遇的问题,本文通过主要讲解实现在微信小程序中如何获取用户的openid,案例实现非常简单         具体实现方法是通过登录接口获取登录凭证,然后通...
  • yelin042
  • yelin042
  • 2018-01-16 10:28:45
  • 364
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 146万+
    积分: 2万+
    排名: 495
    博客专栏
    文章分类
    微信公众号