Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

高洛峰
Freigeben: 2017-03-06 09:38:30
Original
1448 Leute haben es durchsucht

1. Einführung

Die öffentliche WeChat-Plattform bietet drei Nachrichtenantwortformate, nämlich Textantwort, Musikantwort und Bildantwort Antwort: In diesem Artikel werden wir kurz die Formate dieser drei Nachrichtenantworten erläutern und sie dann in Funktionen kapseln, die der Leser verwenden kann.

2. Ideenanalyse

Für jede POST-Anfrage gibt der Entwickler eine bestimmte XML-Struktur im Antwortpaket zurück , auf die Nachricht antworten (unterstützt jetzt Antworttext, Grafiken, Sprache, Video, Musik).

3. Textantwort

3.1 Textantwort-XML-Struktur

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>12345678</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[content]]></Content>
 </xml>
Nach dem Login kopieren

3.2 Struktur Beschreibung

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

3.3 Spezifische Implementierung

Für die oben angegebene XML-Struktur müssen wir nur den Inhalt an der entsprechenden Position ausfüllen und dann formatieren Es wird einfach ausgegeben.

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

Erklärung:

ToUserName wird mit $fromUsername = $postObj->FromUserName ausgefüllt, was die Nachricht zurückgeben soll an Der Benutzer, der die Nachricht gesendet hat, ist das Konto des Empfängers.

FromUserName wird mit $toUsername = $postObj->ToUserName ausgefüllt, wobei es sich um das WeChat-Konto des Entwicklers handelt.

Dies ist die offizielle Textantwort. Instanziieren Sie einfach die Methode „responseMsg()“, um auf die Nachricht „Willkommen in der Wechat-Welt!“ zu antworten.

Hier nehmen wir eine leichte Änderung vor und geben die Nachrichten fromUsername und toUsername zurück, um den Lesern das Verständnis der obigen Anweisungen zu erleichtern.

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

3.4 Testergebnisse

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

3.5 Eingekapselt in eine aufrufbare Funktion

Wir können das Obige sagen Der Inhalt ist in einer Funktion gekapselt und kann direkt dort aufgerufen werden, wo der Antworttext benötigt wird. Der Code von ResponseText.func.inc.php lautet wie folgt.

function _response_text($object,$content){
    $textTpl = "<xml>
                <ToUserName><![CDATA[%s]]></ToUserName>
                <FromUserName><![CDATA[%s]]></FromUserName>
                <CreateTime>%s</CreateTime>
                <MsgType><![CDATA[text]]></MsgType>
                <Content><![CDATA[%s]]></Content>
                <FuncFlag>%d</FuncFlag>
                </xml>";
    $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
    return $resultStr;
}
Nach dem Login kopieren

Übergeben Sie auf diese Weise einfach $object und $content, führen Sie dann die Datei in die Datei ein, die auf den Text antworten muss, und rufen Sie dann die Methode _response_text() auf, um direkt zu antworten zum Text.

3.6 Testcode

3.6.1 Fügen Sie die Funktionsdatei des Antworttextes in die Hauptdatei ein

require_once &#39;responseText.func.inc.php&#39;;
Nach dem Login kopieren

3.6.2 Gewöhnliche Nachrichtenantwort

public function handleText($postObj)
    {
        $keyword = trim($postObj->Content);

        if(!empty( $keyword ))
        {
            $contentStr = "微信公众平台-文本回复功能源代码";
            //$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
            $resultStr = _response_text($postObj,$contentStr);
            echo $resultStr;
        }else{
            echo "Input something...";
        }
}
Nach dem Login kopieren

3.6.3 Beim Folgen antworten

public function handleEvent($object)
    {
        $contentStr = "";
        switch ($object->Event)
        {
            case "subscribe":
                $contentStr = "感谢您关注【卓锦苏州】"."\n"."微信号:zhuojinsz";
                break;
            default :
                $contentStr = "Unknow Event: ".$object->Event;
                break;
        }
        $resultStr = _response_text($object, $contentStr);
        return $resultStr;
}
Nach dem Login kopieren

3.7 Testergebnis

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

Text erfolgreich antworten.

4. Grafische Antwort

4.1 Grafische Antwort-XML-Struktur

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>12345678</CreateTime>
 <MsgType><![CDATA[news]]></MsgType>
 <ArticleCount>2</ArticleCount>
 <Articles>
 <item>
 <Title><![CDATA[title1]]></Title> 
 <Description><![CDATA[description1]]></Description>
 <PicUrl><![CDATA[picurl]]></PicUrl>
 <Url><![CDATA[url]]></Url>
 </item>
 <item>
 <Title><![CDATA[title]]></Title>
 <Description><![CDATA[description]]></Description>
 <PicUrl><![CDATA[picurl]]></PicUrl>
 <Url><![CDATA[url]]></Url>
 </item>
 </Articles>
 </xml>
Nach dem Login kopieren

4.2 Strukturbeschreibung

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

Ähnlich wie beim Textantwortformat müssen Sie nur den entsprechenden Inhalt an der entsprechenden Position ausfüllen, um auf die grafische Nachricht zu antworten.

4.3 Spezifische Implementierung

Bild-Text-Antworten können ein einzelner Bild-Text oder mehrere Bild-Texte sein. Hier verwenden wir zunächst einen Einzelbild-Text-Fall, um den Leser anzuleiten, und stellen ihn dann vor Mehrbildtext .

Wir zerlegen die XML-Struktur der Bild- und Textantwort in die folgenden drei Strukturen: den Bild- und Textkopf, den Bild- und Textkörper und den Bild- und Textkörper. Der Bild- und Textkörper ist der Titel , Beschreibung und Bild-URL, die Sie sehen, wenn Sie auf das Bild und den Text sowie die Original-URL antworten.

$newsTplHead = "<xml>
                <ToUserName><![CDATA[%s]]></ToUserName>
                <FromUserName><![CDATA[%s]]></FromUserName>
                <CreateTime>%s</CreateTime>
                <MsgType><![CDATA[news]]></MsgType>
                <ArticleCount>1</ArticleCount>
                <Articles>";
$newsTplBody = "<item>
                <Title><![CDATA[%s]]></Title> 
                <Description><![CDATA[%s]]></Description>
                <PicUrl><![CDATA[%s]]></PicUrl>
                <Url><![CDATA[%s]]></Url>
                </item>";
$newsTplFoot = "</Articles>
                <FuncFlag>0</FuncFlag>
                </xml>";
Nach dem Login kopieren

Als nächstes fügen wir entsprechende Inhalte in die drei Strukturen ein:

A $newsTplHead

$header = sprintf($newsTplHead, $object->FromUserName, $object->ToUserName, time());
Nach dem Login kopieren

B $newsTplBody

$title = $newsContent[&#39;title&#39;];
$desc = $newsContent[&#39;description&#39;];
$picUrl = $newsContent[&#39;picUrl&#39;];
$url = $newsContent[&#39;url&#39;];
$body = sprintf($newsTplBody, $title, $desc, $picUrl, $url);
Nach dem Login kopieren

Erklärung: $newsContent ist das Bild- und Textarray, das aus der Hauptdatei an die Funktion übergeben wird.

C. $newsTplFoot

$FuncFlag = 0;
$footer = sprintf($newsTplFoot, $FuncFlag);
Nach dem Login kopieren

Dann können Sie auf ein einzelnes Bild und einen einzelnen Text antworten, indem Sie die drei Absätze wieder zusammenfügen.

return $header.$body.$footer;
Nach dem Login kopieren

Schreiben Sie den obigen Inhalt in eine Funktion und nennen Sie sie zum Testen die Funktion _response_news(), indem Sie sie unten aufrufen.

4.4 Testcode

4.4.1 Führen Sie die Funktionsdatei zum Antworten auf das Bild und den Text in der Hauptdatei ein

require_once &#39;responseNews.func.inc.php&#39;;
Nach dem Login kopieren

4.4.2 Erstellen Sie eine Array und übergeben Sie es

In der Hauptdatei müssen Sie nur ein Array und $postObj an die Funktion _response_news() übergeben.

$record=array(
&#39;title&#39; =>&#39;山塘街&#39;,
&#39;description&#39; =>&#39;山塘街东起阊门渡僧桥,西至苏州名胜虎丘山的望山桥,长约七里,所以苏州俗语说“七里山塘到虎丘”...&#39;,
&#39;picUrl&#39; => &#39;http://thinkshare.duapp.com/images/suzhou.jpg&#39;,
&#39;url&#39; =>&#39;http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000046&itemidx=1&sign=9e7707d5615907d483df33ee449b378d#wechat_redirect&#39;
);

$resultStr = _response_news($postObj,$record);
echo $resultStr;
Nach dem Login kopieren
4.5 测试结果
Nach dem Login kopieren

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

点击进入查看

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

单图文回复测试成功。

4.6 多图文回复

有了上面的引导,读者应该能够想到回复多图文的思路了,就是将多维数组中的值循环放到相应的位置,然后拼接起来就可以了,下面进行讲解。

4.6.1 获取图文条数


$bodyCount = count($newsContent);
Nach dem Login kopieren


4.6.2 判断图文条数

因为微信限制了回复的图文消息数为10条以内,所以需要判断图文条数,如果小于10条,则图文数等于原来的图文数,如果大于等于10条,则强制限制为10条。


$bodyCount = $bodyCount < 10 ? $bodyCount : 10;
Nach dem Login kopieren


4.6.3 组织图文体

图文头和图文尾和上面单图文一样,不再赘述,主要是图文体的组织。

用foreach 循环出数组的内容并赋予图文体,并进行拼接:


foreach($newsContent as $key => $value){
    $body .= sprintf($newsTplBody, $value[&#39;title&#39;], $value[&#39;description&#39;], $value[&#39;picUrl&#39;], $value[&#39;url&#39;]);
}
Nach dem Login kopieren


说明:$newsContent 是从主文件传入函数的图文数组。

4.6.4 拼接并返回


return $header.$body.$footer;
Nach dem Login kopieren


将以上内容写到一个函数里,命名为 _response_multiNews() 函数,以供下面调用测试。

4.7 测试多图文

4.7.1 在主文件中引入回复多图文的函数文件


require_once &#39;responseMultiNews.func.inc.php&#39;;
Nach dem Login kopieren


4.7.2 创建多维数组并传入

$record[0]=array(
    &#39;title&#39; =>&#39;观前街&#39;,
    &#39;description&#39; =>&#39;观前街位于江苏苏州市区,是成街于清朝时期的百年商业老街,街上老店名店云集,名声远播海内外...&#39;,
    &#39;picUrl&#39; => &#39;http://joythink.duapp.com/images/suzhou.jpg&#39;,
    &#39;url&#39; =>&#39;http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000052&itemidx=1&sign=90518631fd3e85dd1fde7f77c04e44d5#wechat_redirect&#39;
);
......
$record[11]=array(
    &#39;title&#39; =>&#39;平江路&#39;,
    &#39;description&#39; =>&#39;平江路位于苏州古城东北,是一条傍河的小路,北接拙政园,南眺双塔,全长1606米,是苏州一条历史攸久的经典水巷。宋元时候苏州又名平江,以此名路...&#39;,
    &#39;picUrl&#39; => &#39;http://joythink.duapp.com/images/suzhouScenic/pingjianglu.jpg&#39;,
    &#39;url&#39; =>&#39;http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000056&itemidx=1&sign=ef18a26ce78c247f3071fb553484d97a#wechat_redirect&#39;
);
$resultStr = _response_multiNews($postObj,$record);
echo $resultStr;
Nach dem Login kopieren

4.8 测试多图文结果

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

点击进入查看

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

测试多图文成功。

五、音乐回复

微信还提供了一种消息回复的格式,即音乐回复,下面我们编写程序测试一下。

注意:由于音乐版权的问题,现在很少有回复音乐的API,开放的API 查询出来的音乐信息也有很多是不正确的。所以在这里,我们上传几首音乐到自己的服务器空间测试。

本地文件:

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

测试是否能够正常播放:

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

5.1 音乐回复xml 结构


 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>12345678</CreateTime>
 <MsgType><![CDATA[music]]></MsgType>
 <Music>
 <Title><![CDATA[TITLE]]></Title>
 <Description><![CDATA[DESCRIPTION]]></Description>
 <MusicUrl><![CDATA[MUSIC_Url]]></MusicUrl>
 <HQMusicUrl><![CDATA[HQ_MUSIC_Url]]></HQMusicUrl>
 </Music>
 </xml>
Nach dem Login kopieren


5.2 结构说明

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

5.3 具体实施

我们先做一个固定的歌曲回复来引导读者,然后再引出更高级别的歌曲查询回复。

5.3.1 在xml 结构的相应位置插入相应数据


<Music>
<Title><![CDATA[Far Away From Home]]></Title>
<Description><![CDATA[Groove Coverage]]></Description>
<MusicUrl><![CDATA[http://thinkshare.duapp.com/music/10001.mp3]]></MusicUrl>
<HQMusicUrl><![CDATA[http://thinkshare.duapp.com/music/10001.mp3]]></HQMusicUrl>
</Music>
Nach dem Login kopieren

5.3.2 测试代码


$resultStr = _response_music($postObj,$keyword);echo $resultStr;
Nach dem Login kopieren


5.3.3 测试结果

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

5.4 模拟点歌

有了上面的简单案例引导,读者应该可以想到模拟点歌的具体实现了吧,下面就来简单介绍一下。

思路:将歌曲代码和对应的歌曲名存入数据库,用户输入歌曲名,在数据库中找到歌曲名对应的歌曲编号,然后就可以生成MusicUrl 回复用户了。

5.4.1 创建数据库

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

建表语句及数据文件:


CREATE TABLE IF NOT EXISTS `tbl_music` (
  `music_id` int(11) NOT NULL,
  `music_name` varchar(40) NOT NULL,
  `music_singer` varchar(40) NOT NULL,
  `music_lrc` text NOT NULL,  PRIMARY KEY (`music_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;INSERT INTO `tbl_music` (`music_id`, `music_name`, `music_singer`, `music_lrc`) VALUES(10001, &#39;Far Away From Home&#39;, &#39;Groove Coverage&#39;, &#39;far away from home&#39;),
(10002, &#39;The Dawn&#39;, &#39;Dreamtale&#39;, &#39;the dawn&#39;),
(20002, &#39;董小姐&#39;, &#39;宋冬野&#39;, &#39;董小姐&#39;),
(20001, &#39;左边&#39;, &#39;杨丞琳&#39;, &#39;左边&#39;);
Nach dem Login kopieren


5.4.2 _response_music() 函数编写

A. 引入数据库操作文件


require_once(&#39;mysql_bae.func.php&#39;);
Nach dem Login kopieren


B. 数据库操作及数据处理

$query = "SELECT * FROM tbl_music WHERE music_name LIKE &#39;%$musicKeyword%&#39;";
$result = _select_data($query);
$rows = mysql_fetch_array($result, MYSQL_ASSOC);
$music_id = $rows[music_id];
Nach dem Login kopieren

注: $musicKeyword 为从主文件传入的歌曲名关键字,这里使用模糊查询,只取第一条数据。

C. 判断是否查询到


if($music_id <> &#39;&#39;)
{
    $music_name = $rows[music_name];
    $music_singer = $rows[music_singer];
    $musicUrl = "http://thinkshare.duapp.com/music/".$music_id.".mp3";
    $HQmusicUrl = "http://thinkshare.duapp.com/music/".$music_id.".mp3";

    $resultStr = sprintf($musicTpl, $object->FromUserName, $object->ToUserName, time(), $music_name, $music_singer, $musicUrl, $HQmusicUrl);
    return $resultStr;
}else{
    return "";    
}
Nach dem Login kopieren


说明:如果查询到歌曲信息,按照xml 结构返回数据;如果未查询到,则返回空,用于主文件判断。

将以上代码封装成 _response_music() 函数并保存为responseMusic.func.inc.php 文件供主文件调用。

5.4.3 测试代码

A. 引入回复音乐和回复文本的函数文件


//引入回复音乐的函数文件require_once 'responseMusic.func.inc.php';//引入回复文本的函数文件require_once &#39;responseText.func.inc.php&#39;;
Nach dem Login kopieren


B. 调用


if(!empty( $keyword ))
{
    $resultStr = _response_music($postObj,$keyword);
    if($resultStr <> &#39;&#39;)
    {
        echo $resultStr;
    }else
    {
        echo _response_text($postObj,"未查询到【".$keyword."】的歌曲信息!");    
    }
    
}
Nach dem Login kopieren


说明:如果查询到歌曲信息,则返回所得信息,如果未查询到,则调用 _response_text() 函数返回文本信息。

5.5 模拟点歌测试

Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform

回复音乐测试成功。 

更多Zusammenfassung und Einführung der Antwort auf die WeChat-Entwicklungsnachricht für die öffentliche Plattform相关文章请关注PHP中文网!

 



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