ホームページ > バックエンド開発 > PHPチュートリアル > WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:21:24
オリジナル
1303 人が閲覧しました

WeChatパブリックプラットフォーム開発(10)メッセージ返信、パブリックプラットフォームのまとめ

元のアドレス: http://www.cnblogs.com/mchina/p/3364377.html

1. はじめに

WeChat パブリック プラットフォームには、テキスト返信、音楽返信、グラフィック返信という 3 つのメッセージ返信形式が用意されています。この記事では、これら 3 つのメッセージ返信形式について簡単に説明し、読者が使用できるように関数にカプセル化します。

2. アイデア分析

各 POST リクエストに対して、開発者はメッセージに応答するために応答パッケージ内の特定の XML 構造を返します (応答テキスト、グラフィックス、音声、ビデオ、および音楽をサポートするようになりました)。

3. テキスト返信

3.1 テキスト返信の XML 構造

WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル リーリー WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

3.2 構造の説明

3.3 具体的な実装

上記の XML 構造の場合、対応する位置にコンテンツを入力し、出力をフォーマットするだけです。

手順:

ToUserName には、$fromUsername = $postObj->FromUserName が入力されます。これは、メッセージを送信したユーザー、つまり受信者のアカウントにメッセージを返します。

FromUserName には、開発者の WeChat アカウントである $toUsername = $postObj->ToUserName が入力されます。

これは、「Wechat ワールドへようこそ!」メッセージに返信するための、responseMsg() メソッドをインスタンス化するだけです。

ここでは、読者が上記の手順を理解しやすいように、少し変更を加えて fromUsername メッセージと toUsername メッセージを返します。

3.4 テスト結果

3.5 呼び出し可能な関数にカプセル化される

上記の内容を関数にカプセル化し、返信テキストが必要な場合に直接呼び出すことができます。responseText.func.inc.php のコードは次のとおりです。

WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル リーリー WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

このように、$object と $content を渡し、テキストに返信する必要があるファイルをファイルに導入し、_response_text() メソッドを呼び出すだけで、テキストに直接返信できます。

3.6 テストコード

3.6.1 返信文の関数ファイルをメインファイルに導入する

リーリー

3.6.2 通常のメッセージ返信

WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル リーリー WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

3.6.3 フォロー時に返信

WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル リーリー WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

3.7 テスト結果

テキストに正常に返信しました。

4. 画像とテキストで返信

4.1 画像とテキストの返信 XML 構造

WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル リーリー WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

4.2 構造の説明

テキスト返信形式と同様に、グラフィックメッセージに返信するには、対応する位置に対応する内容を記入するだけです。

4.3 具体的な実装

画像テキストの返信には、単一の画像テキストまたは複数の画像テキストを使用できます。ここでは、最初に単一の画像テキストのケースを使用して読者をガイドし、次に複数の画像テキストを紹介します。

画像とテキストの返信の XML 構造を、画像とテキストのヘッダー、画像とテキストの本文、画像とテキストの末尾の 3 つの構造に分解します。画像とテキストの本文は、タイトル、説明、画像 URL、元のテキスト URL です。画像やテキストに返信すると表示されます。

WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル
$newsTplHead = "<span><<span>xml<span>>
                <span><<span>ToUserName<span>><span><![CDATA[<span>%s<span>]]><span></<span>ToUserName<span>>
                <span><<span>FromUserName<span>><span><![CDATA[<span>%s<span>]]><span></<span>FromUserName<span>>
                <span><<span>CreateTime<span>>%s<span></<span>CreateTime<span>>
                <span><<span>MsgType<span>><span><![CDATA[<span>news<span>]]><span></<span>MsgType<span>>
                <span><<span>ArticleCount<span>>1<span></<span>ArticleCount<span>>
                <span><<span>Articles<span>><span>";
$newsTplBody = "<span><<span>item<span>>
                <span><<span>Title<span>><span><![CDATA[<span>%s<span>]]><span></<span>Title<span>> 
                <span><<span>Description<span>><span><![CDATA[<span>%s<span>]]><span></<span>Description<span>>
                <span><<span>PicUrl<span>><span><![CDATA[<span>%s<span>]]><span></<span>PicUrl<span>>
                <span><<span>Url<span>><span><![CDATA[<span>%s<span>]]><span></<span>Url<span>>
                <span></<span>item<span>><span>";
