亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目次
サイレント認(rèn)証
コアコード
ホームページ WeChat アプレット WeChatの開発 WeChat パブリック アカウント開発 Web ページはユーザーの基本情報(bào)の取得を許可します

WeChat パブリック アカウント開発 Web ページはユーザーの基本情報(bào)の取得を許可します

Feb 24, 2017 pm 04:54 PM
WeChatパブリックアカウントの開発

ユーザーが WeChat クライアントでサードパーティの Web ページにアクセスすると、公式アカウントは WeChat Web ページの承認(rèn)メカニズムを通じてユーザーの基本情報(bào)を取得し、ビジネス ロジックを?qū)g裝できます。

微信公眾號(hào)開發(fā)網(wǎng)頁授權(quán)獲取用戶基本信息

注: Web ページを認(rèn)証するには 2 つの方法があります

微信公眾號(hào)開發(fā)網(wǎng)頁授權(quán)獲取用戶基本信息

Web 認(rèn)証の詳細(xì)については、公式 Web サイトのドキュメントを確認(rèn)してください: Web 認(rèn)証

サイレント認(rèn)証

サイレント認(rèn)証は、ユーザーが注意を払ってユーザーの基本情報(bào)を取得し、ユーザーがこのプロセスに気づいていない場合に使用されます。

最初のステップは、ファクトリークラスを通じてリクエストを転送することです


 /// <returns></returns>
        public string HandleRequest()
        {
            string response = string.Empty;
            EventMessage em = EventMessage.LoadFromXml(RequestXml);
            if (em != null)
            {
                switch (em.Event.ToLower())
                {
                    case ("subscribe"):
                        response = SubscribeEventHandler(em);//通過工廠類分發(fā)過來的請(qǐng)求,匹配到關(guān)注事件
                        break;
                    case ("unsubscribe"):
                        response = Un_SubscribeEventHandler(em);
                        break;
                    case "click":
                        response = ClickEventHandler(em);
                        break;
                }
            }
            return response;
        }


2番目のステップは、ユーザーの注意イベントを書き込むことです


 
         
         
         
         
            WeChat.Messages.TextMessage tm = = em.FromUserName;
            tm.FromUserName = em.ToUserName;
            tm.CreateTime ==
<span style="color: #000000;">       </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> tm.GenerateContent();<br/> }</span>


3番目のステップは、取得したOpenIdとaccesstoken。ユーザーの基本情報(bào)を取得します(ここでのデモはユーザーをデータベースに保存することです)


上記のコードでのAccessTokenの実裝は、新しいContextクラスを作成するだけです


/// <summary>
        /// 根據(jù)OpenId將此條粉絲記錄插入數(shù)據(jù)庫中
        /// </summary>
        /// <param name="FromUserName"></param>
        /// <param name="ToUserName"></param>
        public void ShowUserInfo(string FromUserName, string ToUserName)
        {
            try
            {
                Models.Users user = new Models.Users();
                DAL.User userInfo = new DAL.User();
                //獲取accesstoken,獲取用戶基本信息需要Openid和accesstoken即可
         accesstoken = Utility.Context.AccessToken;
         string url = string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN", accesstoken, FromUserName);
               string result = HttpUtility.GetData(url);
               XDocument doc = XmlUtility.ParseJson(result, "root");
               XElement root = doc.Root;
               if (root != null)
               {
                    #region 取值/存值
                    
                    subscribe = root.Element("subscribe").Value;//是否關(guān)注 1 是關(guān)注 
                    nickname = root.Element("nickname").Value; //昵稱
                    sex = root.Element("sex").Value; //性別什么
                    headimgurl = root.Element("headimgurl").Value; //頭像url
                    province = root.Element("province").Value;//地區(qū) 
                    country = root.Element("country").Value;
                    language = root.Element("language").Value;
                    subscribe_time = root.Element("subscribe_time").Value;
                    DateTime create_time = Common.GetTime(subscribe_time);//將時(shí)間戳轉(zhuǎn)換為當(dāng)前時(shí)間
                    city = root.Element("city").Value;
                    user.OpenID = FromUserName;//OpenID即粉絲ID
                    user.PublicId = ToUserName;
                    user.UserID = FromUserName;
                    user.NickName = nickname;
                    user.Sex = int.Parse(sex);
                    user.Subscribe = int.Parse(subscribe);
                    user.Country = country;
                    user.Province = province;
                    user.City = city;
                    user.CreateDate = create_time;
                    user.HeadimgUrl = headimgurl;
                    //將user實(shí)體存入數(shù)據(jù)庫中
                    bool show = _user.Add(user);
                    #endregion
                }
            }
            catch
            {
                throw (new ArgumentNullException());
            }

        }


private static DateTime GetAccessToken_Time;
        /// <summary>
        /// 過期時(shí)間為7200秒
        /// </summary>
        private static int Expires_Period = 7200;
        /// <summary>
        /// 
        /// </summary>
        private static string mAccessToken;

        public static string AppID = "換成相應(yīng)公眾號(hào)的即可";
        public static string AppSecret = "換成相應(yīng)公眾號(hào)的即可";
        /// <summary>
        /// 調(diào)用獲取ACCESS_TOKEN,包含判斷是否過期
        /// </summary>
        public static string AccessToken
        {
            get
            {
                //如果為空,或者過期,需要重新獲取
                if (string.IsNullOrEmpty(mAccessToken) || HasExpired())
                {
                    //獲取access_token
                    mAccessToken = GetAccessToken(AppID, AppSecret);
                }

                return mAccessToken;
            }
        }
        /// <summary>
        /// 獲取ACCESS_TOKEN方法
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="appSecret"></param>
        /// <returns></returns>
        private static string GetAccessToken(string appId, string appSecret)
        {
            string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, appSecret);
            string result = HttpUtility.GetData(url);

            XDocument doc = XmlUtility.ParseJson(result, "root");
            XElement root = doc.Root;
            if (root != null)
            {
                XElement access_token = root.Element("access_token");
                if (access_token != null)
                {
                    GetAccessToken_Time = DateTime.Now;
                    if (root.Element("expires_in") != null)
                    {
                        Expires_Period = int.Parse(root.Element("expires_in").Value);
                    }
                    return access_token.Value;
                }
                else
                {
                    GetAccessToken_Time = DateTime.MinValue;
                }
            }

            return null;
        }
        /// <summary>
        /// 判斷Access_token是否過期
        /// </summary>
        /// <returns>bool</returns>
        private static bool HasExpired()
        {
            if (GetAccessToken_Time != null)
            {
                //過期時(shí)間,允許有一定的誤差,一分鐘。獲取時(shí)間消耗
                if (DateTime.Now > GetAccessToken_Time.AddSeconds(Expires_Period).AddSeconds(-60))
                {
                    return true;
                }
            }
            return false;
        }


GetData的實(shí)現(xiàn)


     public static string GetData(string url)
        {            return SendGetHttpRequest(url, "application/x-www-form-urlencoded");
        }


ParseJson的實(shí)現(xiàn)


3番目のステップに関しては、HttpUtilityクラスには他のパブリックヘルパーメソッドがいくつかあります。それらはここでリリースされており、呼び出すことができます

。

     public static XDocument ParseJson(string json, string rootName)
        {            return JsonConvert.DeserializeXNode(json, rootName);
        }


View Code

ちなみに、上記の記事で使用したUserクラスは以下の通りです

/// <summary>
        /// 發(fā)送請(qǐng)求        /// </summary>
        /// <param name="url">Url地址</param>
        /// <param name="data">數(shù)據(jù)</param>
        public static string SendHttpRequest(string url, string data)
        {            return SendPostHttpRequest(url, "application/x-www-form-urlencoded", data);
        }        /// <summary>
        /// 
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string GetData(string url)
        {            return SendGetHttpRequest(url, "application/x-www-form-urlencoded");
        }        /// <summary>
        /// 發(fā)送請(qǐng)求        /// </summary>
        /// <param name="url">Url地址</param>
        /// <param name="method">方法(post或get)</param>
        /// <param name="method">數(shù)據(jù)類型</param>
        /// <param name="requestData">數(shù)據(jù)</param>
        public static string SendPostHttpRequest(string url, string contentType, string requestData)
        {
            WebRequest request = (WebRequest)HttpWebRequest.Create(url);
            request.Method = "POST";            byte[] postBytes = null;
            request.ContentType = contentType;
            postBytes = Encoding.UTF8.GetBytes(requestData);
            request.ContentLength = postBytes.Length;            using (Stream outstream = request.GetRequestStream())
            {
                outstream.Write(postBytes, 0, postBytes.Length);
            }            string result = string.Empty;            using (WebResponse response = request.GetResponse())
            {                if (response != null)
                {                    using (Stream stream = response.GetResponseStream())
                    {                        using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                        {
                            result = reader.ReadToEnd();
                        }
                    }

                }
            }            return result;
        }        /// <summary>
        /// 發(fā)送請(qǐng)求        /// </summary>
        /// <param name="url">Url地址</param>
        /// <param name="method">方法(post或get)</param>
        /// <param name="method">數(shù)據(jù)類型</param>
        /// <param name="requestData">數(shù)據(jù)</param>
        public static string SendGetHttpRequest(string url, string contentType)
        {
            WebRequest request = (WebRequest)HttpWebRequest.Create(url);
            request.Method = "GET";
            request.ContentType = contentType;            string result = string.Empty;            using (WebResponse response = request.GetResponse())
            {                if (response != null)
                {                    using (Stream stream = response.GetResponseStream())
                    {                        using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                        {
                            result = reader.ReadToEnd();
                        }
                    }
                }
            }            return result;
        }


デモ効果


データベースには10個(gè)のデータがありますこのとき、この公式アカウントをフォローすると、データベースが更新され、そのユーザーが承認(rèn)されているかどうかが判斷されます。認(rèn)証された場合は、認(rèn)証ページに移動(dòng)します。

コアコード

public class Users
    {        /// <summary>
        /// 全局憑證唯一Id        /// </summary>
        public string OpenID { get; set; }        /// <summary>
        /// 公眾號(hào)Id        /// </summary>
        public string PublicId { get; set; }        /// <summary>
        /// 用戶Id        /// </summary>
        public string UserID { get; set; }        /// <summary>
        /// 昵稱        /// </summary>
        public string NickName { get; set; }        /// <summary>
        /// 性別 1是男 0是女        /// </summary>
        public int Sex { get; set; }        /// <summary>
        /// 是否關(guān)注 1是關(guān)注 
        /// </summary>
        public int Subscribe { get; set; }        /// <summary>
        /// 國家        /// </summary>
        public string Country { get; set; }        /// <summary>
        /// 地區(qū)        /// </summary>
        public string Province { get; set; }        /// <summary>
        /// 城市        /// </summary>
        public string City { get; set; }        /// <summary>
        /// 關(guān)注時(shí)間        /// </summary>
        public DateTime CreateDate { get; set; }        /// <summary>
        /// 用戶頭像        /// </summary>
        public string HeadimgUrl { get; set; }        /// <summary>
        /// 第三方平臺(tái)Id,可為空        /// </summary>
        public string UnionID { get; set; }        /// <summary>
        /// 用戶取消關(guān)注時(shí)間        /// </summary>
        public DateTime Un_Subscribe_Time { get; set; }
    }

このうち、ユーザー認(rèn)証のコードメソッドは次のとおりです。 ShouQuanAccessTokenメソッド

        /// <summary>
        /// 獲取授權(quán)用戶的基本信息,包括頭像,姓名,等等(推薦方法)        /// </summary>
        /// <param name="accessToken">用戶授權(quán)之后的accessToken</param>
        /// <param name="openid">用戶授權(quán)之后的openid</param>
        /// <returns></returns>
        public static ShouQuanWeiXinUserInfo GetShouQuanMessage()
        {            //先判斷是否有獲取到用戶授權(quán)的Code,HttpContext.Current.Session["ShouquanCode"]
            if (HttpContext.Current.Session["ShouquanCode"] == null|| HttpContext.Current.Session["ShouquanCode"].ToString()=="")
            {
                HttpContext.Current.Session["ShouquanCode"] = "123";                //用戶授權(quán)的Code                GetShouQuanCodeUrl(HttpContext.Current.Request.Url.AbsoluteUri);
            }            else if(HttpContext.Current.Request.QueryString["code"] == null || HttpContext.Current.Request.QueryString["code"] == "")
            {                //用戶授權(quán)的Code                GetShouQuanCodeUrl(HttpContext.Current.Request.Url.AbsoluteUri);
            }            else
            {                var model = ShouQuanAccessToken(HttpContext.Current.Request.QueryString["code"]);                var url =
                    $"http://ipnx.cn/{model.access_token}&openid={model.openid}&lang=zh_CN";                string gethtml = MyHttpHelper.HttpGet(url);                var ac = JsonHelpers.ToObject<ShouQuanWeiXinUserInfo>(gethtml);                return ac;
            }            return null;
        }

ユーザーエンティティ

 /// <summary>
        /// 重新獲取用戶授權(quán)的Code,可以獲取用戶的基本信息(頭像,姓名,等等)(推薦用的方法)        /// </summary>
        /// <param name="url">目標(biāo)Url</param>
        /// <returns></returns>
        public static void GetShouQuanCodeUrl(string url)
        {            string CodeUrl = "";            //加密過的url
            string value = HttpUtility.UrlEncode(url);            //用戶授權(quán)后的Code
            CodeUrl = $"http://ipnx.cn/{Appid}&redirect_uri={value}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
            System.Web.HttpContext.Current.Response.Redirect(CodeUrl);//先跳轉(zhuǎn)到微信的服務(wù)器,取得code后會(huì)跳回來這頁面的
        }


使用するMyHttpHelperパブリッククラスは以下の通りです

 /// <summary>
        //用戶授權(quán)之后,獲取授權(quán)的Access_Token與基本的Access_Token是不同的(推薦方法)
        /// </summary>
        /// <param name="code">用戶授權(quán)之后的Code</param>
        /// <returns></returns>
        public static OauthAccessToken ShouQuanAccessToken(string code)
        {            var url = $"http://ipnx.cn/{Appid}&secret={Secret}&code={code}&grant_type=authorization_code";            string gethtml = MyHttpHelper.HttpGet(url);
            OauthAccessToken ac = new OauthAccessToken();
            ac = JsonHelpers.ToObject<OauthAccessToken>(gethtml);            return ac;
        }



コードを表示

カプセル化された JsonHelpers クラスは次のとおりです。以下の通り



public class OauthAccessToken
        {            public string access_token { get; set; }            public string expires_in { get; set; }            public string refresh_token { get; set; }            public string openid { get; set; }            public string scope { get; set; }
        }



View Code

このうち、VS2015以下であればURL文字列をstring.format("")メソッドに変更できます


値の呼び出し方法

効果の表示

公式アカウントのリンクをクリックした場合の効果は次のとおりです:



ユーザーの基本情報(bào)を取得するためのWeChatパブリックアカウント開発Webページの承認(rèn)の詳細(xì)については、関連記事 PHP 中國語 Web サイトをフォローしてください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)