热门关键字:
jquery > jquery教程 > .net > 网友谢俊分享C#微信公众号开发之网页授权

网友谢俊分享C#微信公众号开发之网页授权

2362
作者:管理员
发布时间:2015/5/28 9:51:46
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=607

首先非常感谢网友谢俊的分享,文章来自它的博客园博客:http://www.cnblogs.com/net-xiejun/p/4519118.html,觉得文章写得非常好且经过他的同意才把文章转载到JquerySchool网站上与网友们一起分享。


在微信里面,非认证的公众号账号,只能通过在微信回复菜单单击等事件获取openid,但是认证的公众账号(之前认证的订阅号是不可以的,现在新开放了政府媒体机构的认证订阅号)可以直接在微信打开的链接中获取用户的基本信息包括openid。这里用一种比较简单的获取用户信息的网页授权的方式。注意:这种方式只可以获取关注用户的信息,非关注用户是不可以获取的。


流程图
网友谢俊分享C#微信公众号开发之网页授权

一、获取Code 
假设我们需要网页授权的页面的地址为redirect_uri,需要获取Code的话我们第一步是跳转到授权地址,我们第一步便是获取拼接授权地址 --采用snsapi_base方式

/// <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
用get方法获取到json格式的数据,

{
   "access_token":"ACCESS_TOKEN",
   "expires_in":7200,
   "refresh_token":"REFRESH_TOKEN",
   "openid":"OPENID",
   "scope":"SCOPE",
   "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

然后获取openid

/// <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 = WebRequestPostOrGet(url,"");//post/get方法获取信息 
            Dictionary<string, object> DicText = (Dictionary<string, object>)Jss.DeserializeObject(ReText);
            if (!DicText.ContainsKey("openid"))
                return "";
            return DicText["openid"].ToString();
        }


三、用openid获取用户基本信息
其中access_token 是微信凭证如何获取参照之前的博客http://www.cnblogs.com/net-xiejun/p/4422890.html
/// <summary>
        /// 用openid换取用户信息
        /// </summary>
        /// <param name="openid">微信标识id</param>
        /// <returns></returns>
        public Dictionary<string, object> GetUserInfo(string openid)
        {
            JavaScriptSerializer Jss = new JavaScriptSerializer();
            string access_token = ApiCommon.getTokenSession(Appid,Appsecret);//获取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(WebRequestPostOrGet(url, ""));
            return respDic;
        }

在页面对应的cs文件中的代码:

OAuth2 OAuth2 = new OAuth2();
        public ActionResult ApplicantActivety()
        {
            if (!string.IsNullOrEmpty(Request.QueryString["code"]))
            {
                Dictionary<string, object> DicJson = OAuth2.GetUserInfo(GetOpenidSession(Request.QueryString["code"].ToString()));
                ViewData["nickname"] = DicJson["nickname"];
                ViewData["headimgurl"] = DicJson["headimgurl"];
            }
            else {
                string redirect_uri = "Http://"+Request.Url.Authority + Request.Url.PathAndQuery;
                Response.Redirect(OAuth2.GetCodeUrl(redirect_uri));
            }
            return View();
        }
        //拉取缓存
        private string GetOpenidSession(string Code)
        {
            if (Session["OpenidSession"] != null)
            {
                OAuth2.OpenidSession = Session["OpenidSession"].ToString();
            }
            else
            {
                OAuth2.OpenidSession = OAuth2.CodeGetOpenid(Code);
                Session["OpenidSession"] = OAuth2.OpenidSession;
                Session.Timeout = 7200;
            }
            return OAuth2.OpenidSession;
        }

到此微信网页授权就开发完成了!


希望大家好好利用哦。。。,一起加油






如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:网友谢俊 微信公众号 网页授权 oauth2.0 获取用户基本信息
友荐云推荐