Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung der Interaktion und Schnittstelle der öffentlichen PHP-WeChat-Plattform
Dieser Artikel stellt hauptsächlich die Entwicklung, Interaktion und Schnittstelle der öffentlichen PHP-WeChat-Plattform vor. Er hat einen gewissen Referenzwert.
Dieser Artikel ist in drei Teile unterteilt: Jeder wird es vorstellen , der spezifische Inhalt ist wie folgt
1. Interaktion zwischen WeChat-Benutzern, WeChat-Servern und Backend-Servern
Beispiel: WeChat-Benutzer senden eine Textnachricht an das öffentliche Konto. Diese A-Nachricht wird zunächst an den WeChat-Server gesendet. Der WeChat-Server verarbeitet die Informationen und leitet sie im XML-Datenformat an den Backend-Server weiter Der WeChat-Server antwortet dann im XML-Datenformat auf die Benutzer-WeChat-Schnittstelle.
Der Interaktionsprozess zwischen WeChat-Benutzern und dem WeChat-Backend-Server ist der Datenübertragungsprozess, der jedoch nur über den WeChat-Server als Übertragungsstation erfolgen muss.
Was nützt der WeChat-Server also als Übergabestation?
Verarbeiten und verpacken Sie die XML-Daten und zeigen Sie sie auf dem Bildschirm des Mobiltelefons an. Die von uns akzeptierten Bild- und Textnachrichten sind wie folgt:
Einzelnes Bild und Text:
Mehrere Bilder und Texte
Sie werden feststellen, dass fast alle Bilder und Texte auf WeChat in diesem Format vorliegen, mit dem gleichen Layout und der gleichen Größe. Dies ist das Ergebnis nach dem Erstellen gepackt vom WeChat-Server.
2. Interaktionsdatentypen
Datentypen, die WeChat-Benutzer senden können
1. Texttyp (Text)
<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>";
2. Stimme
<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[voice]]></MsgType> <Format><![CDATA[amr]]></Format> <MsgId>5836982871638042400</MsgId> <MediaId><![CDATA[PGKsO3LAgbVTsFYO7FGu51KUYa07D0C_Nozz2fn1z6VYtHOsF59PTFl0vagGxkVH]]></MediaId> <Recognition><![CDATA[]]></Recognition>//recognition表示语音识别的结果 </xml>
3. Bild (img)
<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[image]]></MsgType> <PicUrl><![CDATA[http://mmbiz.qpic.cn/mmbiz/L4qjYtOibummHn90t1mnaibYiaR8ljyicF3MW7XX3BLp1qZgUb7CtZ0D]]></PicUrl> <MsgId>5836982871638042400</MsgId> <MediaId><![CDATA[PGKsO3LAgbVTsFYO7FGu51KUYa07D0C_Nozz2fn1z6VYtHOsF59PTFl0vagGxkVH]]></MediaId> </xml>
Jede an den WeChat-Server gesendete Nachricht wird mit einer MsgId markiert, und hochgeladene Bilder, Videos, Stimmen usw. werden ebenfalls mit einer mediaId markiert.
4. Video (Video)
<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[vedio]]></MsgType> <MsgId>5836982871638042400</MsgId> <MediaId><![CDATA[PGKsO3LAgbVTsFYO7FGu51KUYa07D0C_Nozz2fn1z6VYtHOsF59PTFl0vagGxkVH]]></MediaId> <ThumbMediaId><![CDATA[mxUJ5gcCeesJwx2T9qsk62YzI clCP_HnRdfTQcojlPeT2G9Q3d22UkSLyBFLZ01J]]></ThumbMediald>;//视频静止时显示那张图片地址 </xml>
5. Standortmeldung (Standort)
<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[location]]></MsgType> <MsgId>5836982871638042400</MsgId> <Location_X>22.539968</Location_X> <Location_Y>113.954980</Location_Y> <Scale>16</Scale> <Label><![CDATA[中国广东省深圳市南山区深南大道9001号 邮政编码: 518053]]></Label> </xml>
6. Link-Nachricht (Link)
<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[link]]></MsgType> <MsgId>5836982871638042400</MsgId> <Title><![CDATA[微信公众平台开发者的江湖]]></Title> <Description><![CDATA[陈坤的微信公众号这段时间大火,大家...]]></Description> <Url><![CDATA[http://www.cnblogs.com/txw1958/]]></Url> <MsgId>5839907284805129867</MsgId> </xml>
Der Hintergrundserver hat auf die Nachricht geantwortet Typ
1. Texttyp (Text)
<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[voice]]></MsgType> <MsgId>5836982871638042400</MsgId> <Voice> <MediaId><![CDATA[PGKsO3LAgbVTsFYO7FGu51KUYa07D0C_Nozz2fn1z6VYtHOsF59PTFl0vagGxkVH]]></MediaId> </Voice> </xml>3 >
<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[image]]></MsgType> <MsgId>5836982871638042400</MsgId> <Image> <MediaId><![CDATA[PGKsO3LAgbVTsFYO7FGu51KUYa07D0C_Nozz2fn1z6VYtHOsF59PTFl0vagGxkVH]]></MediaId> </Image> </xml>
4. Video
<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[vedio]]></MsgType> <MsgId>5836982871638042400</MsgId> <video> <MediaId><![CDATA[PGKsO3LAgbVTsFYO7FGu51KUYa07D0C_Nozz2fn1z6VYtHOsF59PTFl0vagGxkVH]]></MediaId> <ThumbMediaId><![CDATA[mxUJ5gcCeesJwx2T9qsk62YzI clCP_HnRdfTQcojlPeT2G9Q3d22UkSLyBFLZ01J]]></ThumbMediald>;//视频静止时显示那张图片地址 </video> </xml>
5 , Musik (Musik )
<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[voice]]></MsgType> <MsgId>5836982871638042400</MsgId> <Music> <Title><![CDATA[最炫民族风]]></Title> <Description><![CDATA[凤凰传奇]]></Description> <MusicUrl><![CDATA[http://zj189.cn/zj/download/music/zxmzf.mp3]]></MusicUrl> <HQMusicUrl><![CDATA[http://zj189.cn/zj/dodownload/music/zxmzf.mp3]]></HQMusicUrl> </Music> </xml>
6, Bilder und Text (News)
<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <MsgId>5836982871638042400</MsgId> <Content><![CDATA[]]></Content> <ArticleCount>%s</ArticleCount> <Articles> <item> <Title><![CDATA[ 【深圳】实况 温度:6℃ 湿度:62﹪ 风速:东北风2级]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/banner.jpg]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[ 【深圳】实况 温度:6℃ 湿度:62﹪ 风速:东北风2级]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/banner.jpg]]></PicUrl> <Url><![CDATA[]]></Url> </item> </Articles> </xml>
Der obige Code dient nur als Referenz beim Ausfüllen von Daten. Der obige Code kann bei Bedarf aufgerufen werden. Hier zeigen wir Ihnen nur das folgende Datenformat.
CDATA ist ein Tag und die dadurch markierten Textdaten werden vom XML-Parser nicht analysiert. Eine CDATA-Komponente beginnt mit „
ToUserName Receiver Account
CreateTime Send Event
MsgType Data Type
Content Text Content
ArticleCount Number of Images and Texts
MsgId Daten-ID
MediaId Medien-ID
Titel Titel
Beschreibung Beschreibung
MusicUrl Musikverbindungsadresse
HQMusicUrl Hochwertige Musikverbindungsadresse
In Abbildung 2 des vorherigen Kapitels haben wir die URL und das Token für das Testkonto definiert. Die URL ist die Backend-Serveradresse für die Kommunikation mit dem WeChat-Server und a Token ist äquivalent zu einem Token. Wenn der Backend-Server feststellt, dass der WeChat-Server mit dem Token übereinstimmt, wird er kommunizieren. Dieser Vorgang wird als Token-Verifizierung bezeichnet (dieses Token ist kein Token-Wert), ich werde es anhand des folgenden Codes erklären ist
http://weixinceshi111111.applinzi.com/index2.php
Token: weixin
index2.php-Code
responseMsg();//响应数据 }else{ $wechatObj->valid();//响应 } class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()){ echo $echoStr; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr);//对数组中的元素进行排序 $tmpStr = implode($tmpArr);//将数组中的元素连接成一个字符串 $tmpStr = sha1($tmpStr);//对字符串进行加密操作。 if($tmpStr == $signature){ return true; }else{ return false; } } public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//获取发送过来的数据。 if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', );//把xml字符串载入到一个SimpleXMLelement对象中。simplexml_load_string()是一种xml解析器。 $RX_TYPE = trim($postObj->MsgType);//trim去掉字符串两端kongge。 //用户发送的消息类型判断 switch ($RX_TYPE) { case "text": $result = $this->receiveText($postObj); break; case "image": $result = $this->receiveImage($postObj); break; case "voice": $result = $this->receiveVoice($postObj); break; case "video": $result = $this->receiveVideo($postObj); break; default: $result = "unknow msg type: ".$RX_TYPE; break; } echo $result; }else { echo ""; exit; } } private function receiveText($object) { $keyword = trim($object->Content); if($keyword == "文本"){ //回复文本消息 $content = "这是个文本消息"; $result = $this->transmitText($object, $content); } else if($keyword == "图文" || $keyword == "单图文"){ //回复单图文消息 $content = array(); $content[] = array("Title"=>"单图文标题", "Description"=>"单图文内容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); $result = $this->transmitNews($object, $content); } else if($keyword == "多图文"){ //回复多图文消息 $content = array(); $content[] = array("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); $content[] = array("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); $content[] = array("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); $result = $this->transmitNews($object, $content); } else if($keyword == "音乐"){ //回复音乐消息 $content = array("Title"=>"最炫民族风", "Description"=>"歌手:凤凰传奇", "MusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3", "HQMusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3"); $result = $this->transmitMusic($object, $content); } return $result; } private function receiveImage($object) { //回复图片消息 $content = array("MediaId"=>$object->MediaId); $result = $this->transmitImage($object, $content);; return $result; } private function receiveVoice($object) { //回复语音消息 $content = array("MediaId"=>$object->MediaId); $result = $this->transmitVoice($object, $content);; return $result; } private function receiveVideo($object) { //回复视频消息 $content = array("MediaId"=>$object->MediaId, "ThumbMediaId"=>$object->ThumbMediaId, "Title"=>"", "Description"=>""); $result = $this->transmitVideo($object, $content);; return $result; } /* * 回复文本消息,将要回复的xml消息进行包装。 */ private function transmitText($object, $content) { $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);//sprintf()这个函数的作用还是比较有意思的,可以搜索看看。 return $result; } /* * 回复图片消息 */ private function transmitImage($object, $imageArray) { $itemTpl = ""; $item_str = sprintf($itemTpl, $imageArray['MediaId']); $textTpl = " "; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } /* * 回复语音消息 */ private function transmitVoice($object, $voiceArray) { $itemTpl = " %s $item_str "; $item_str = sprintf($itemTpl, $voiceArray['MediaId']); $textTpl = " "; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } /* * 回复视频消息 */ private function transmitVideo($object, $videoArray) { $itemTpl = ""; $item_str = sprintf($itemTpl, $videoArray['MediaId'], $videoArray['ThumbMediaId'], $videoArray['Title'], $videoArray['Description']); $textTpl = " %s $item_str "; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } /* * 回复图文消息 */ private function transmitNews($object, $arr_item) { if(!is_array($arr_item)) return; $itemTpl = " %s $item_str - "; $item_str = ""; foreach ($arr_item as $item) $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']); $newsTpl = "
"; $result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($arr_item)); return $result; } /* * 回复音乐消息 */ private function transmitMusic($object, $musicArray) { $itemTpl = " %s %s $item_str "; $item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']); $textTpl = " "; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } } ?> %s $item_str
3.1 Was ist die Schnittstelle
Die Schnittstelle entspricht einem Werkzeug mit bestimmten Funktionen, zum Beispiel, wenn Sie bohren müssen Wenn Sie beim Bau eines Hauses Löcher in die Wand bohren, müssen Sie eine Reihe von Schritten wie Einstecken, Kalibrieren und Bohren durchführen. Die Bohranlage ist unsere Schnittstelle. und Einstecken, Kalibrieren und Bohren sind die Schritte, die wir verwenden, um den Zweck zu erfüllen1. Rufen Sie die Verbindungsadresse der WeChat-Menüoberfläche ab und stellen Sie über die Curl-Funktion einen Dialog her.
Die Menüschnittstelle Der Schnittstellenaufruf ist abgeschlossen. Diese Schnittstelle verarbeitet die Daten automatisch und generiert das Menü auf der öffentlichen WeChat-Seite.
Informationen zum Aufrufen der WeChat-Schnittstelle finden Sie im nächsten Kapitel: Entwicklung der öffentlichen WeChat-Plattform (3): Aufrufen der erweiterten WeChat-Schnittstelle.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.
Verwandte Empfehlungen:
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Interaktion und Schnittstelle der öffentlichen PHP-WeChat-Plattform. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!