diff --git a/config/kefu.mysql.cluster.php b/config/kefu.mysql.cluster.php new file mode 100644 index 0000000..0eebe37 --- /dev/null +++ b/config/kefu.mysql.cluster.php @@ -0,0 +1,18 @@ + 1, + 'host' => '127.0.0.1', + 'port' => 3306, + 'user' => 'root', + 'passwd' => 'keji178', + ), + array( + 'instance_id' => 2, + 'host' => '127.0.0.1', + 'port' => 3306, + 'user' => 'root', + 'passwd' => 'keji178', + ), +); diff --git a/config/kefu.redis.cluster.php b/config/kefu.redis.cluster.php new file mode 100644 index 0000000..c260a30 --- /dev/null +++ b/config/kefu.redis.cluster.php @@ -0,0 +1,16 @@ + 1, + 'host' => '127.0.0.1', + 'port' => 6379, + 'passwd' => '' + ), + array( + 'instance_id' => 2, + 'host' => '127.0.0.1', + 'port' => 6379, + 'passwd' => '' + ), +); diff --git a/webapp/controller/KefuController.class.php b/webapp/controller/KefuController.class.php index 1fdb27d..efdbb7a 100644 --- a/webapp/controller/KefuController.class.php +++ b/webapp/controller/KefuController.class.php @@ -1,69 +1,71 @@ valid(); + public function checkServer() // 校验服务器地址URL + { + if ( isset($_GET['echostr'])) { + $this->valid(); } else { - $this -> responseMsg(); + $this->responseMsg(); } } + public function valid() { - $echoStr = $_GET ["echostr" ]; - if ( $this -> checkSignature()){ - header ('content-type:text' ); - echo $echoStr ; - exit ; + $echoStr = $_GET['echostr']; + if ( $this->checkSignature()){ + echo $echoStr; + exit; } else { - echo $echoStr .'+++'. TOKEN; - exit ; + echo $echoStr . '+++' . TOKEN; + exit; } } + private function checkSignature() { - $signature = $_GET ["signature" ]; - $timestamp = $_GET ["timestamp" ]; - $nonce = $_GET ["nonce" ]; + + $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 ); + error_log('token:' . $token); + $tmpArr = array ( $token , $timestamp , $nonce ); + sort( $tmpArr , SORT_STRING); + $tmpStr = implode( $tmpArr ); + $tmpStr = sha1($tmpStr); + error_log('tmpStr:' . $tmpStr); + error_log('signature:' . $signature); if ( $tmpStr == $signature ){ - return true ; + return true ; } else { - return false ; + return false ; } } + public function responseMsg() { $postStr = $GLOBALS ["HTTP_RAW_POST_DATA" ]; if (! empty ( $postStr ) && is_string ( $postStr )){ - // 禁止引用外部xml实体 - //libxml_disable_entity_loader(true); - //$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $postArr = json_decode( $postStr , true ); - if (! empty ( $postArr ['MsgType']) && $postArr ['MsgType'] = = 'text'){ // 文本消息 + if (! empty ( $postArr ['MsgType']) && $postArr ['MsgType'] == 'text'){ // 文本消息 $fromUsername = $postArr ['FromUserName']; // 发送者openid $toUserName = $postArr ['ToUserName']; // 小程序id $textTpl = array ( - "ToUserName" =>$fromUsername , + "ToUserName" =>$fromUsername , "FromUserName"=> $toUserName , "CreateTime"=> time (), "MsgType"=>"transfer_customer_service", @@ -73,7 +75,7 @@ class KefuController { $fromUsername = $postArr ['FromUserName']; // 发送者openid $toUserName = $postArr ['ToUserName']; // 小程序id $textTpl = array ( - "ToUserName"=> $fromUsername , + "ToUserName"=> $fromUsername , "FromUserName"=> $toUserName , "CreateTime"=> time (), "MsgType"=>"transfer_customer_service", @@ -82,63 +84,72 @@ class KefuController { } elseif ( $postArr ['MsgType'] == 'event' && $postArr ['Event']=='user_enter_tempsession'){ // 进入客服动作 $fromUsername = $postArr ['FromUserName']; // 发送者openid $content = '您好,有什么能帮助你?' ; - $data = array ( - "touser"=> $fromUsername , + $data = array ( + "touser"=> $fromUsername , "msgtype"=>"text", "text"=> array ("content"=> $content ) ); $json = json_encode( $data ,JSON_UNESCAPED_UNICODE); // php5.4+ - $access_token = $this -> get_accessToken(); - /* + $access_token = $this->getAccessToken(); + /* * POST发送https请求客服接口api */ $url = " https :// api . weixin . qq . com / cgi - bin / message / custom / send ? access _ token = ". $access_token ; - // 以'json'格式发送post的https请求 - $ curl = curl_init(); + + + // 以'json'格式发送post的https请求 + $curl = curl_init(); curl_setopt( $curl , CURLOPT_URL, $url ); curl_setopt( $curl , CURLOPT_POST, 1); // 发送一个常规的Post请求 curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER, FALSE ); curl_setopt( $curl , CURLOPT_SSL_VERIFYHOST, FALSE ); - if (! empty ( $json )){ + if (! empty ( $json )){ curl_setopt( $curl , CURLOPT_POSTFIELDS, $json ); } curl_setopt( $curl , CURLOPT_RETURNTRANSFER, 1 ); - // curl_setopt($curl, CURLOPT_HTTPHEADER, $headers ); + // curl_setopt($curl, CURLOPT_HTTPHEADER, $headers ); $output = curl_exec( $curl ); - if (curl_errno( $curl )) { - echo 'Errno'.curl_error( $curl ); // 捕抓异常 + if (curl_errno( $curl )) { + echo 'Errno'.curl_error( $curl ); // 捕抓异常 } curl_close( $curl ); - if ( $output == 0 ){ - echo 'success'; exit ; + if ( $output == 0 ){ + echo 'success'; exit ; } } else { - exit ('aaa' ); + exit ('aaa' ); } } else { - echo "" ; - exit ; + echo "" ; + exit ; } } + /* 调用微信api,获取access_token,有效期7200s -xzz0704 */ - public function get_accessToken(){ - /* 在有效期,直接返回access_token */ + public function getAccessToken(){ + /* 在有效期,直接返回access_token */ if (S('access_token' )){ - return S('access_token' ); + return S('access_token' ); } /* 不在有效期,重新发送请求,获取access_token */ else { - $url = ' https :// api . weixin . qq . com / cgi - bin / token ? grant _ type = client _ credential & appid = wx6056 ** **& secret = 30e46f3ef07b **** ' ; - $result = curl_get_https( $url ); - $res = json_decode($result , true ); // json字符串转数组 + $appid = SHAOWEI_APPID; + $appkey = PRIVATE_KEY; + $url = "https://api.weixing.qq.com/cgi-bin/token?;grant_type=client_credential&appid=$appid&secret=$appkey"; + $response = ''; + if (!phpcommon\HttpClient::get($url, $params, $response)) { + phpcommon\sendError(ERR_RETRY, '系统繁忙'); + return; + } + $res = json_decode($response, true ); if ( $res ){ S( 'access_token', $res ['access_token'],7100 ); - return S('access_token' ); + return S('access_token' ); } else { - return 'api return error' ; + return 'api return error' ; } } }