Neuigkeiten und Veranstaltungen zur Entwicklung öffentlicher .net WeChat-Konten

高洛峰
Freigeben: 2017-03-08 16:12:27
Original
1938 Leute haben es durchsucht

In diesem Artikel wird erläutert, wie Nachrichten und Ereignisse bei der Entwicklung öffentlicher WeChat-Konten behandelt werden, einschließlich: (1) Übersicht über Nachrichten (Ereignisse); (3) Parsen von Nachrichten; Passiv auf Nachrichten antworten; (5) Andere Nachrichten senden.
1 Übersicht über Nachrichten (Ereignisse)

Wenn ein normaler WeChat-Benutzer eine Nachricht an das offizielle Konto sendet oder der WeChat-Server ein Ereignis an das offizielle Konto sendet, sendet der WeChat-Server die XML-Daten Paket der Nachricht (Ereignis) an die vom Entwickler eingegebene offizielle Kontoserver-URL; der offizielle Kontoserver antwortet dann auf die Nachricht.
1.1 Nachrichtenflussprozess
Um die Unterscheidung zu erleichtern, nennen wir die vom WeChat-Server an den offiziellen Kontoserver gesendete Nachricht eine Anforderungsnachricht. Die vom offiziellen Kontoserver an den WeChat-Server gesendete Nachricht wird als Antwort bezeichnet (Antwort-)Nachricht; Push-Ereignisse als spezielle Anforderungsnachrichten behandeln.
Der Ablaufprozess von Anforderungs- und Antwortnachrichten ist in der folgenden Abbildung dargestellt:

Neuigkeiten und Veranstaltungen zur Entwicklung öffentlicher .net WeChat-Konten

1.2 Anforderungsnachricht
Es gibt viele Arten von Anforderungsnachrichten, und wir haben sie Die entsprechende Klassenhierarchie ist wie in der folgenden Abbildung dargestellt:

Neuigkeiten und Veranstaltungen zur Entwicklung öffentlicher .net WeChat-Konten

Auf einige Anforderungsnachrichten können wir antworten, auf andere jedoch nicht Einzelheiten finden Sie in der folgenden Tabelle:

消息类型 是否事件 能够被动回复 备注
文本 ×  
图片 ×  
声音 ×  
视频 × 未知 接收不到视频消息,不知道是否能被动回复
地理位置 ×  
链接 ×  
订阅  
取消订阅 ×  
扫描二维码 ×  
上报地理位置 ×  
点击菜单拉取消息  
点击菜单跳转链接 ×  
点击菜单扫码推 ×  
点击菜单扫码等待回复  
点击菜单系统发图 未知 接收不到系统发图事件;微信服务器会发送图片消息,可回复
点击菜单拍照或相册发图 × 微信服务器会发送图片消息,可回复
点击菜单微信发图 × 微信服务器会发送图片消息,可回复
点击菜单选择地理位置 × 微信服务器会发送地理位置消息,可回复
推送群发消息结果 ×  
推送发送模板消息结果 ×  

1.3 Antwortnachricht
Die Klassenhierarchie der Antwortnachricht ist wie folgt:

Neuigkeiten und Veranstaltungen zur Entwicklung öffentlicher .net WeChat-Konten


2 Überprüfen Sie die Authentizität von die Nachricht
Nachdem der öffentliche Kontoserver die Anfrage vom WeChat-Server erhalten hat, muss zunächst die Authentizität der Nachricht überprüft werden.
Die Utility.CheckSignature-Methode wird verwendet, um zu überprüfen, ob die Nachrichtensignatur korrekt ist.
Beispiele sind wie folgt:

/// <summary>
    /// 验证消息的有效性
    /// </summary>
    /// <param name="context"></param>
    /// <returns>如果消息有效,返回true;否则返回false。</returns>
    private bool Validate(HttpContext context)
    {
        string username = RequestEx.TryGetQueryString("username");  //在接口配置的URL中加入了username参数,表示哪个微信公众号
        AccountInfo account = AccountInfoCollection.GetAccountInfo(username);
        if (account == null)
            return false;
        string token = account.Token;
        string signature = RequestEx.TryGetQueryString("signature");
        string timestamp = RequestEx.TryGetQueryString("timestamp");
        string nonce = RequestEx.TryGetQueryString("nonce");
        if (string.IsNullOrWhiteSpace(signature) || string.IsNullOrWhiteSpace(timestamp) || string.IsNullOrWhiteSpace(nonce))
            return false;
        return xrwang.weixin.PublicAccount.Utility.CheckSignature(signature, token, timestamp, nonce);
    }

