當一般微信用戶向公眾帳號發送訊息時,微信伺服器將POST訊息的XML封包到開發者填寫的URL上。
請注意:
1、关于重试的消息排重,推荐使用msgid排重。 2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“发送消息-被动回复消息”。 3、为了保证更高的安全保障,开发者可以在公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息会被加密,公众号被动回复用户的消息也需要加密(但开发者通过客服接口等API调用形式向用户发送消息,则不受影响)。关于消息加解密的详细说明,请见“消息加解密说明”。
各訊息類型的推送XML封包結構如下:
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1348831860</createtime> <msgtype></msgtype> <content></content> <msgid>1234567890123456</msgid> </xml>
#參數 | 描述 |
---|---|
##ToUserName | 開發者|
#FromUserName | |
CreateTime | |
#MsgType | ##text|
Content | 文字訊息內容 |
MsgId | 訊息id,64位元整數 |
#參數 | 描述 |
---|---|
ToUserName | 開發者 | 微訊號
FromUserName | #發送方帳號(一個OpenID) |
#CreateTime | 訊息建立時間(整數) |
#MsgType | image |
PicUrl | 圖片連結 |
MediaId | 圖片訊息媒體id,可以呼叫多媒體檔案下載介面來拉取資料。 |
MsgId | 訊息id,64位元整數 |
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1357290913</createtime> <msgtype></msgtype> <mediaid></mediaid> <format></format> <msgid>1234567890123456</msgid> </xml>
參數 | #描述 |
---|---|
#ToUserName | 開發者微訊號 |
FromUserName | 發送方帳號(一個OpenID) |
CreateTime | #訊息建立時間(整數) |
MsgType | 語音為voice |
MediaId | 語音訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。 |
Format | 語音格式,如amr,speex等 |
MsgID | 訊息id,64位元整數 |
請注意,開通語音辨識後,用戶每次發送語音給公眾號時,微信會在推送的語音訊息XML資料包中,增加一個Recongnition欄位(註:由於客戶端緩存,開發者開啟或關閉語音辨識功能,對新追蹤者立刻生效,對已關注用戶需要24小時生效。開發者可以重新關注此帳號進行測試)。開啟 語音辨識後的語音XML封包如下:
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1357290913</createtime> <msgtype></msgtype> <mediaid></mediaid> <format></format> <recognition></recognition> <msgid>1234567890123456</msgid> </xml>
多出的欄位中,Format為語音格式,一般為amr,Recognition為語音辨識結果,使用UTF8編碼。
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1357290913</createtime> <msgtype></msgtype> <mediaid></mediaid> <thumbmediaid></thumbmediaid> <msgid>1234567890123456</msgid> </xml>
#參數 | 描述 |
---|---|
ToUserName | 開發者微訊號 |
FromUserName | #發送方帳號(一個OpenID) |
#CreateTime | 訊息建立時間(整數) |
#MsgType | 影片為video |
MediaId | 視訊訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。 |
ThumbMediaId | 視訊訊息縮圖的媒體id,可以呼叫多媒體檔案下載介面拉取資料。 |
MsgId | 訊息id,64位元整數 |
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1357290913</createtime> <msgtype></msgtype> <mediaid></mediaid> <thumbmediaid></thumbmediaid> <msgid>1234567890123456</msgid> </xml>
參數 | 描述 |
---|---|
ToUserName | 開發者微訊號 |
FromUserName | 發送方帳號(一個OpenID) |
CreateTime | #訊息創建時間(整數) |
MsgType | 小影片為shortvideo |
MediaId | ##影片訊息媒體id,可以呼叫多媒體檔案下載介面拉取資料。|
視訊訊息縮圖的媒體id,可以呼叫多媒體檔案下載介面拉取資料。 | |
訊息id,64位元整數 |
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | location |
Location_X | 地理位置维度 |
Location_Y | 地理位置经度 |
Scale | 地图缩放大小 |
Label | 地理位置信息 |
MsgId | 消息id,64位整型 |
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1351776360</createtime> <msgtype></msgtype> <title></title> <description></description> <url></url> <msgid>1234567890123456</msgid> </xml>
参数 | 描述 |
---|---|
ToUserName | 接收方微信号 |
FromUserName | 发送方微信号,若为普通用户,则是一个OpenID |
CreateTime | 消息创建时间 |
MsgType | 消息类型,link |
Title | 消息标题 |
Description | 消息描述 |
Url | 消息链接 |
MsgId | 消息id,64位整型 |
接續上篇,看ResponseXML(postString);方法如下
///
/// 取得使用者傳送的訊息
///
/// ## post {
//使用XMLDocument載入資訊結構 # xmlDoc.LoadXml(postString);
XmlElement rootElement = xmlDoc.DocumentElement;////取得文件的根
XmlNode MsgType = rootElement.SelectSingleNode("MsgType"); //取得訊息的文字類型
RequestXML requestXML = new RequestXML( ingleNode ("ToUserName").InnerText;//公號
requestXML.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;//使用者
Time").InnerText ;//建立時間
requestXML.MsgType = MsgType.InnerText;//訊息類型
///對訊息的不同類型進行賦值
//賦值文字訊息內容
與已回復XML.Contentent = rootElement.SelectSingleNode("Content").InnerText;
}
///賦值以地理位置緯度,經度,地圖縮放比例,地理位置說明
requestXML.Location_X = rootElement.SelectSingleNode("Location_X").InnerText ("Location_Y").InnerText;
requestXML.Scale = rootElement.SelectSingleNode("Scale").InnerText;
requestXML.Label = rootElement.SelectSingleNode("Lab if (requestXML.MsgType.Trim().ToLower() = = "event")
{
////都會使用問題與事件 ("Event").InnerText;
requestXML.EventKey = rootElement.SelectSingleNode ("EventKey").InnerText;
}
if (requestXML.MsgType.Trim, ///賦值以語音識別} requestXML.Recognition = rootElement.Select ResponseMsg( requestXML);
}
語音辨識功能開啟如下:
##requestXML是我單獨建立的一個類,該類聲明了訊息中常用的屬性字段,如下:
///
/// 接收訊息的實體類別
///
public class RequestXML° .Empty;
///
/// 本公編號
// /
/// 使用者微訊號
///
## /// 建立時間
///
public String CreateTime{get;set;}
/ //
public String MsgType{get;set;}
///
/*以下為事件類型的訊息特有的屬性*/
///
public String EventName{get;set;}
///
public string EventKey { get; ///
public int ArticleCount { get; set; }
/// < summary>
public string Title { get; set; }
///
public string Description { get; set; }
///
/// 圖片訊息圖片的連結位址
get ; set; }
///
/// 圖文訊息詳情連結位址
## ///
/// 圖文訊息集合
///
///
/// 地理位置緯度
; set; }
///
/// 地理位置經度
///
public String Location_Y {get; set; }
# ///
public String Scale { get; set; }
///
public String Label { get; set; }
///
public String Recognition { get; set; }
}
#繼續專注於 ResponseMsg(requestXML);方法如下,
##繼續關注 ResponseMsg(requestXML);方法如下,
#ML# private voidoid Responsequest(RequestXMLMLsML )
{
//根據訊息類型訊息使用何種類型訊息
# case "text": if (!string.IsNullOrWhiteSpace(requestXML.EventName ) && requestXML.EventName.ToString().Trim().Equals("subscribe"))
} SendWelComeMsg(requestXML);//關注時回傳的圖文訊息
else if (!string.IsNullOrWhiteSpace(requestXML.EventName) && requestXML.EventName.ToString().Trim().Equals("CLICK"))
SendEventMsg(requestXML);//傳送事件訊息
}
case "voice":
break;
SendMapMsg(requestXML);
break;
default:
}
}
catch (Exception ex HttpContext.Current.Response.Write(ex.ToString());
}
}
先追蹤發送簡訊,SendTextCase(requestXML);///寄件文字
///
/// HttpContext.Current.Response.ContentType = "text/xml";
地End();
}
FormatTextXML方法制定格式
///
/// 回傳已格式化的Xml格式內容
///
/// 用戶號碼
/param>
///
private string Format return "
#>
這樣就能實現訊息的回應,如果使用者點擊的按鈕,以下程式碼:
SendWelComeMsg(requestXML);//追蹤時回傳的圖文訊息
else if (!string.IsNullOrWhiteSpace(requestXML.EventName) && requestXML.EventName.ToString().Trim().Equals("CLICK")) SendEventMsg(requestXML);//寄送事件訊息
break;
///
/// 傳送回應事件訊息
///
private void SendEventMsg(RequestXML requestXML)
{
switch (keyStr)
{
## case "tianqiyubao":
break;
case "kaixinyixiao" :
SendKaiXinMessage(requestXML);//送開心一笑結果集 case "updateMessage":
break;
case "yuangonghuodong":
SendYuanGongHuoDong(requestXML);//發送學生活動
break;
case "yuangongtongzhi":
SendYuanGongTongZhi(requestXML);//發送員工通知
break;
case "youwenbida":
break;
case "mywen":
選項順2ase "mywen":##.
break;
SendKeFuMessage(requestXML);//接取客服
String responseContent = String.Empty;
responseContent = FormatTextXML(requestXML.FromUserName, requestXML.ToUserName,"此功能暫未開放!敬請期待!");
HttpContext.Current. Response.ContentEncoding = Encoding.UTF8;
} HttpContext.Current.Response.End();
break;
#SendWelComeMsg(requestXML);//關注時回傳的圖文訊息
///
///
String responseContent = String.Empty; string newdate = DateTime.Now.Subtract(new DateTime(1970, 1, 1, 8, 0, 0)).Total 或者iaohr. com.cn/weixin/welcome.jpg";
string.Format(Message_News_Item, "歡迎追蹤德橋員工服務中心", "蘇州德橋人力資源創立於2002年...", PUrlfileName, "http://www.deqiaohr.com.cn/weixin/WxGsjianjie.aspx"));
.Response.ContentType = "text/xml";
HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;# # HttpContext.Current.Response.End ();
}
Message_News_Main 與Message_News_Item是圖文訊息格式化
/// /// 11網頁,關於網頁圖片自適應的問題,把圖片的寬度設定為100%,即可,如果讓網頁在螢幕中自適應,記得在網頁中一定要加上
/// 返回圖片訊息主體
///
get
{
return @"
{4 }
文章>
}
///
///回圖片訊息項目
///
public static string Message_News_Item
{
return @"
![CDATA[{0}]]>標題>
網址>
}![CDATA[{3}]]>
##
/// 傳送回應性語音辨識結果
///
private void SendVoiceMsg(RequestXML requestXML)
{
Name, "您剛才說的語音訊息辨識結果為:" + requestXML.Recognition. ToString());
HttpContext.Current.Response.ContentType = "text/xml";
HttpContext.Current.Response.Write(responseContent) ;
HttpContext.Current.Response.End();
}
以上是詳解asp.net微信開發訊息應答方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!