该扩展基于官方的微信公众平台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 (!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_setopt($ch, CURLOPT_URL,'http://www.xiaojo.com/bot/chata.php');//抓取指定网页
- 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_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) ;
- 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;
- }
-
-
-
- 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;
- }
- }
- }
|