基于微信公众平台开发SDK(demo)扩展例子
该扩展基于官方的微信公众平台SDK,这里只做了简单地封装,实现了一些基本的功能,如天气查询,翻译,自动聊天机器人,自定义菜单接口)仅供学习之用.代码如下:
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 (! empty empty ( $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 == '天气' && ! empty empty ( $zone )){ $zoneArr =json_decode( file_get_contents ( 'http://api.k780测试数据:88/?app=weather.city&format=json' ),true); $zoneArr = $zoneArr [ 'result' ]; $cityId = '' ; foreach ( $zoneArr as $value ){ if ( $zone == $value [ 'citynm' ]){ $cityId = $value [ 'weaid' ]; break ; } } if (! empty empty ( $cityId )){ $data = file_get_contents ( "http://api.k780测试数据: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 == '翻译' && ! empty empty ( $words )){ $data = file_get_contents ( 'http://fanyi.youdao测试数据/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://HdhCmsTestxiaojo测试数据/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 (! empty empty ( $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测试数据/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测试数据/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测试数据/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 ; } //处理事件消息 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" ]; //开源代码phpfensi测试数据 $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; } } }查看更多关于基于微信公众平台开发SDK(demo)扩展例子 - php高级的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did30396