ホームページ >バックエンド開発 >PHPチュートリアル >WeChat パブリック プラットフォームに基づいて SDK (デモ) 拡張機能を開発するための PHP メソッド、sdkdemo_PHP チュートリアル

WeChat パブリック プラットフォームに基づいて SDK (デモ) 拡張機能を開発するための PHP メソッド、sdkdemo_PHP チュートリアル

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

phpは、WeChatパブリックプラットフォーム、sdkdemo

に基づいてSDK(デモ)拡張機能を開発するメソッドを実装します

この記事の例では、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

tru​​e

http://www.bkjia.com/PHPjc/931541.html

技術記事

PHP は、WeChat パブリック プラットフォームに基づいて SDK (デモ) 拡張機能を開発する方法、sdkdemo を実装します。 この記事では、PHP が WeChat パブリック プラットフォームに基づいて SDK (デモ) 拡張機能を実装する方法について説明します。みんなとシェアしましょう...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。