C# 微信公衆號

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;namespace Web
{
    public partial class Test : 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("需返回的URL");

        #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 = "";

        public string errorMsg = "";
        public string errorUrl = "";
        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            // 微信官方文檔
            // https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
            // /* *微信認證獲取openid部分: *臨時認證code */
            string code = Request["code"];
            if (string.IsNullOrEmpty(code))
            {
                //判斷session不存在
                if (Session["openid"] == null)
                {
                    //認證第一步:重定向跳轉至認證網址
                    // 1.snsapi_base 不彈出受權頁面,直接跳轉,只能獲取用戶openid
                    string urlbase = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=123#wechat_redirect", appid, redirect_uri);
                    // 2.snsapi_userinfo (彈出受權頁面,可經過openid拿到暱稱、性別、所在地。而且,即便在未關注的狀況下,只要用戶受權,也能獲取其信息)
                    string usrinfo = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect", appid, redirect_uri);

                    Response.Redirect(urlbase);
                }
                //判斷session存在
                else
                {
                    //跳轉到前端頁面.aspx
                    Response.Redirect(Request.Url.ToString());
                }
                return;
            }
            //第三步 得到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 = HttpHelper.GetResponse(url);
            Log.Instance.SaveLog(result);
            JObject outputObj = JObject.Parse(result);
            if (outputObj["errmsg"] != null)
            {
                errorMsg = outputObj["errmsg"].ToString();
                errorUrl = url;
                return;
            }
            accesstoken = outputObj["access_token"].ToString();
            openid = outputObj["openid"].ToString();

            GetUserInfo(openid);//經過基礎接口獲取數據, 不彈出受權頁面
            GetUserInfo(accesstoken, openid);//經過受權頁面獲取信息, 會彈出確認頁面,須要第一步傳入userinfo
        }

        /// <summary>
        /// 經過基礎接口獲取用戶信息
        /// </summary>
        public void GetUserInfo( string openid )
        {
            //第一步 獲取基礎支持access_token
            string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, appsecret);
            string result = HttpHelper.GetResponse(url);
            Log.Instance.SaveLog(result);
            JObject outputObj = JObject.Parse(result);
            if (outputObj["errmsg"] != null)
            {
                errorMsg = outputObj["errmsg"].ToString();
                errorUrl = url;
                return;
            }
            string token = outputObj["access_token"].ToString();

            //第二步 獲取用戶基本信息
            url = string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}", token, openid);
            result = HttpHelper.GetResponse(url);
            Log.Instance.SaveLog(result);
            outputObj = JObject.Parse(result);
            if (outputObj["errmsg"] != null)
            {
                errorMsg = outputObj["errmsg"].ToString();
                errorUrl = url;
                return;
            }

            //如下是第四步得到的信息: 
            nickname = outputObj["nickname"].ToString(); //暱稱
            sex = outputObj["sex"].ToString()=="1"?"":""; //性別什麼的
            headimgurl = outputObj["headimgurl"].ToString(); //頭像url
            province = outputObj["province"].ToString();
            country = outputObj["country"].ToString(); ;
            language = outputObj["language"].ToString(); ;
            city = outputObj["city"].ToString(); ;
            //將得到的用戶信息填入到session中
            Session["openid"] = outputObj["openid"];            
        }

        /// <summary>
        /// 經過網頁受權方式獲取用戶信息
        /// </summary>
        public void GetUserInfo(string token, string openid)
        {
            //微信認證部分:第四步 得到更多信息
            string url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", accesstoken, openid);
            string result = HttpHelper.GetResponse(url);
            Log.Instance.SaveLog(result);
            JObject outputObj = JObject.Parse(result);//將json轉爲數組

            if (outputObj["errmsg"] != null)
            {
                errorMsg = outputObj["errmsg"].ToString();
                errorUrl = url;
                return;
            }

            //如下是第四步得到的信息: 
            nickname = outputObj["nickname"].ToString(); //暱稱
            sex = outputObj["sex"].ToString(); //性別什麼的
            headimgurl = outputObj["headimgurl"].ToString(); //頭像url
            province = outputObj["province"].ToString(); ;
            country = outputObj["country"].ToString(); ;
            language = outputObj["language"].ToString(); ;
            city = outputObj["city"].ToString(); ;
            //將得到的用戶信息填入到session中
            Session["openid"] = outputObj["openid"];
            //轉向回入口
            //OpenAccess();
        }

    }

}
相關文章
相關標籤/搜索