ホームページ WeChat アプレット WeChatの開発 WeChatパブリックアカウント開発Webページで現在のユーザーのOpenIDと注意事項をタイムリーに取得します

WeChatパブリックアカウント開発Webページで現在のユーザーのOpenIDと注意事項をタイムリーに取得します

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

はじめに

この記事は主に、ユーザーの基本情報を取得するための前回の記事の Web ページの承認の続きであり、ユーザーがリンクをクリックしたときに現在のユーザーの OpenId を再度取得する方法についての一般的な説明と説明でもあります。最初のサイレント認証後の公式アカウント。

前回の記事を読んだ人なら誰でも、ユーザーが注意を払った時点で、ユーザーの基本情報がすでにデータベースに保存されていることがわかります。それでは、ユーザーが久しぶりに公式アカウントの Web リンクをクリックした場合、どうなるでしょうか。この一意の識別子を再度取得しますか?


openidを再取得します

具体的な実装

まず、openidを取得するメソッドを定義しますReGetOpenId

public static void ReGetOpenId()
        {
            string url = System.Web.HttpContext.Current.Request.Url.AbsoluteUri;//获取当前url
            if (System.Web.HttpContext.Current.Session["openid"] == "" || System.Web.HttpContext.Current.Session["openid"] == null)
            {
                //先要判断是否是获取code后跳转过来的
                if (System.Web.HttpContext.Current.Request.QueryString["code"] == "" || System.Web.HttpContext.Current.Request.QueryString["code"] == null)
                {
                    //Code为空时,先获取Code
                    string GetCodeUrls = GetCodeUrl(url);
                    System.Web.HttpContext.Current.Response.Redirect(GetCodeUrls);//先跳转到微信的服务器,取得code后会跳回来这页面的

                }
                else
                {
                    //Code非空,已经获取了code后跳回来啦,现在重新获取openid
                    Log log = new Log(AppDomain.CurrentDomain.BaseDirectory + @"/log/Log.txt");
                    string openid = "";
                    openid = GetOauthAccessOpenId(System.Web.HttpContext.Current.Request.QueryString["Code"]);//重新取得用户的openid
                    System.Web.HttpContext.Current.Session["openid"] = openid;
                }
            }
        }
ログイン後にコピー

注: URLにドメイン名を含めることが最善です。ピーナッツシェルのドメイン名は、その後、WeChat プラットフォームを調整してください。接続時に、間違ったリンクエラーが報告されます

上記の GetCodeUrl メソッドは次のとおりです

#region 重新获取Code的跳转链接(没有用户授权的,只能获取基本信息)
        /// <summary>重新获取Code,以后面实现带着Code重新跳回目标页面(没有用户授权的,只能获取基本信息(openid))</summary>
        /// <param name="url">目标页面</param>
        /// <returns></returns>
        public static string GetCodeUrl(string url)
        {
            string CodeUrl = "";
            //对url进行编码
            url = System.Web.HttpUtility.UrlEncode(url);
            CodeUrl = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + Appid + "&redirect_uri=" + url + "?action=viewtest&response_type=code&scope=snsapi_base&state=1#wechat_redirect");

            return CodeUrl;

        }
        #endregion
ログイン後にコピー

上記の GetOauthAccessOpenId メソッドは次のとおりです

#region 以Code换取用户的openid、access_token
        /// <summary>根据Code获取用户的openid、access_token</summary>
        public static string GetOauthAccessOpenId(string code)
        {
            Log log = new Log(AppDomain.CurrentDomain.BaseDirectory + @"/log/Log.txt");
            string Openid = "";
            string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + Appid + "&secret=" + Secret + "&code=" + code + "&grant_type=authorization_code";
            string gethtml = MyHttpHelper.HttpGet(url);
            log.log("拿到的url是:" + url);
            log.log("获取到的gethtml是" + gethtml);
            OAuth_Token ac = new OAuth_Token();
            ac = JsonHelper.ToObject<OAuth_Token>(gethtml);
            log.log("能否从html里拿到openid=" + ac.openid);
            Openid = ac.openid;
            return Openid;
        }
        #endregion
ログイン後にコピー

上記のメソッドを通じてユーザーの Openid を取得できます上に示したように、ユーザー ID は System.Web.HttpContext.Current.Session["openid"] に保存されているため、取得は非常に簡単です

取得する必要がある場所で実行してください

#region 获取当前用户Openid
                ReGetOpenId();
                log.log("走完获取openid的方法之后,当前Session的值是:" + System.Web.HttpContext.Current.Session["openid"]);
                #endregion
ログイン後にコピー

注: の OAuth_Token クラス上記は次のとおりです:

public class OAuth_Token
    {
        /// <summary>
        /// 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
        /// </summary>
        public string access_token { get; set; }
        /// <summary>
        /// access_token接口调用凭证超时时间,单位(秒)
        /// </summary>
        public string expires_in { get; set; }
        /// <summary>
        /// 用户刷新access_token
        /// </summary>
        public string refresh_token { get; set; }
        /// <summary>
        /// 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
        /// </summary>
        public string openid { get; set; }
        /// <summary>
        /// 用户授权作用域
        /// </summary>
        public string scope { get; set; }
    }
ログイン後にコピー

ログファイル

ちなみに、単純なログクラスも提供されています:

/// <summary>
    /// 日志类
    /// </summary>
    public class Log
    {
        private string logFile;
        private StreamWriter writer;
        private FileStream fileStream = null;

        public Log(string fileName)
        {
            logFile = fileName;
            CreateDirectory(logFile);
        }

        public void log(string info)
        {

            try
            {
                System.IO.FileInfo fileInfo = new System.IO.FileInfo(logFile);
                if (!fileInfo.Exists)
                {
                    fileStream = fileInfo.Create();
                    writer = new StreamWriter(fileStream);
                }
                else
                {
                    fileStream = fileInfo.Open(FileMode.Append, FileAccess.Write);
                    writer = new StreamWriter(fileStream);
                }
                writer.WriteLine(DateTime.Now + ": " + info);

            }
            finally
            {
                if (writer != null)
                {
                    writer.Close();
                    writer.Dispose();
                    fileStream.Close();
                    fileStream.Dispose();
                }
            }
        }

        public void CreateDirectory(string infoPath)
        {
            DirectoryInfo directoryInfo = Directory.GetParent(infoPath);
            if (!directoryInfo.Exists)
            {
                directoryInfo.Create();
            }
        }
    }
ログイン後にコピー

呼び出しは非常に簡単で、呼び出しメソッドは次のとおりです:

     Log log = new Log(AppDomain.CurrentDomain.BaseDirectory + @"/log/Log.txt");
        log.log("我会被输入在日志文件中")
ログイン後にコピー

最後に、現在のユーザーの Openid を取得すると、データベースからユーザーのその他の基本情報を再度取得できます。これにより、プロジェクト内の他のビジネス モジュールを完了するのにさらに役立ちます。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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