Maison > Applet WeChat > Développement WeChat > Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

高洛峰
Libérer: 2017-03-06 09:38:30
original
1477 Les gens l'ont consulté

1. Introduction

La plateforme publique WeChat propose trois formats de réponse aux messages, à savoir la réponse texte, la réponse musicale et la réponse texte. réponse, dans cet article, nous expliquerons brièvement les formats de ces trois réponses aux messages, puis les encapsulerons dans des fonctions que les lecteurs pourront utiliser.

2. Analyse des idées

Pour chaque requête POST, le développeur renvoie une structure XML spécifique dans le package de réponse. , répondez au message (prend désormais en charge le texte de réponse, les graphiques, la voix, la vidéo, la musique).

3. Réponse textuelle

3.1 Structure XML de la réponse textuelle

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>12345678</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[content]]></Content>
 </xml>
Copier après la connexion

3.2 Structure Description

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

3.3 Implémentation spécifique

Pour la structure XML donnée ci-dessus, il suffit de renseigner le contenu à la position correspondante puis de formater il suffit de le sortir.

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

Explication :

ToUserName est renseigné avec $fromUsername = $postObj->FromUserName, qui doit renvoyer le message à L'utilisateur qui a envoyé le message est le compte du destinataire.

FromUserName est renseigné avec $toUsername = $postObj->ToUserName, qui est l'identifiant WeChat du développeur.

Ceci est la réponse textuelle officielle. Instanciez simplement sa méthode ResponseMsg() pour répondre au message « Bienvenue dans le monde WeChat ! »

Ici, nous apportons une légère modification et revenons aux messages fromUsername et toUsername pour permettre aux lecteurs de comprendre les instructions ci-dessus.

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

3.4 Résultats des tests

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

3.5 Encapsulé dans une fonction appelable

Nous pouvons mettre ce qui précède Le contenu est encapsulé dans une fonction et peut être appelé directement là où le texte de réponse est nécessaire. C'est pratique et concis. Le code de réponseText.func.inc.php est le suivant.

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;
}
Copier après la connexion

De cette façon, transmettez simplement $object et $content, puis introduisez le fichier dans le fichier qui doit répondre au texte, puis appelez la méthode _response_text(), vous pouvez répondre directement au texte.

3.6 Code de test

3.6.1 Introduire le fichier de fonction du texte de réponse dans le fichier principal

require_once &#39;responseText.func.inc.php&#39;;
Copier après la connexion

3.6.2 Réponse au message ordinaire

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...";
        }
}
Copier après la connexion

3.6.3 Répondre en suivant

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;
}
Copier après la connexion

3.7 Résultat du test

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

Répondre au texte avec succès.

4. Réponse graphique

4.1 Structure XML de réponse graphique

 <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>
Copier après la connexion

4.2 Description de la structure

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

Semblable au format de réponse texte, il vous suffit de remplir le contenu correspondant à la position correspondante pour répondre au message graphique.

4.3 Implémentation spécifique

La réponse image-texte peut être une seule image-texte ou plusieurs images-texte Ici, nous utilisons d'abord un cas de texte-image unique pour guider les lecteurs, puis nous le présentons. texte multi-images .

Nous décomposons la structure XML de la réponse image et texte en trois structures suivantes, l'en-tête de l'image et du texte, le corps de l'image et du texte, et la queue de l'image et du texte. Le corps de l'image et du texte est le titre. , la description et l'URL de l'image que vous voyez lorsque vous répondez à l'image, au texte et à l'URL d'origine.

$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>";
Copier après la connexion

Ensuite, nous insérons le contenu correspondant dans les trois structures :

A $newsTplHead

$header = sprintf($newsTplHead, $object->FromUserName, $object->ToUserName, time());
Copier après la connexion

$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);
Copier après la connexion

Explication : $newsContent est le tableau d'images et de texte transmis à la fonction à partir du fichier principal.

C. $newsTplFoot

$FuncFlag = 0;
$footer = sprintf($newsTplFoot, $FuncFlag);
Copier après la connexion

Ensuite, vous pouvez répondre à une seule image et à un seul texte en rassemblant les trois paragraphes.

return $header.$body.$footer;
Copier après la connexion

Écrivez le contenu ci-dessus dans une fonction et nommez-la fonction _response_news() pour le tester en l'appelant ci-dessous.

4.4 Code de test

4.4.1 Introduire le fichier de fonction pour répondre à l'image et au texte dans le fichier principal

require_once &#39;responseNews.func.inc.php&#39;;
Copier après la connexion

4.4.2 Créer un array et transmettez-le dans

Dans le fichier principal, il vous suffit de transmettre un tableau et $postObj à la fonction _response_news().

$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;
Copier après la connexion
4.5 测试结果
Copier après la connexion

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

点击进入查看

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

单图文回复测试成功。

4.6 多图文回复

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

4.6.1 获取图文条数


$bodyCount = count($newsContent);
Copier après la connexion


4.6.2 判断图文条数

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


$bodyCount = $bodyCount < 10 ? $bodyCount : 10;
Copier après la connexion


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;]);
}
Copier après la connexion


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

4.6.4 拼接并返回


return $header.$body.$footer;
Copier après la connexion


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

4.7 测试多图文

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


require_once &#39;responseMultiNews.func.inc.php&#39;;
Copier après la connexion


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;
Copier après la connexion

4.8 测试多图文结果

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

点击进入查看

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

测试多图文成功。

五、音乐回复

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

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

本地文件:

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

测试是否能够正常播放:

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

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>
Copier après la connexion


5.2 结构说明

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

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>
Copier après la connexion

5.3.2 测试代码


$resultStr = _response_music($postObj,$keyword);echo $resultStr;
Copier après la connexion


5.3.3 测试结果

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

5.4 模拟点歌

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

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

5.4.1 创建数据库

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

建表语句及数据文件:


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;);
Copier après la connexion


5.4.2 _response_music() 函数编写

A. 引入数据库操作文件


require_once(&#39;mysql_bae.func.php&#39;);
Copier après la connexion


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];
Copier après la connexion

注: $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 "";    
}
Copier après la connexion


说明:如果查询到歌曲信息,按照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;;
Copier après la connexion


B. 调用


if(!empty( $keyword ))
{
    $resultStr = _response_music($postObj,$keyword);
    if($resultStr <> &#39;&#39;)
    {
        echo $resultStr;
    }else
    {
        echo _response_text($postObj,"未查询到【".$keyword."】的歌曲信息!");    
    }
    
}
Copier après la connexion


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

5.5 模拟点歌测试

Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat

回复音乐测试成功。 

更多Résumé et introduction de la réponse au message de développement de la plateforme publique WeChat相关文章请关注PHP中文网!

 



Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal