define("TOKEN", "xingans");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();
class wechatCallbackapiTest
{
?? //簽名驗證公共接口
?? public function valid()
?? {
?????? $echoStr = $_GET["echostr"];
?????? if($this->checkSignature()){
?????????? echo $echoStr;
?????????? exit;
?????? }
?? }
?
?? //主入口處理函數
?? 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;
?????? }
?? }
??
?? //處理文本消息
????? private function handleText($obj){
????????? $keyword=trim($obj->Content);
????????? if(preg_match('/天氣/',$keyword)){
????????????? $contentStr=$this->handleWeather($obj);
????????? }elseif(preg_match('/翻譯/',$keyword)){
????????????? $contentStr=$this->handleTranslation($obj);
????????? }else{
????????????? $contentStr=$this->handleChat($obj);
????????? }
????????? return $this->handleStr($obj,$contentStr);
????? }
?????
????? //處理天氣
????? private function 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['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='不支持的語言類型';
?????????????????? break;
?????????????? case '50':
?????????????????? $contentStr='無效的key';
?????????????????? break;
?????????????? default:
?????????????????? $contentStr='Error';
?????????????????? break;
?????????? }
?????? }else{
?????????? $contentStr='輸入的翻譯格式不正確!';
?????? }
?????? return $contentStr;
????? }
?????
????? //處理聊天信息
????? private function handleChat($obj){
?????? $keywords=$obj->Content;
?????? $curlPost=array("chat"=>$keywords);
?????? $ch = curl_init();//初始化curl
?????? curl_setopt($ch, CURLOPT_URL,'http://www.xiaojo.com/bot/chata.php');//抓取指定網頁
?????? curl_setopt($ch, CURLOPT_HEADER, 0);//設置header
?????? curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求結果為字符串且輸出到屏幕上
?????? curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
?????? curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
?????? $data = curl_exec($ch);//運行curl
?????? curl_close($ch);
??????
?????? if(!emptyempty($data)){
?????????? $contentStr=$data;
?????? }else{
?????????? $ran=rand(1,5);
??????????
?????????? switch($ran){
?????????????? case 1:
?????????????????? $contentStr= "小九今天累了,明天再陪你聊天吧";
?????????????????? break;
?????????????? case 2:
?????????????????? $contentStr= "小九睡覺嘍~~";
?????????????????? break;
?????????????? case 3:
?????????????????? $contentStr= "呼呼~~呼呼~~";
?????????????????? break;
?????????????? case 4:
?????????????????? $contentStr= "你話好多啊,不跟你聊了";
?????????????????? break;
?????????????? case 5:
?????????????????? $contentStr= "你話好多啊,不跟你聊了";
?????????????????? 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;
????? }
PHP編程????? //處理事件消息
????? private function handleEvent($obj){
????????? $content='';
????????? switch($obj->Event){
????????????? case 'subscribe':
????????????????? $content.="welcome-歡迎關注該公眾號號!";
????????????????? break;
????????????? case 'unsubscribe':
????????????????? $content.="感謝您一直以來對該公眾號的關注,再見!";
????????????????? break;
????????????? default:
????????????????? $content.="";
????????????????? break;
????????? }
????????? return $this->handleStr($obj,$content);
????? }
?????
????? //處理回復消息字符串
????? private function handleStr($obj,$content='',$flag=0){
?????? $textTpl = "";
?????? return sprintf($textTpl, $obj->FromUserName, $obj->ToUserName, time(), $content,$flag);
????? }
??
?? //簽名驗證函數
?? 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;
?????? }
?? }
}
《PHP實例:php實現基于微信公眾平臺開發SDK(demo)擴展的方法》是否對您有啟發,歡迎查看更多與《PHP實例:php實現基于微信公眾平臺開發SDK(demo)擴展的方法》相關教程,學精學透。維易PHP學院為您提供精彩教程。