国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ WeChat アプレット WeChatの開(kāi)発 .NET WeChat 開(kāi)発パブリック アカウント メッセージ処理のコード例

.NET WeChat 開(kāi)発パブリック アカウント メッセージ処理のコード例

Apr 25, 2017 am 11:25 AM
.net 開(kāi)発する WeChatの公開(kāi)アカウント

1. はじめに

WeChat パブリック プラットフォームのメッセージ処理は、最も基本的なテキスト メッセージ、畫(huà)像メッセージ、音聲メッセージ、ビデオ メッセージ、音楽メッセージがあります。送信された XML データが異なるだけです。メッセージを処理する前に、提供された公式ドキュメント mp.weixin.qq.com/wiki/14/89b871b5466b19b3efa4ada8e577d45e.html を注意深く読む必要があります。まず、最も基本的なテキスト メッセージの処理から始めます。


<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>

これは、送信者、受信者、作成時(shí)間、タイプ、コンテンツなどを含む、メッセージ処理の最も基本的なパターンであることがわかります。

まず、メッセージ処理クラスを作成します。このクラスは、すべてのメッセージ要求をキャプチャし、さまざまなメッセージ要求タイプに応じてさまざまなメッセージ応答を処理するために使用されます。


public class WeiXinService
  {
    /// <summary>
    /// TOKEN
    /// </summary>
    private const string TOKEN = "finder";
    /// <summary>
    /// 簽名
    /// </summary>
    private const string SIGNATURE = "signature";
    /// <summary>
    /// 時(shí)間戳
    /// </summary>
    private const string TIMESTAMP = "timestamp";
    /// <summary>
    /// 隨機(jī)數(shù)
    /// </summary>
    private const string NONCE = "nonce";
    /// <summary>
    /// 隨機(jī)字符串
    /// </summary>
    private const string ECHOSTR = "echostr";
    /// <summary>
    /// 
    /// </summary>
    private HttpRequest Request { get; set; }
    /// <summary>
    /// 構(gòu)造函數(shù)
    /// </summary>
    /// <param name="request"></param>
    public WeiXinService(HttpRequest request)
    {
      this.Request = request;
    }
    /// <summary>
    /// 處理請(qǐng)求,產(chǎn)生響應(yīng)
    /// </summary>
    /// <returns></returns>
    public string Response()
    {
      string method = Request.HttpMethod.ToUpper();
      //驗(yàn)證簽名
      if (method == "GET")
      {
        if (CheckSignature())
        {
          return Request.QueryString[ECHOSTR];
        }
        else
        {
          return "error";
        }
      }
      //處理消息
      if (method == "POST")
      {
        return ResponseMsg();
      }
      else
      {
        return "無(wú)法處理";
      }
    }
    /// <summary>
    /// 處理請(qǐng)求
    /// </summary>
    /// <returns></returns>
    private string ResponseMsg()
    {
      string requestXml = CommonWeiXin.ReadRequest(this.Request);
      IHandler handler = HandlerFactory.CreateHandler(requestXml);
   
      if (handler != null)
      {
        return handler.HandleRequest();
      }

      return string.Empty;
    }
    /// <summary>
    /// 檢查簽名
    /// </summary>
    /// <param name="request"></param>
    /// <returns></returns>
    private bool CheckSignature()
    {
      string signature = Request.QueryString[SIGNATURE];
      string timestamp = Request.QueryString[TIMESTAMP];
      string nonce = Request.QueryString[NONCE];

      List<string> list = new List<string>();
      list.Add(TOKEN);
      list.Add(timestamp);
      list.Add(nonce);
      //排序
      list.Sort();
      //拼串
      string input = string.Empty;
      foreach (var item in list)
      {
        input += item;
      }
      //加密
      string new_signature = SecurityUtility.SHA1Encrypt(input);
      //驗(yàn)證
      if (new_signature == signature)
      {
        return true;
      }
      else
      {
        return false;
      }
    }
  }

そもそもメッセージをどのように捉えるか見(jiàn)てみましょう。ホームページの Default.ashx のコードは次のとおりです

    public void ProcessRequest(HttpContext context)
    {
      context.Response.ContentType = "text/html";
      

      string postString = string.Empty;
      if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
      {
        //由微信服務(wù)接收請(qǐng)求,具體處理請(qǐng)求
        WeiXinService wxService = new WeiXinService(context.Request);
        string responseMsg = wxService.Response();
        context.Response.Clear();
        context.Response.Charset = "UTF-8";
        context.Response.Write(responseMsg);
        context.Response.End();
      }
      else
      {
        string token = "wei2414201";
        if (string.IsNullOrEmpty(token))
        {
          return;
        }

        string echoString = HttpContext.Current.Request.QueryString["echoStr"];
        string signature = HttpContext.Current.Request.QueryString["signature"];
        string timestamp = HttpContext.Current.Request.QueryString["timestamp"];
        string nonce = HttpContext.Current.Request.QueryString["nonce"];

        if (!string.IsNullOrEmpty(echoString))
        {
          HttpContext.Current.Response.Write(echoString);
          HttpContext.Current.Response.End();
        }
      }


    }

上記のコードから、WeiXinService.cs クラスのメッセージが非常に重要であることがわかります。

    /// <summary>
    /// 處理請(qǐng)求
    /// </summary>
    /// <returns></returns>
    private string ResponseMsg()
    {
      string requestXml = CommonWeiXin.ReadRequest(this.Request);
      IHandler handler = HandlerFactory.CreateHandler(requestXml);
   
      if (handler != null)
      {
        return handler.HandleRequest();
      }

      return string.Empty;
    }

IHandler はメッセージ処理インターフェイスであり、その下に EventHandler があり、TextHandler 処理クラスはこのインターフェイスを?qū)g裝します。コードは次のとおりです。

  /// <summary>
  /// 處理接口
  /// </summary>
  public interface IHandler
  {
    /// <summary>
    /// 處理請(qǐng)求
    /// </summary>
    /// <returns></returns>
    string HandleRequest();
  }

EventHandler

class EventHandler : IHandler
  {
    /// <summary>
    /// 請(qǐng)求的xml
    /// </summary>
    private string RequestXml { get; set; }
    /// <summary>
    /// 構(gòu)造函數(shù)
    /// </summary>
    /// <param name="requestXml"></param>
    public EventHandler(string requestXml)
    {
      this.RequestXml = requestXml;
    }
    /// <summary>
    /// 處理請(qǐng)求
    /// </summary>
    /// <returns></returns>
    public string HandleRequest()
    {
      string response = string.Empty;
      EventMessage em = EventMessage.LoadFromXml(RequestXml);
      if (em.Event.Equals("subscribe", StringComparison.OrdinalIgnoreCase))//用來(lái)判斷是不是首次關(guān)注
      {


        PicTextMessage tm = new PicTextMessage();//我自己創(chuàng)建的一個(gè)圖文消息處理類
        tm.ToUserName = em.FromUserName;
        tm.FromUserName = em.ToUserName;
        tm.CreateTime = CommonWeiXin.GetNowTime();
        response = tm.GenerateContent();

      }

      return response;
    }
  }

TextHandler

  /// <summary>
  /// 文本信息處理類
  /// </summary>
  public class TextHandler : IHandler
  {
    string openid { get; set; }
    string access_token { get; set; }

    /// <summary>
    /// 請(qǐng)求的XML
    /// </summary>
    private string RequestXml { get; set; }
    /// <summary>
    /// 構(gòu)造函數(shù)
    /// </summary>
    /// <param name="requestXml">請(qǐng)求的xml</param>
    public TextHandler(string requestXml)
    {
      this.RequestXml = requestXml;
    }
    /// <summary>
    /// 處理請(qǐng)求
    /// </summary>
    /// <returns></returns>
    public string HandleRequest()
    {
      string response = string.Empty;
      TextMessage tm = TextMessage.LoadFromXml(RequestXml);
      string content = tm.Content.Trim();
      if (string.IsNullOrEmpty(content))
      {
        response = "您什么都沒(méi)輸入,沒(méi)法幫您啊。";
      }
      else
      {
          string username = System.Configuration.ConfigurationManager.AppSettings["weixinid"].ToString();
          AccessToken token = AccessToken.Get(username);
          access_token = token.access_token;
          openid = tm.FromUserName;
          response = HandleOther(content);
        
      }
      tm.Content = response;
      //進(jìn)行發(fā)送者、接收者轉(zhuǎn)換
      string temp = tm.ToUserName;
      tm.ToUserName = tm.FromUserName;
      tm.FromUserName = temp;
      response = tm.GenerateContent();
      return response;
    }
    /// <summary>
    /// 處理其他消息
    /// </summary>
    /// <param name="tm"></param>
    /// <returns></returns>
    private string HandleOther(string requestContent)
    {
      string response = string.Empty;
      if (requestContent.Contains("你好") || requestContent.Contains("您好"))
      {
        response = "您也好~";
      }else if (requestContent.Contains("openid") || requestContent.Contains("id") || requestContent.Contains("ID"))//用來(lái)匹配用戶輸入的關(guān)鍵字
      {
        response = "你的Openid: "+openid;
      }
      else if (requestContent.Contains("token") || requestContent.Contains("access_token"))
      {
        response = "你的access_token: " + access_token;
      }else 
      {
        response = "試試其他關(guān)鍵字吧。";
      }
      return response;
    }
  }

HandlerFactory

  /// <summary>
  /// 處理器工廠類
  /// </summary>
  public class HandlerFactory
  {
    /// <summary>
    /// 創(chuàng)建處理器
    /// </summary>
    /// <param name="requestXml">請(qǐng)求的xml</param>
    /// <returns>IHandler對(duì)象</returns>
    public static IHandler CreateHandler(string requestXml)
    {
      IHandler handler = null;
      if (!string.IsNullOrEmpty(requestXml))
      {
        //解析數(shù)據(jù)
        XmlDocument doc = new System.Xml.XmlDocument();
        doc.LoadXml(requestXml);
        XmlNode node = doc.SelectSingleNode("/xml/MsgType");
        if (node != null)
        {
          XmlCDataSection section = node.FirstChild as XmlCDataSection;
          if (section != null)
          {
            string msgType = section.Value;

            switch (msgType)
            {
              case "text":
                handler = new TextHandler(requestXml);
                break;
              case "event":
                handler = new EventHandler(requestXml);
                break;
            }
          }
        }
      }

      return handler;
    }
  }

WeChat公式アカウントをフォローして、グラフィックメッセージを送信し、いくつかのキーワードを入力して完了しましょう。 ID を入力してユーザーの openid を返すなど、いくつかのメッセージを返します。

2.PicTextMessage

public class PicTextMessage : Message
  {
    /// <summary>
    /// 模板靜態(tài)字段
    /// </summary>
    private static string m_Template;

    /// <summary>
    /// 默認(rèn)構(gòu)造函數(shù)
    /// </summary>
    public PicTextMessage()
    {
      this.MsgType = "news";
    }
    /// <summary>
    /// 從xml數(shù)據(jù)加載文本消息
    /// </summary>
    /// <param name="xml"></param>
    public static PicTextMessage LoadFromXml(string xml)
    {
      PicTextMessage tm = null;
      if (!string.IsNullOrEmpty(xml))
      {
        XElement element = XElement.Parse(xml);
        if (element != null)
        {
          tm = new PicTextMessage();
          tm.FromUserName = element.Element(CommonWeiXin.FROM_USERNAME).Value;
          tm.ToUserName = element.Element(CommonWeiXin.TO_USERNAME).Value;
          tm.CreateTime = element.Element(CommonWeiXin.CREATE_TIME).Value;
        }
      }

      return tm;
    }
    /// <summary>
    /// 模板
    /// </summary>
    public override string Template
    {
      get
      {
        if (string.IsNullOrEmpty(m_Template))
        {
          LoadTemplate();
        }

        return m_Template;
      }
    }
    /// <summary>
    /// 生成內(nèi)容
    /// </summary>
    /// <returns></returns>
    public override string GenerateContent()
    {
      this.CreateTime = CommonWeiXin.GetNowTime();
      string str= string.Format(this.Template, this.ToUserName, this.FromUserName, this.CreateTime);
      return str;
    }


    /// <summary>
    /// 加載模板
    /// </summary>
    private static void LoadTemplate()
    {
      m_Template= @"<xml>
              <ToUserName><![CDATA[{0}]]></ToUserName>
              <FromUserName><![CDATA[{1}]]></FromUserName>
              <CreateTime>{2}</CreateTime>
              <MsgType><![CDATA[news]]></MsgType>
              <ArticleCount>1</ArticleCount>
              <Articles>
                <item>
                <Title><![CDATA[有位停車歡迎你!]]></Title> 
                <Description><![CDATA[如有問(wèn)題請(qǐng)致電400-6238-136或直接在微信留言,我們將第一時(shí)間為您服務(wù)!]]></Description>
                <PicUrl><![CDATA[http://www.baidu.com/youwei.jpg]]></PicUrl>
                <Url><![CDATA[http://www.baidu.com]]></Url>
                </item>
              </Articles>
            </xml> ";
    }
  }

最終的な効果は次のとおりです。

以上が.NET WeChat 開(kāi)発パブリック アカウント メッセージ処理のコード例の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

おすすめのAI支援プログラミングツール4選 おすすめのAI支援プログラミングツール4選 Apr 22, 2024 pm 05:34 PM

この AI 支援プログラミング ツールは、急速な AI 開(kāi)発のこの段階において、多數(shù)の有用な AI 支援プログラミング ツールを発掘しました。 AI 支援プログラミング ツールは、開(kāi)発効率を向上させ、コードの品質(zhì)を向上させ、バグ率を減らすことができます。これらは、現(xiàn)代のソフトウェア開(kāi)発プロセスにおける重要なアシスタントです。今日は Dayao が 4 つの AI 支援プログラミング ツールを紹介します (すべて C# 言語(yǔ)をサポートしています)。皆さんのお役に立てれば幸いです。 https://github.com/YSGStudyHards/DotNetGuide1.GitHubCopilotGitHubCopilot は、より少ない労力でより迅速にコードを作成できるようにする AI コーディング アシスタントであり、問(wèn)??題解決とコラボレーションにより集中できるようになります。ギット

どのAIプログラマーが一番優(yōu)れているでしょうか? Devin、Tongyi Lingma、SWE エージェントの可能性を探る どのAIプログラマーが一番優(yōu)れているでしょうか? Devin、Tongyi Lingma、SWE エージェントの可能性を探る Apr 07, 2024 am 09:10 AM

世界初の AI プログラマー Devin の誕生から 1 か月も経たない 2022 年 3 月 3 日、プリンストン大學(xué)の NLP チームはオープンソース AI プログラマー SWE-agent を開(kāi)発しました。 GPT-4 モデルを利用して、GitHub リポジトリの問(wèn)題を自動(dòng)的に解決します。 SWE ベンチ テスト セットにおける SWE エージェントのパフォーマンスは Devin と同様で、平均 93 秒かかり、問(wèn)題の 12.29% を解決しました。専用端末と対話することで、SWE エージェントはファイルの內(nèi)容を開(kāi)いて検索したり、自動(dòng)構(gòu)文チェックを使用したり、特定の行を編集したり、テストを作成して実行したりできます。 (注: 上記の內(nèi)容は元の內(nèi)容を若干調(diào)整したものですが、原文の重要な情報(bào)は保持されており、指定された文字?jǐn)?shù)制限を超えていません。) SWE-A

Go 言語(yǔ)を使用してモバイル アプリケーションを開(kāi)発する方法を?qū)Wぶ Go 言語(yǔ)を使用してモバイル アプリケーションを開(kāi)発する方法を?qū)Wぶ Mar 28, 2024 pm 10:00 PM

Go 言語(yǔ)開(kāi)発モバイル アプリケーション チュートリアル モバイル アプリケーション市場(chǎng)が活況を続ける中、ますます多くの開(kāi)発者が Go 言語(yǔ)を使用してモバイル アプリケーションを開(kāi)発する方法を検討し始めています。シンプルで効率的なプログラミング言語(yǔ)として、Go 言語(yǔ)はモバイル アプリケーション開(kāi)発でも大きな可能性を示しています。この記事では、Go 言語(yǔ)を使用してモバイル アプリケーションを開(kāi)発する方法を詳しく紹介し、読者がすぐに始めて獨(dú)自のモバイル アプリケーションの開(kāi)発を開(kāi)始できるように、具體的なコード例を添付します。 1. 準(zhǔn)備 始める前に、開(kāi)発環(huán)境とツールを準(zhǔn)備する必要があります。頭

Go 言語(yǔ)のフロントエンド テクノロジーの探求: フロントエンド開(kāi)発の新しいビジョン Go 言語(yǔ)のフロントエンド テクノロジーの探求: フロントエンド開(kāi)発の新しいビジョン Mar 28, 2024 pm 01:06 PM

Go 言語(yǔ)は、高速で効率的なプログラミング言語(yǔ)として、バックエンド開(kāi)発の分野で広く普及しています。ただし、Go 言語(yǔ)をフロントエンド開(kāi)発と結(jié)びつける人はほとんどいません。実際、フロントエンド開(kāi)発に Go 言語(yǔ)を使用すると、効率が向上するだけでなく、開(kāi)発者に新たな視野をもたらすことができます。この記事では、フロントエンド開(kāi)発に Go 言語(yǔ)を使用する可能性を探り、読者がこの分野をよりよく理解できるように具體的なコード例を示します。従來(lái)のフロントエンド開(kāi)発では、ユーザー インターフェイスの構(gòu)築に JavaScript、HTML、CSS がよく使用されます。

いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する May 06, 2024 pm 04:43 PM

現(xiàn)在、人工知能(AI)技術(shù)の開(kāi)発は本格化しており、さまざまな分野で大きな可能性と影響力を発揮しています。本日、Dayao は、參考にしていただけるよう、4 つの .NET オープン ソース AI モデル LLM 関連プロジェクト フレームワークを共有します。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel は、OpenAI、Azure などの大規(guī)模言語(yǔ)モデル (LLM) を統(tǒng)合するように設(shè)計(jì)されたオープン ソース ソフトウェア開(kāi)発キット (SDK) です。

Android 開(kāi)発に最適な Linux ディストリビューションはどれですか? Android 開(kāi)発に最適な Linux ディストリビューションはどれですか? Mar 14, 2024 pm 12:30 PM

Android 開(kāi)発は多忙で刺激的な仕事であり、開(kāi)発に適した Linux ディストリビューションを選択することが特に重要です。數(shù)多くある Linux ディストリビューションの中で、Android 開(kāi)発に最適なのはどれでしょうか?この記事では、この問(wèn)題をいくつかの側(cè)面から検討し、具體的なコード例を示します。まず、現(xiàn)在人気のある Linux ディストリビューション (Ubuntu、Fedora、Debian、CentOS など) をいくつか見(jiàn)てみましょう。これらにはそれぞれ獨(dú)自の利點(diǎn)と特徴があります。

VSCode 開(kāi)発にはどのフレームワークが最適ですか? VSCode 開(kāi)発にはどのフレームワークが最適ですか? Mar 25, 2024 pm 02:03 PM

VSCode は、開(kāi)発者に広く愛(ài)用されている、強(qiáng)力かつ柔軟で拡張が簡(jiǎn)単なオープン ソース コード エディターです。さまざまなプロジェクトのニーズを満たすために、多くのプログラミング言語(yǔ)とフレームワークをサポートしています。ただし、VSCode の利點(diǎn)はフレームワークによって異なる場(chǎng)合があります。この記事では、さまざまなフレームワークの開(kāi)発における VSCode の適用性について説明し、具體的なコード例を示します。 1.ReactReact は、ユーザー インターフェイスの構(gòu)築に使用される人気のある JavaScript ライブラリです。 Reactを使ってプロジェクトを開(kāi)発する場(chǎng)合、

.NET COREクイックスタートチュートリアル1。始まり:.NETコアについて話す .NET COREクイックスタートチュートリアル1。始まり:.NETコアについて話す May 07, 2025 pm 04:54 PM

1. .NETCOREの起源.NetCoreについて話すとき、その前身.NETについて言及してはなりません。ジャワは當(dāng)時(shí)腳光を浴びていて、マイクロソフトもジャワを支持しました。 Windowsプラットフォーム上のJava仮想マシンは、JVM標(biāo)準(zhǔn)に基づいてMicrosoftによって開(kāi)発されました。當(dāng)時(shí)の最高のパフォーマンスJava仮想マシンと言われています。ただし、Microsoftには獨(dú)自の小さなAbacusがあり、WindowsプラットフォームでJavaをバンドルし、Windows固有の機(jī)能を追加しようとしています。 Sunのこれに対する不満は、2つの政黨間の関係の內(nèi)訳につながり、Microsoftは.NETを立ち上げました。 .NETは、Javaの設(shè)立以來(lái)、Javaの多くの機(jī)能を借りており、言語(yǔ)機(jī)能とフォーム開(kāi)発のJavaを徐々に上回っています。バージョン1.6のJava

See all articles