验证消息真实性
Nach dem Login kopieren

Echtheit der Nachricht überprüfen

3 Nachricht analysieren

Wenn die Nachricht Signaturdurchläufe Zur Überprüfung müssen wir den Nachrichtentext im XML-Format in ein Anforderungsnachrichtenobjekt analysieren und die Klasse RequestMessageHelper verwenden, um diese Arbeit abzuschließen.

RequestMessageHelper helper = new RequestMessageHelper(context.Request);
if(helper.Message != null)
{
    //消息解析成功,对它进行处理
}
Nach dem Login kopieren

Nachdem die Nachricht erfolgreich analysiert wurde, ist helper.Message die Nachrichtenbasisklasse RequestBaseMessage. Wir können das Ergebnis ermitteln über die Attribute MsgType und Event, um welche Art von Nachricht (Ereignis) es sich handelt, und in den entsprechenden Subtyp konvertiert. Zum Beispiel:

RequestBaseMessage bm=helper.Message;
switch(bm.MsgType)
{
    case RequestMessageTypeEnum.text:  //文本消息
        HandleTextMessage((RequestTextMessage)bm);
        break;
    case RequestMessageTypeEnum.image: //图片消息
        HandleImageMessage((RequestImageMessage)bm);
        break;
    //处理其他消息
    case RequestMessageTypeEnum.event:    //事件
        RequestEventMessage ev=(RequestEventMessage)bm;
        switch(ev.Event)
        {
            case RequestEventTypeEnum.subscribe:    //订阅
                HandleSubscribeMessage((RequestSubscribeMessage)ev);
                break;
            case RequestEventTypeEnum.unsubscribe:    //取消订阅
                HandleUnsubscribeMessage((RequestUnsubscribeMessage)ev);
                break;
            //处理其他事件
        }
        break;
    default:
        break;
}
Nach dem Login kopieren

Einzelheiten zum Parsen der Nachricht finden Sie im Quellcode: http://git.oschina.net/xrwang2/xrwang.weixin .PublicAccount/blob/master /PublicAccount/RequestMessage/RequestMessageHelper.cs

4 Passive Antwortnachricht
Nach Erhalt der Nachricht (Ereignis) vom WeChat-Server können wir direkt (passiv) auf die Nachricht antworten; Sie können auch zuerst direkt mit einer leeren Zeichenfolge antworten und dann innerhalb von 48 Stunden auf die Kundendienstnachricht antworten.
Initialisieren Sie zuerst ResponseXxxMessage und verwenden Sie dann die ToXml-Methode, um den Inhalt der Antwortnachricht abzurufen.
Beispiele für passive Antwortnachrichten sind wie folgt:

/// <summary>
    /// 处理微信的POST请求
    /// </summary>
    /// <param name="context"></param>
    /// <returns>返回xml响应</returns>
    private string HandlePost(HttpContext context)
    {
        RequestMessageHelper helper = new RequestMessageHelper(context.Request);
        if (helper.Message != null)
        {
            ResponseBaseMessage responseMessage = HandleRequestMessage(helper.Message);
            return responseMessage.ToXml(helper.EncryptType);
        }
        else
            return string.Empty;
    }

    /// <summary>
    /// 处理请求消息,返回响应消息
    /// </summary>
    /// <returns>返回响应消息</returns>
    private ResponseBaseMessage HandleRequestMessage(RequestBaseMessage requestMessage)
    {
        ResponseTextMessage response = new ResponseTextMessage(requestMessage.FromUserName, requestMessage.ToUserName, 
            DateTime.Now, string.Format("自动回复,请求内容如下:\r\n{0}", requestMessage));
        return response;
    }
Nach dem Login kopieren


5 Senden Sie andere Nachrichten

Neben der passiven Beantwortung von Nachrichten können wir auch Kundendienstnachrichten, Gruppennachrichten und Vorlagennachrichten senden. Diese Inhalte werden in den folgenden Artikeln einzeln besprochen.


Das obige ist der detaillierte Inhalt vonNeuigkeiten und Veranstaltungen zur Entwicklung öffentlicher .net WeChat-Konten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage