1. 程式人生 > >微信公眾平臺--接收普通訊息與事件

微信公眾平臺--接收普通訊息與事件

一、接收普通訊息

​當普通微信使用者向公眾賬號發訊息時,微信伺服器將POST訊息的XML資料包到開發者填寫的URL上。

目錄

主要以文字訊息作為參考:

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName> 
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>


以下是參考程式碼,主要是將各類訊息接收後,再推送給當前使用者。這塊將來可以根據自己的需要來調整
     <span style="font-size:14px;"> string xContent = string.Empty;
            //文字訊息
            if (msgtypevalue == "text")
            {
                xContent = "文字訊息--" + Content.InnerText;

            }
            //圖片訊息
            else if (msgtypevalue == "image")
            {
                xContent = "圖片訊息--" + PicUrl.InnerText + " MediaId:" + MediaId.InnerText;

            }
            //語音訊息
            else if (msgtypevalue == "voice")
            {
                xContent = "語音訊息--" + " MediaId:" + MediaId.InnerText;

            }
            //視訊訊息
            else if (msgtypevalue == "video")
            {
                xContent = "視訊訊息--" + " MediaId:" + MediaId.InnerText;

            }
            //小視訊訊息
            else if (msgtypevalue == "shortvideo")
            {
                xContent = "小視訊訊息--" + " MediaId:" + MediaId.InnerText;

            }
            //地理位置訊息
            else if (msgtypevalue == "location")
            {
                xContent = "地理位置訊息--" + " Location_X:" + Location_X.InnerText + " Location_Y:" + Location_Y.InnerText + " Label:" + Label.InnerText;
            }
            //連結訊息
            else if (msgtypevalue == "link")
            {
                xContent = "連結訊息-" + " Title:" + Title.InnerText + " Description:" + Description.InnerText + " Url:" + Url.InnerText;
            }


<span style="font-size:18px;">對於 接收的訊息,以日記形式記載如下:</span>
<span style="font-size:18px;">微信端介面</span>


二、接收事件推送

​       在微信使用者和公眾號產生互動的過程中,使用者的某些操作會使得微信伺服器通過事件推送的形式通知到開發者在開發者中心處設定的伺服器地址,從而開發者可以獲取到該資訊。其中,某些事件推送在發生後,是允許開發者回覆使用者的。

其中包括有:

比如:關注/取消關注事件

使用者在關注與取消關注公眾號時,微信會把這個事件推送到開發者填寫的URL。方便開發者給使用者下發歡迎訊息或者做帳號的解綁。

微信伺服器在五秒內收不到響應會斷掉連線,並且重新發起請求,總共重試三次

關於重試的訊息排重,推薦使用FromUserName + CreateTime 排重。

假如伺服器無法保證在五秒內處理並回復,可以直接回復空串,微信伺服器不會對此作任何處理,並且不會發起重試。

推送XML資料包示例:

<span style="font-size:18px;"><xml>
<span style="font-size:18px;"><ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
</xml></span>


以下是參考程式碼,主要是將各類事件接收後,再以文字訊息推送給當前使用者。這塊將來可以根據自己的需要來調整

               <span style="font-size:18px;">string eventvalue = Event.InnerText;

                //訂閱
                if (eventvalue == "subscribe")
                {
                    xContent = "訂閱 " ;

                }
                //取消訂閱
                else if (eventvalue == "unsubscribe")
                {
                    xContent = "取消訂閱 ";

                }
                //掃描帶引數二維碼事件
                else if (eventvalue == "SCAN")
                {
                    xContent = "掃描帶引數二維碼事件--使用者已關注時的事件推送 " + EventKey.InnerText;

                }
                //上報地理位置事件
                else if (eventvalue == "LOCATION")
                {
                    xContent = "上報地理位置事件 -- 地理位置緯度: " + Latitude.InnerText + "  經度: " + Longitude.InnerText + "  精度: " + Precision.InnerText;

                }
                //自定義選單事件--點選選單拉取訊息時的事件推送 
                else if (eventvalue == "CLICK")
                {
                    xContent = "自定義選單事件--點選選單拉取訊息時的事件推送 : " + EventKey.InnerText;

                }
                //自定義選單事件--點選選單跳轉連結時的事件推送 
                else if (eventvalue == "VIEW")
                {
                    xContent = "自定義選單事件--點選選單跳轉連結時的事件推送 : " + EventKey.InnerText;

                }

對於 接收的事件,以日記形式記載如下:


微信介面測試號中介面: