ホームページ >バックエンド開発 >PHPチュートリアル >PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル

PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:35:321197ブラウズ

【PHP WeChatパブリックプラットフォーム開発シリーズ】

01. WeChatインターフェースを設定する
02. パブリックプラットフォームのサンプルコード解析
03. サブスクリプションイベント(subscribe)処理
04. 簡易返信機能の開発
05.天気予報機能開発
06. 翻訳機能開発
07. チャットボット機能開発
08.カスタマイズメニュー機能
09. データベース操作
10. メッセージ返信のカプセル化


この記事のURL: http://www.phpchina.com/archives/view-43418-1.html
このシリーズは、PHPChina の特別招待著者である @David_Tang によって寄稿されたものです。転載する場合は、著者の情報とこの記事のアドレスを明記してください。

1. はじめに

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

2. アイデア分析

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

3. テキスト返信

3.1 テキスト返信の XML 構造

PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル リーリー PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル

3.2 構造の説明

3.3 具体的な実装

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

説明:

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

FromUserName の位置に $toUsername = $postObj->ToUserName を入力します。これは開発者の WeChat ID です。

これは、responseMsg() メソッドをインスタンス化して、「wechat ワールドへようこそ!」というメッセージを返信する公式のテキスト返信です。

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

3.4 テスト結果

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

上記のコンテンツを関数にカプセル化し、応答テキストが必要な場合に直接呼び出すことができます。これは便利で簡潔です。responseText.func.inc.php コードは次のとおりです。

PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル リーリー PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル

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

3.6 テストコード

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

リーリー

3.6.2 通常のメッセージ返信

PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル リーリー PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル

3.6.3 フォロー時の返信

PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル リーリー PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル

3.7 テスト結果

返信テキストが成功しました。

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

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

PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル リーリー PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル

4.2 構造の説明

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

4.3 具体的な実装

画像とテキストの返信には、単一の画像とテキストを使用することも、複数の画像とテキストを使用することもできます。ここでは、最初に単一の画像とテキストの場合について読者に説明し、次に複数の画像とテキストを紹介します。

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

PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル
$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>";
PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル

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

A. $newsTplHead

$header = sprintf($newsTplHead, $object->FromUserName, $object->ToUserName, time());

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);

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

C. $newsTplFoot

$FuncFlag = 0;
$footer = sprintf($newsTplFoot, $FuncFlag);

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

return $header.$body.$footer;

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

4.4 测试代码

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

require_once &#39;responseNews.func.inc.php&#39;;

4.4.2 创建数组并传入

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

PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル
$record=array(
    &#39;title&#39; =>&#39;山塘街&#39;,
    &#39;description&#39; =>&#39;山塘街东起阊门渡僧桥,西至苏州名胜虎丘山的望山桥,长约七里,所以苏州俗语说&ldquo;七里山塘到虎丘&rdquo;...&#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;
PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル

4.5 测试结果

点击进入查看

单图文回复测试成功。

4.6 多图文回复

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

4.6.1 获取图文条数

$bodyCount = count($newsContent);

4.6.2 判断图文条数

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

$bodyCount = $bodyCount < 10 ? $bodyCount : 10;

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;]);
}

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

4.6.4 拼接并返回

return $header.$body.$footer;

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

4.7 测试多图文

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

require_once &#39;responseMultiNews.func.inc.php&#39;;

4.7.2 创建多维数组并传入

PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル
$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;
PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル

4.8 测试多图文结果

点击进入查看

测试多图文成功。

五、音乐回复

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

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

本地文件:

测试是否能够正常播放:

5.1 音乐回复xml 结构

PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル
 <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>
PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル

5.2 结构说明

5.3 具体实施

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

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

PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル
<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>
PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル

5.3.2 测试代码

$resultStr = _response_music($postObj,$keyword);
echo $resultStr;                    

5.3.3 测试结果

5.4 模拟点歌

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

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

5.4.1 データベースの作成
PHP WeChat パブリック プラットフォーム開発 - メッセージ返信のカプセル化_PHP チュートリアル

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/743433.html技術記事 【PHP WeChatパブリックプラットフォーム開発シリーズ】 01. WeChatインターフェイスの設定 02. パブリックプラットフォームのサンプルコード解析 03. 購読イベント(購読)処理 04. 簡易返信機能開発 05. 天気予報機能…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。