この記事の例では、PHP を使用して WeChat パブリック プラットフォームに基づいた SDK (デモ) 拡張機能を開発する方法について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:
この拡張機能は、公式 WeChat パブリック プラットフォーム SDK に基づいており、ここでは単にカプセル化されており、学習目的のみにいくつかの基本機能 (天気クエリ、翻訳、自動チャット ロボット、カスタム メニュー インターフェイスなど) を実装しています。コードは次のとおりです。
define("トークン", "xingans");
$wechatObj = 新しい wechatCallbackapiTest();
$wechatObj->responseMsg();
クラス wechatCallbackapiTest
{
//署名検証パブリックインターフェース
パブリック関数 valid()
{
$echoStr = $_GET["echostr"];
If($this->checkSignature()){
echo $echoStr;
出る
}
}
//メインエントランス処理関数
パブリック関数 responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
If (!emptyempty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$msgType=trim($postObj->MsgType);
switch($msgType){
ケース「テキスト」:
$resultStr=$this->handleText($postObj);
休憩
ケース「イベント」:
$resultStr=$this->handleEvent($postObj);
休憩
デフォルト:
$resultStr=$this->handleDefault($postObj);
休憩
echo $resultStr;
}else {
「エラー」をエコーします
出る
}
}
//テキストメッセージを処理します
プライベート関数 handleText($obj){
$keyword=trim($obj->コンテンツ);
If(preg_match('/weather/',$keyword)){
$contentStr=$this->handleWeather($obj);
}elseif(preg_match('/translation/',$keyword)){
$contentStr=$this->handleTranslation($obj);
}その他{
$contentStr=$this->handleChat($obj);
return $this->handleStr($obj,$contentStr);
}
//天気を操作する
プライベート関数 handleWeather($obj){
$keyword=mb_substr($obj->Content,-2,2,'utf-8');
$zone=mb_substr($obj->Content,0,-2,'utf-8');
If($keyword=='天気' && !emptyempty($zone)){
$zoneArr=json_decode(file_get_contents('http://api.k780.com:88/?app=weather.city&format=json'),true);
$zoneArr=$zoneArr['結果']; $cityId='';
foreach($zoneArr as $value){
if($zone==$value['citynm']){
$cityId=$value['weaid'];
壊す;
}
}
if(!emptyempty($cityId)){
$data=file_get_contents("http://api.k780.com:88/?app=weather.today&weaid=$cityId&appkey=10638&sign=3736578f099375665f9f141a6326b757&format=json");
$data=json_decode($data);
$contentStr="今天是:".$data->result->days.",".$data->result->days; ",".$data->result->citynm."天気:".$data->result->weather."n温度:".$data->result->気温. "、
".$data->result->wind_direction.",".$data->result->wind_power.", 最低温度:".$data->result->temp_low.",最高温度:".$data->result->temp_high;
}その他{
$contentStr='找不到输入城市!';
}
}その他{
$contentStr='输入的查询格式不正确!';
}
$contentStr を返します。
}
//处理翻译
プライベート関数 handleTranslation($obj){
$keyword=mb_substr($obj->コンテンツ,0,2,'utf-8');
$words=mb_substr($obj->コンテンツ,2,220,'utf-8');
if($keyword=='翻译' && !emptyempty($words)){
$data=file_get_contents('http://fanyi.youdao.com/openapi.do?keyfrom=zfsblog&key=364295447&type=data&doctype=json&version=1.1&q='.urlencode($words));
$data=json_decode($data,true);
switch($data['errorCode']){
ケース '0':
$contentStr=$data['translation'][0];
壊す;
ケース '20':
$contentStr='要翻訳的文本过长';
壊す;
ケース '30':
$contentStr='無法実行有能翻訳';
壊す;
ケース '40':
$contentStr='サポートされていない言語の種類';
休憩
ケース '50':
$contentStr='無効なキー';
休憩
デフォルト:
$contentStr='エラー';
休憩
}その他{
$contentStr='入力された翻訳形式が正しくありません!';
}
戻り $contentStr;
}
//チャット情報を処理します
プライベート関数 handleChat($obj){
$keywords=$obj->コンテンツ;
$curlPost=array("チャット"=>$キーワード);
$ch =curl_init();//curl を初期化します
curl_setopt($ch, CURLOPT_URL,'http://www.xiaojo.com/bot/chata.php');//指定された Web ページをキャッチします
curl_setopt($ch, CURLOPT_HEADER, 0);//ヘッダーを設定します
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//結果が文字列であり、画面に出力されることが必要です
curl_setopt($ch, CURLOPT_POST, 1);//投稿送信メソッド
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data =curl_exec($ch);//curl を実行します
curl_close($ch);
If(!emptyempty($data)){
$contentStr=$data;
}その他{
$ran=rand(1,5);
switch($ran){
ケース 1:
$ Contentstr = "Xiaojiu は今日は疲れているので、明日チャットしてください";
休憩
ケース 2:
$contentStr= "シャオジウは寝ています~~";
休憩
ケース 3:
$ Contentstr = "フッ ~~ フフ ~~";
休憩
ケース 4:
$contentStr= "あなたはよく話します、私はもう話しません。";
休憩
ケース 5:
$contentStr= "あなたはよく話します、私はもう話しません。"; 壊す;
}
}
$contentStr を返します。
}
//创建自定义菜单
パブリック関数 createMenu($data,$token){
$ch =curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (互換性; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result =curl_exec($ch);
カール_クローズ($ch);
$result を返します。
}
//查询自定义菜单
関数 getMenu($token){
$url="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=$token";
$ch =curl_init($url);
curl_setopt($ch, CURLOPT_RETURTRANSFER,true) ; //获取データを返す
curl_setopt($ch, CURLOPT_BINARYTRANSFER,true) ; //在启用 CURLOPT_RETURNTRANSFER 時に获取データを返します 候
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
戻り $output =curl_exec($ch);
}
//删除自定义菜单
パブリック関数 deleteMenu($token){
$url="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$token;
$ch =curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$result =curl_exec($ch);
カール_クローズ($ch);
$result を返します。
}
//イベントメッセージを処理します
プライベート関数 handleEvent($obj){
$content='';
switch($obj->Event){
ケース「購読」:
休憩
ケース「購読解除」:
$content.="この公式アカウントを今後ともよろしくお願いいたします。さようなら!";
休憩
デフォルト:
$content.="";
休憩
return $this->handleStr($obj,$content);
}
//応答メッセージ文字列を処理します
プライベート関数 handleStr($obj,$content='',$flag=0){
$textTpl = "";
return sprintf($textTpl, $obj->FromUserName, $obj->ToUserName, time(), $content,$flag);
}
//署名検証関数
プライベート関数 checkSignature()
{
$signature = $_GET["署名"]
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = トークン;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
If( $tmpStr == $signature ){
true を返します。
}その他{
false を返します。
}
}
}
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。
http://www.bkjia.com/PHPjc/931541.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/931541.html
技術記事
PHP は、WeChat パブリック プラットフォームに基づいて SDK (デモ) 拡張機能を開発する方法、sdkdemo を実装します。 この記事では、PHP が WeChat パブリック プラットフォームに基づいて SDK (デモ) 拡張機能を実装する方法について説明します。みんなとシェアしましょう...