√ | × |
|
|
1.3 応答メッセージ
応答メッセージのクラス階層は以下のとおりです:
2 メッセージの信頼性を検証します
公式アカウントサーバーがWeChatサーバーからリクエストを受信した後、最初に行うことはメッセージの信頼性を検証します。
Utility.CheckSignature メソッドは、メッセージの署名が正しいかどうかを確認するために使用されます。
例は次のとおりです:
/// <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);
}
验证消息真实性
メッセージの信頼性を検証します
3 メッセージを解析します
メッセージの署名が検証に合格した場合、XML 形式のメッセージ テキストを解析してリクエスト メッセージ オブジェクトにする必要がありますこの作業を完了するには、RequestMessageHelper クラスが使用されます。
RequestMessageHelper helper = new RequestMessageHelper(context.Request);
if(helper.Message != null)
{
//消息解析成功,对它进行处理
}
メッセージが正常に解析された後、helper.Message はメッセージ基本クラスの RequestBaseMessage であり、MsgType 属性と Event 属性に基づいてメッセージ (イベント) の種類を判断し、それを に変換できます。適切なサブタイプ。例:
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;
}
メッセージの解析の詳細については、ソース コードを参照してください: http://git.oschina.net/xrwang2/xrwang.weixin.PublicAccount/blob/master/PublicAccount/RequestMessage/RequestMessageHelper .cs
4 メッセージへの受動的返信
WeChat サーバーからメッセージ (イベント) を受信した後、5 秒以内にメッセージに直接 (受動的に) 返信できます。最初に空の文字列に直接返信することもできます。その後、48 時間以内にカスタマー サービスのメッセージに返信してください。
まず ResponseXxxMessage を初期化し、次に ToXml メソッドを使用して応答メッセージの内容を取得します。
受動的な応答メッセージの例は次のとおりです:
/// <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;
}
5 他のメッセージを送信します
受動的な応答メッセージに加えて、カスタマー サービス メッセージ、グループ メッセージを送信したり、テンプレート メッセージを送信したりすることもできます。後で説明します。記事内で 1 つずつ来てください。