$newsTplFoot = "<span></<span>Articles<span>>
                <span><<span>FuncFlag<span>>0<span></<span>FuncFlag<span>>
                <span></<span>xml<span>>";</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
ログイン後にコピー
WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

接下来,我们对三段结构分别插入对应内容:

A. $newsTplHead

$header = sprintf($newsTplHead, $object->FromUserName, $object->ToUserName, time());
ログイン後にコピー

B. $newsTplBody

<span>$title = $newsContent['title'];
$desc = $newsContent['description'];
$picUrl = $newsContent['picUrl'];
$url = $newsContent['url'];
$body = sprintf($newsTplBody, $title, $desc, $picUrl, $url);</span>
ログイン後にコピー

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

C. $newsTplFoot

<span>$FuncFlag = 0;
$footer = sprintf($newsTplFoot, $FuncFlag);</span>
ログイン後にコピー

然后将三段进行拼接返回就可以回复单条图文了。

return $header.$body.$footer;
ログイン後にコピー

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

4.4 测试代码

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

<span>require_once 'responseNews.func.inc.php';</span>
ログイン後にコピー

4.4.2 创建数组并传入

在主文件中,只需要向 _response_news() 函数中传入一个数组和$postObj 即可。

WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル
<span>$record=<span>array<span>(
    'title' =>'山塘街',
    'description' =>'山塘街东起阊门渡僧桥,西至苏州名胜虎丘山的望山桥,长约七里,所以苏州俗语说&ldquo;七里山塘到虎丘&rdquo;...',
    'picUrl' => 'http://thinkshare.duapp.com/images/suzhou.jpg',
    'url' =>'http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000046&itemidx=1&sign=9e7707d5615907d483df33ee449b378d#wechat_redirect'<span>
);

<span>$resultStr = _response_news(<span>$postObj,<span>$record<span>);
<span>echo <span>$resultStr;</span></span></span></span></span></span></span></span></span></span>
ログイン後にコピー
WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

4.5 测试结果

点击进入查看

单图文回复测试成功。

4.6 多图文回复

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

4.6.1 获取图文条数

<span>$bodyCount = <span>count(<span>$newsContent);</span></span></span>
ログイン後にコピー

4.6.2 判断图文条数

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

<span>$bodyCount = <span>$bodyCount < 10 ? <span>$bodyCount : 10;</span></span></span>
ログイン後にコピー

4.6.3 组织图文体

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

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

<span>foreach(<span>$newsContent <span>as <span>$key => <span>$value<span>){
    <span>$body .= <span>sprintf(<span>$newsTplBody, <span>$value['title'], <span>$value['description'], <span>$value['picUrl'], <span>$value['url'<span>]);
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span>
ログイン後にコピー

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

4.6.4 拼接并返回

<span>return <span>$header.<span>$body.<span>$footer;</span></span></span></span>
ログイン後にコピー

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

4.7 测试多图文

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

<span>require_once 'responseMultiNews.func.inc.php';</span>
ログイン後にコピー

4.7.2 创建多维数组并传入

WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル
<span>$record[0]=<span>array<span>(
    'title' =>'观前街',
    'description' =>'观前街位于江苏苏州市区,是成街于清朝时期的百年商业老街,街上老店名店云集,名声远播海内外...',
    'picUrl' => 'http://joythink.duapp.com/images/suzhou.jpg',
    'url' =>'http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000052&itemidx=1&sign=90518631fd3e85dd1fde7f77c04e44d5#wechat_redirect'<span>
);

......

<span>$record[11]=<span>array<span>(
    'title' =>'平江路',
    'description' =>'平江路位于苏州古城东北,是一条傍河的小路,北接拙政园,南眺双塔,全长1606米,是苏州一条历史攸久的经典水巷。宋元时候苏州又名平江,以此名路...',
    'picUrl' => 'http://joythink.duapp.com/images/suzhouScenic/pingjianglu.jpg',
    'url' =>'http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000056&itemidx=1&sign=ef18a26ce78c247f3071fb553484d97a#wechat_redirect'<span>
);

<span>$resultStr = _response_multiNews(<span>$postObj,<span>$record<span>);
<span>echo <span>$resultStr;</span></span></span></span></span></span></span></span></span></span></span></span></span></span>
ログイン後にコピー
WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

4.8 测试多图文结果

点击进入查看

测试多图文成功。

五、音乐回复

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

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

本地文件:

测试是否能够正常播放:

5.1 音乐回复xml 结构

WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル
 <span><<span>xml<span>>
 <span><<span>ToUserName<span>><span><![CDATA[<span>toUser<span>]]><span></<span>ToUserName<span>>
 <span><<span>FromUserName<span>><span><![CDATA[<span>fromUser<span>]]><span></<span>FromUserName<span>>
 <span><<span>CreateTime<span>>12345678<span></<span>CreateTime<span>>
 <span><<span>MsgType<span>><span><![CDATA[<span>music<span>]]><span></<span>MsgType<span>>
 <span><<span>Music<span>>
 <span><<span>Title<span>><span><![CDATA[<span>TITLE<span>]]><span></<span>Title<span>>
 <span><<span>Description<span>><span><![CDATA[<span>DESCRIPTION<span>]]><span></<span>Description<span>>
 <span><<span>MusicUrl<span>><span><![CDATA[<span>MUSIC_Url<span>]]><span></<span>MusicUrl<span>>
 <span><<span>HQMusicUrl<span>><span><![CDATA[<span>HQ_MUSIC_Url<span>]]><span></<span>HQMusicUrl<span>>
 <span></<span>Music<span>>
 <span></<span>xml<span>></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
ログイン後にコピー
WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

5.2 结构说明

5.3 具体实施

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

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

WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル
<span><<span>Music<span>>
<span><<span>Title<span>><span><![CDATA[<span>Far Away From Home<span>]]><span></<span>Title<span>>
<span><<span>Description<span>><span><![CDATA[<span>Groove Coverage<span>]]><span></<span>Description<span>>
<span><<span>MusicUrl<span>><span><![CDATA[<span>http://thinkshare.duapp.com/music/10001.mp3<span>]]><span></<span>MusicUrl<span>>
<span><<span>HQMusicUrl<span>><span><![CDATA[<span>http://thinkshare.duapp.com/music/10001.mp3<span>]]><span></<span>HQMusicUrl<span>>
<span></<span>Music<span>></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
ログイン後にコピー
WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

5.3.2 测试代码

<span>$resultStr = _response_music(<span>$postObj,<span>$keyword<span>);
<span>echo <span>$resultStr;                    </span></span></span></span></span></span>
ログイン後にコピー

5.3.3 测试结果

5.4 模拟点歌

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

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

5.4.1 创建数据库

建表语句及数据文件:

WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル
<span>CREATE <span>TABLE <span>IF <span>NOT <span>EXISTS<span> `tbl_music` (
  `music_id` <span>int(<span>11) <span>NOT <span>NULL<span>,
  `music_name` <span>varchar(<span>40) <span>NOT <span>NULL<span>,
  `music_singer` <span>varchar(<span>40) <span>NOT <span>NULL<span>,
  `music_lrc` <span>text <span>NOT <span>NULL<span>,
  <span>PRIMARY <span>KEY<span> (`music_id`)
) ENGINE<span>=MyISAM <span>DEFAULT CHARSET<span>=<span>utf8;

<span>INSERT <span>INTO `tbl_music` (`music_id`, `music_name`, `music_singer`, `music_lrc`) <span>VALUES<span>
(<span>10001, <span>'<span>Far Away From Home<span>', <span>'<span>Groove Coverage<span>', <span>'<span>far away from home<span>'<span>),
(<span>10002, <span>'<span>The Dawn<span>', <span>'<span>Dreamtale<span>', <span>'<span>the dawn<span>'<span>),
(<span>20002, <span>'<span>董小姐<span>', <span>'<span>宋冬野<span>', <span>'<span>董小姐<span>'<span>),
(<span>20001, <span>'<span>左边<span>', <span>'<span>杨丞琳<span>', <span>'<span>左边<span>');</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
ログイン後にコピー
WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

5.4.2 _response_music() 函数编写

A. 引入数据库操作文件

<span>require_once('mysql_bae.func.php');</span>
ログイン後にコピー

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

<span>$query = "SELECT * FROM tbl_music WHERE music_name LIKE '%<span>$musicKeyword%'"<span>;
<span>$result = _select_data(<span>$query<span>);
<span>$rows = <span>mysql_fetch_array(<span>$result,<span> MYSQL_ASSOC);

<span>$music_id = <span>$rows[music_id];</span></span></span></span></span></span></span></span></span></span></span></span>
ログイン後にコピー

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

C. 判断是否查询到

WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル
<span>if(<span>$music_id <> ''<span>)
{
    <span>$music_name = <span>$rows<span>[music_name];
    <span>$music_singer = <span>$rows<span>[music_singer];
    <span>$musicUrl = "http://thinkshare.duapp.com/music/".<span>$music_id.".mp3"<span>;
    <span>$HQmusicUrl = "http://thinkshare.duapp.com/music/".<span>$music_id.".mp3"<span>;

    <span>$resultStr = <span>sprintf(<span>$musicTpl, <span>$object->FromUserName, <span>$object->ToUserName, <span>time(), <span>$music_name, <span>$music_singer, <span>$musicUrl, <span>$HQmusicUrl<span>);
    <span>return <span>$resultStr<span>;
}<span>else<span>{
    <span>return ""<span>;    
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
ログイン後にコピー
WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

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

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

5.4.3 测试代码

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

<span>//<span>引入回复音乐的函数文件
<span>require_once 'responseMusic.func.inc.php'<span>;
<span>//<span>引入回复文本的函数文件
<span>require_once 'responseText.func.inc.php';</span></span></span></span></span></span></span>
ログイン後にコピー

B. 调用

WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル
<span>if(!<span>empty( <span>$keyword<span> ))
{
    <span>$resultStr = _response_music(<span>$postObj,<span>$keyword<span>);
    <span>if(<span>$resultStr <> ''<span>)
    {
        <span>echo <span>$resultStr<span>;
    }<span>else<span>
    {
        <span>echo _response_text(<span>$postObj,"未查询到【".<span>$keyword."】的歌曲信息!"<span>);    
    }
    
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
ログイン後にコピー
WeChatパブリックプラットフォーム開発(10)メッセージ返信まとめ、パブリックプラットフォーム_PHPチュートリアル

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

5.5 模拟点歌测试

回复音乐测试成功。

微信公众平台开发者模式回复图文消息代码,要全套的最好有文字说明的

$resultStr="\n \n \n ".time()."\n \n 1\n \n \n \n <description>\n <picurl>\n <url>\n \n \n <funcflag>0\n ";echo $resultStr;$resultStr = sprintf($newsTpl, $fromUsername, $toUsername, time(), $msgType, $title,$desription);看了下你的这句$newsTpl应该是一个已经定义好的模版,后面是替换的参数所以可以查看下模版是否正确<br>给你个我代码里面用到的例子吧,具体里面字符串的话自己替换<br>希望您能采纳!谢谢<br><br>   <div class="header2"><span class="icon i-relatedanswer"><h3>怎在微信公众平台自动回复中设置图文并存的消息回复?</h3></span></div> <div class="best-replyer"></div> <p class="ft p1">「高度な機能」-「エディターモード」-キーワード返信-「写真とテキストの選択」で<br><br>2回目の自動返信に写真とテキストが必要な場合は、「開発者モード」に入る必要がありますが、開発者モードは必要ですインターフェース<br> </p> <p align="left"></p> <div style="display:none;"> <span id="url" itemprop="url">http://www.bkjia.com/PHPjc/857274.html</span><span id="indexUrl" itemprop="indexUrl">www.bkjia.com</span><span id="isOriginal" itemprop="isOriginal">tru​​e</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">http://www.bkjia.com/PHPjc/857274.html</span><span id="genre" itemprop="genre">技術記事</span><span id="description" itemprop="description"> WeChat パブリック プラットフォームの開発 (10) メッセージ返信の概要、パブリック プラットフォームの元のアドレス: http://www.cnblogs.com/mchina/p/3364377.html 1. はじめに WeChat パブリック プラットフォームは 3 種類のメッセージ返信を提供します。 ..</span> </div></funcflag></url></picurl></description>

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート