Home >Backend Development >PHP Tutorial >PHP method to develop SDK (demo) extension based on WeChat public platform, sdkdemo_PHP tutorial

PHP method to develop SDK (demo) extension based on WeChat public platform, sdkdemo_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:11:04870browse

php method to implement SDK (demo) extension based on WeChat public platform, sdkdemo

The example in this article describes the method of using PHP to develop SDK (demo) extensions based on the WeChat public platform. Share it with everyone for your reference. The specific analysis is as follows:

This extension is based on the official WeChat public platform SDK. It is simply encapsulated here and implements some basic functions (such as weather query, translation, automatic chat robot, custom menu interface) for learning purposes only. The code is for learning purposes only. As follows:

Copy code The code is as follows:
define("TOKEN", "xingans");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();
class wechatCallbackapiTest
{
//Signature verification public interface
Public function valid()
{
$echoStr = $_GET["echostr"];
If($this->checkSignature()){
                 echo $echoStr;
exit;
         }
}

//Main entrance processing function
Public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
If (!emptyempty($postStr)){
              $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                 $msgType=trim($postObj->MsgType);
                                                                                       switch($msgType){
case 'text':
                        $resultStr=$this->handleText($postObj);
break;
case 'event':
                         $resultStr=$this->handleEvent($postObj);
break;
                                default:
                          $resultStr=$this->handleDefault($postObj);
break;
             }
                  echo $resultStr;
                                                                                }else {
                 echo "Error";
exit;
         }
}

//Processing text messages
       private function handleText($obj){
             $keyword=trim($obj->Content);
If(preg_match('/weather/',$keyword)){
$contentStr=$this->handleWeather($obj);
               }elseif(preg_match('/translation/',$keyword)){
                   $contentStr=$this->handleTranslation($obj);
            }else{
                   $contentStr=$this->handleChat($obj);
            }
               return $this->handleStr($obj,$contentStr);
        }
       
//Handling weather
       private function handleWeather($obj){
               $keyword=mb_substr($obj->Content,-2,2,'utf-8');
              $zone=mb_substr($obj->Content,0,-2,'utf-8');
If($keyword=='weather' && !emptyempty($zone)){
$zoneArr=json_decode(file_get_contents('http://api.k780.com:88/?app=weather.city&format=json'),true);
                  $zoneArr=$zoneArr['result'];
              $cityId='';
              foreach($zoneArr as $value){
                  if($zone==$value['citynm']){
                      $cityId=$value['weaid'];
                      break;
                  }
              }
             
              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-> week.",".$data->result->citynm."天气:".$data->result->weather."n温度:".$data->result->temperature.",
                  ".$data->result->wind_direction.",".$data->result->wind_power.", 最低温度:".$data->result->temp_low.",最高温度:".$data->result->temp_high;
              }else{
                  $contentStr='找不到输入的城市!';
              }   
          }else{
              $contentStr='输入的查询格式不正确!';
          }
          return $contentStr;
      }
     
      //处理翻译
      private function handleTranslation($obj){
       $keyword=mb_substr($obj->Content,0,2,'utf-8');
       $words=mb_substr($obj->Content,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']){
               case '0':
                   $contentStr=$data['translation'][0];
                   break;
               case '20':
                   $contentStr='要翻译的文本过长';
                   break;
               case '30':
                   $contentStr='无法进行有效的翻译';
                   break;
case '40':
$contentStr='Unsupported language type';
break;
case '50':
                              $contentStr='Invalid key';
break;
                           default:
$contentStr='Error';
break;
              }
        }else{
​​​​​​ $contentStr='The input translation format is incorrect!';
         }
        return $contentStr;
        }
       
//Process chat information
       private function handleChat($obj){
         $keywords=$obj->Content;
         $curlPost=array("chat"=>$keywords);
​​​​ $ch = curl_init();//Initialize curl
curl_setopt($ch, CURLOPT_URL,'http://www.xiaojo.com/bot/chata.php');//Catch the specified web page
​​​ curl_setopt($ch, CURLOPT_HEADER, 0);//Set header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//requires the result to be a string and output to the screen
curl_setopt($ch, CURLOPT_POST, 1);//post submission method
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
​​​​ $data = curl_exec($ch);//Run curl
        curl_close($ch);
                         
If(!emptyempty($data)){
               $contentStr=$data;
        }else{
              $ran=rand(1,5);
                                                                                       switch($ran){
case 1:
                                     $contentStr= "Xiaojiu is tired today, I will chat with you tomorrow";
break;
case 2:
                       $contentStr= "Xiaojiu is sleeping~~";
break;
case 3:
$ Contentstr = "Huhuo ~~ Huhu ~~";
break;
case 4:
                            $contentStr= "You talk a lot, I won’t talk to you anymore";
break;
case 5:
​​​​​​​​                   break;
           }
       }
       return $contentStr;
      }
     
      //创建自定义菜单
      public function 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 (compatible; 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);     
        curl_close($ch);
        return $result;
      }
     
      //查询自定义菜单
   function getMenu($token){
       $url="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=$token";
       $ch = curl_init($url);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER,true) ; //获取数据返回
       curl_setopt($ch, CURLOPT_BINARYTRANSFER,true) ; //在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回   
       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
       curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
       return $output = curl_exec($ch);       
      }
     
      //删除自定义菜单
      public function 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);
       curl_close($ch);
       return $result;
      }

//Process event messages
       private function handleEvent($obj){
            $content='';
              switch($obj->Event){
case 'subscribe':
​​​​​​​​​ break;
case 'unsubscribe':
                          $content.="Thank you for your continued attention to this official account, goodbye!";
break;
                              default:
                        $content.="";
break;
            }
              return $this->handleStr($obj,$content);
        }
       
//Processing reply message string
       private function handleStr($obj,$content='',$flag=0){
​​​​ $textTpl = "";
          return sprintf($textTpl, $obj->FromUserName, $obj->ToUserName, time(), $content,$flag);
        }

//Signature verification function
private function checkSignature()
{
$signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
                $nonce = $_GET["nonce"];                                                 $token = TOKEN;
         $tmpArr = array($token, $timestamp, $nonce);
       sort($tmpArr, SORT_STRING);
         $tmpStr = implode( $tmpArr );
         $tmpStr = sha1( $tmpStr );
If( $tmpStr == $signature ){
            return true;
        }else{
             return false;
         }
}
}

I hope this article will be helpful to everyone’s PHP programming design.

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

truehttp: //www.bkjia.com/PHPjc/931541.htmlTechArticlephp method to implement SDK (demo) extension based on WeChat public platform, sdkdemo This article describes the example of php implementation based on WeChat Methods for developing SDK (demo) extensions on public platforms. Share it with everyone...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn