12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340 |
- <?php
- //echo checkSignature;
-
- /* 本代码已经申请著作权保护
- 盗版必究
- 法律顾问:北京东环律所事务所
-
- //这是多客服---小程序接口 .
-
-
- CopyRight 2017 www.17cheng.cn All Rights Reserved
- */
- header('Content-type:text/json');
- $stime=microtime(true);
-
- ini_set("display_errors", "off");
-
- define("TOKEN", "xcxkefu");
- $wechatObj = new wechatCallbackapiTest();
- if (isset($_GET['echostr'])) { //判断是不是首次验证
- $wechatObj->valid();
- }else{
- $wechatObj->responseMsg();
- }
- class wechatCallbackapiTest
- {
- public function valid()
- {
- $echoStr = $_GET["echostr"];
- if($this->checkSignature()){
- echo $echoStr;
- exit;
- }
- }
- private function checkSignature()
- {
- $signature = $_GET["signature"];
- $timestamp = $_GET["timestamp"];
- $nonce = $_GET["nonce"];
- $token = TOKEN;
- $tmpArr = array($token, $timestamp, $nonce);
- sort($tmpArr);
- $tmpStr = implode( $tmpArr );
- $tmpStr = sha1( $tmpStr );
- if( $tmpStr == $signature ){
- return true;
- }else{
- return false;
- }
- }
- public function responseMsg()
- {
- // $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取数据
- $postStr = file_get_contents("php://input");
- // logger(time().$postStr);
- $xcx=false;//true 是小程序
- if (!empty($postStr)){
- //$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
- if($xcx){
- $postObj =json_decode($postStr);}
- else{
- $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
- }
-
- $fromUsername = trim($postObj->FromUserName); //openid
- $toUsername = trim($postObj->ToUserName);
- $tousernamebak = $toUsername;
- $keyword = trim($postObj->Content);
- $sessionFrom = trim($postObj->SessionFrom);
- $sessionFrom.='|';
- $MsgType = $postObj->MsgType;//消息类型 text event
- $Event = $postObj->Event;
- if ($Event == "CLICK") {
- $EventKey = $postObj->EventKey;
- $MsgType='text';
- $keyword=trim($EventKey);//修复公众号问题.
- logger('event:'.$Event.$MsgType.'key:'.$keyword);
-
- }
- $json = file_get_contents('json/'.$toUsername.'.json');
- $arr = json_decode($json,true);
- $uniacid = $arr['uniacid'];
-
- $mang= $arr['mang'];
- if(empty($mang)){$mang='客服忙,已存入留言板';}
- $paiduile= $arr['paidui'];
- if(empty($paiduile)){$paiduile='排队中,请稍候.';}
- $kaishi= $arr['kaishi'];
- if(empty($kaishi)){$kaishi='你好,有什么可以帮到你的?';}
-
-
- //echo $uniacid;
- $website = $arr['website'];
- define("APPID", $arr['APPID']);
- define("APPSECRET", $arr['APPSECRET']);
- $fromuserid = $fromUsername;//
- $myopenid = trim($arr['openids']);//管理员id
- $Atoken = getToken(APPID,APPSECRET,$toUsername);
- $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$Atoken;
- if ($keyword=='openid'){
- sendmsg($fromuserid,$MsgType,$fromuserid,'',$url);//给用户发消息.
- exit;
- }
- //echo $Atoken ;
- $json = file_get_contents("json/".$uniacid."_kefu.json");
- $kefuarr = json_decode($json,true); //客服列表
- ////////////////////////////////////////////////////////动作提示//////////////////////////////
- if ($MsgType == "event") {
- $event = $postObj->Event;
-
- if($event=='VIEW'){exit;}
- if($event=='LOCATION'){exit;}
- if(array_key_exists($fromuserid,$kefuarr)){
- logger($MsgType.'是客服.');
- $paiduinumber=count(file('json/'.$uniacid.'_paidui.json'));
- $liuyannumber=count(file('json/'.$toUsername.'_lishi.json'));
- $kehuopenid= $kefuarr[$fromuserid];
-
- if (substr($kehuopenid,0,1)=='o'){
- $users=getuser($uniacid,$kehuopenid,$nickname,$website);
- $zhuangtai='当前聊天:['.$users['id'].']'.$users['nickname'];
- }else{
- $zhuangtai='休息中';
- if ($kehuopenid=='空闲') { $zhuangtai='当前空闲,有客户会立即进入聊天.';}
- if ($kehuopenid=='隐身') { $zhuangtai='当前隐身,客户可主动指定聊天.';}
- }
-
- $tongzhi='排队人数:'. $paiduinumber.'\n'.'留言条数:\n'. $liuyannumber.' \n'.$zhuangtai;
- $data1='{ "touser":"'.$fromuserid.'", "msgtype":"text",
- "text": { "content":"[客服上线工作提醒]\n '.$tongzhi.' " } }';
- $aaa = http_post_data($url, $data1); //减少骚扰 不通知
- exit;
- }
- //在线客服代码
-
- //继续上一次的对话
- $Kefuopenid=array_search($fromuserid,$kefuarr,true);
- if($Kefuopenid<>''){
- sendmsg($fromuserid,'text','客服还在,直接回复继续上次的对话','',$url);//给用户发消息.
- exit;
-
-
- }else
- {// 踢出超时的 .
- chaoshile($uniacid,300,$website,$url,$fromuserid,$arr['结束语']);
- }
-
-
- if($xcx){
- if ($sessionFrom<>'|'){
- $nickname=explode("|",$sessionFrom,-1)[0] ;
- if ($nickname=="wxapp"){$nickname="";}
- }
-
-
- logger('findname:'. $nickname);
-
- $tablename=trim($arr['tablename']);//管理员id
- if ($tablename<>''){
- $culname=$arr['culname'];
- $findname=$arr['findname'];
- $nickname= Finduser($uniacid,$tablename,$culname,$fromUsername,$findname,$website);
-
- if(!$nickname)
- {
- $nickname ='';
- }
-
- }
-
- $userinfo = getuser($uniacid,$fromUsername,$nickname,$website);
- } else{
- $user = getwxinfo($Atoken,$fromUsername);//微信公众号代码
- $userinfo = getuser($uniacid,$fromUsername,$user['nickname'],$website);//微信公众号代码
-
- }
-
- //
-
-
- // 下一次增加在线客服提示 这里不提示先 .等下一版本.
- if ($arr['Gappid']<>''){ //网页授权
- // if((substr($userinfo['nickname'],0,6)=='会员')){
- $sqstr1=$website."addons/qidong_app/intenet.php?zfopenid=".$fromUsername."&toUsername=".$toUsername."&appid=".$arr['Gappid'];
- $sqstr="\n<a href='".$sqstr1."'>点链接快速接通客服</a>";
- // }
- }
- //logger('是客户:.'.$fromUsername);
- // if($event=='unsubscribe'){ $eve='取消关注'; exit; };//公众号专用
- //logger($fromuserid.'-'.$arr['默认'].$uniacid.$url);
-
- $zxkefu="\n在线客服:回复名字接通\n".zxkefu($uniacid,$kefuarr,$sqstr1);
- if($userinfo['lastliao']<>null){$zxkefu.="\n上次接待客服是:".$userinfo['lastliao'];}
-
- $zxkefu.=$sqstr;//[屏蔽一下 下一版发布.]
-
- $json = file_get_contents("json/".$uniacid."_paidui.json");
- $paiduiarr = json_decode($json,true);
- $qianmian=count($paiduiarr);
- $zxkefu.="\n前面有".$qianmian."人排队";
- zhishiku($fromuserid,trim($arr['默认']),$uniacid,$url,$zxkefu,$userinfo) ;
-
- $caidan=trim($arr['Gjsonid']);//进入通知:
- if ($caidan<>''){
- $Btoken=getToken($arr['Gappid'],$arr['GAPPSECRET'],$caidan);//修正token时间问题
- // logger("通知下发:".$caidan_arr['APPID'].'-状态:'.$caidan_arr['openids']);
- $url1 = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$Btoken;
- $data1='{ "touser":"'.$arr['Gopenids'].'", "msgtype":"text",
- "text": { "content":"[小程序'.$uniacid.'进入提醒]\n '.$userinfo['nickname'].' " } }';
- $aaa = http_post_data($url1, $data1); // //通知到公共号
- // logger($data1.$aaa);
- }
-
-
- exit;
- }
-
-
-
-
-
- ////////////////////////////////////////////////结束动作///////////////////////////////
-
-
- //print_r($kefuarr);
- //$arr= array_keys($arr1);//openid
- //处理客服消息模块开始
- if(array_key_exists($fromuserid,$kefuarr)){//客服消息处理
- if (substr($keyword,0,10)=='@所有人'){//@所有人
- atsuoyouren($uniacid,$website,$keyword,$fromuserid,$url,$toUsername);
- exit;
- }
- //处理@----某人命令
- if(substr($keyword,0,1)=='@'){//@某人
- $stri=0;
- $stri= stripos($keyword,':');
- if ($stri==0){$stri= stripos($keyword,' ') ;}
- if ($stri==0){$stri= stripos($keyword,':') ;}
- $nid=substr($keyword,1,$stri-1); //@12:=>12
-
- if (is_numeric($nid)){
- atmouren($keyword,$uniacid,$website,$fromuserid,$url,$kefuname);
- }else{
- $say=trim(substr($keyword,$stri+1));//发送的内容:
- $kefulist = json_decode(file_get_contents("../qidong_app/json/".$uniacid."_kefulist.json"),true);
- $tokefuopenid=array_search($nid,$kefulist,true);//找到客服id
- if(!empty($tokefuopenid)){
- $kefuname = $kefulist[$fromuserid];
- sendmsg($tokefuopenid,'text',"[同事消息]\n".$kefuname.':'.$say,'',$url);//给用户发消息.
- }else{
-
- sendmsg($fromuserid,'text','消息格式错误','',$url);//给用户发消息.
- }
-
- }
-
-
- exit;
- }
-
- if(substr($keyword,0,1)=='*'){//@转接
- $kefulist = json_decode(file_get_contents("../qidong_app/json/".$uniacid."_kefulist.json"),true);
- $kefu = json_decode(file_get_contents("../qidong_app/json/".$uniacid."_kefu.json"),true);
-
- $tokefuname=substr($keyword,1);//李律师
- $tokefuopenid=array_search($tokefuname,$kefulist,true);//找到客服id
- if(!empty($tokefuopenid)){
- $kefuname = $kefulist[$fromuserid];//当前客服名
- $kehuopenid = $kefu[$fromuserid];//当前客户openid
- if(substr($kefu[$tokefuopenid],0,1)=="o"){
- sendmsg($fromuserid,'text',$tokefuname.'正忙.','',$url);//给用户发消息.
- }else{
- $kefu[$tokefuopenid]=$kehuopenid;
- $kefu[$fromuserid]="空闲";
- $res=file_put_contents("../qidong_app/json/".$uniacid."_kefu.json", json_encode($kefu));
- sendmsg($tokefuopenid,'text',$kefuname.'转接来新客户,请接待.','',$url);//给用户发消息.
-
- sendmsg($fromuserid,'text',$tokefuname.'转接'.$kefuname.'成功.','',$url);//给用户发消息.
-
- }
- exit;
- }
-
- }
-
- if($keyword=='p'){$keyword='下一个'; }
- if($keyword=='m'){$keyword='排队'; }
- if($keyword=='0'){$keyword='清零'; }
- //客服来的消息处理
- $kehuopenid= $kefuarr[$fromuserid];//
- // echo '找到客户:'.$kehuopenid;
- //判断是不是有客户
- if (substr($kehuopenid,0,1)=='o'){
- //有客户 ,直接发消息过去: 判断消息是不是@
-
- if (glymingling($uniacid,$fromuserid,$kehuopenid,$keyword,$arr['结束语'],$kefuarr,$url,$toUsername)){//是管理员命令
- // echo '命令!';
- }else{
- //查找客服信息.
- $kefulist = json_decode(file_get_contents("json/".$uniacid."_kefulist.json"),true);
- $kefuname = $kefulist[$fromuserid];
- // echo '给:'.$kefuarr[$fromuserid].'发内容'.$keyword;
- $bbb=sendmsg($kehuopenid,$MsgType,$kefuname.':'.$keyword,$postObj,$url);//给用户发消息.
- $a=Inserthistory($toUsername,$uniacid,$fromuserid,$kefuname,$kehuopenid,$users['nickname'],$keyword,$postObj,json_decode($bbb, true)['errcode'],$website);
- //增加判断.消息失败提示.
- if (json_decode($bbb, true)['errcode']<>0){
- $data2='{ "touser":"'.$fromUsername.'", "msgtype":"text",
- "text": { "content":" 客服离开... 消息已存入信箱.'.json_decode($bbb, true)['errcode'].'" } }'; //当没有约定好的回复时,这么回复。
-
- sendmsg($fromUsername,'text','消息失败,客户可能已经离开了.','',$url);//给用户发消息.
- // savejson('json/'.$toUsername.'_lishi.json', '@'.$paidui['id'].'_'.$content.''.$keyword );
- }
- //sendmsg($openid,$msgtype,$keyword,$postObj,$url)
- }
-
- }else{
- //没客户接待时,可能发的命令:下一个.
- if (glymingling($uniacid,$fromuserid,$kehuopenid,$keyword,$arr['结束语'],$kefuarr,$url,$toUsername,$website)){
- //echo '是命令!';zaij
- }else{
- // echo '给:'.$kefuarr[$fromuserid].'发内容'.$keyword;
- // 空闲时 可以玩玩素材库 .
- if (!zhishiku($fromuserid,$keyword,$uniacid,$url,'',$userinfo)){
- sendmsg($fromuserid,'text','暂无接待客户,可发送命令下一个接通.','',$url,$toUsername,$website);//给用户发消息.
- }
- }
-
- //客服状态. kong mang 判断是不是要上班?或者其他命令 比如 下一个 等.
-
- }
-
- }else{
- // echo "not found kefu--";//不是客服 则看谁空闲? 规则 先找老客服 .
- //反查是否在队列
- //先看客户是不是...选了指定的客服. 客服小李 正在咨询的时候 是不能调出的.除非.
-
- $Kefuopenid=array_search($fromuserid,$kefuarr,true);
- if($Kefuopenid<>'')
- {
- // echo "这是用户,正在咨询的客服是:";
- // 用户发 再见 主动离线 . 更新客服列表 . 告诉客服 告诉客户
-
- if (substr($keyword,0,6)=='再见'){
- // sendmsg($fromuserid,'text',$arr['结束语'],'',$url);//说再见.
- jieshuyu($arr['结束语'],$uniacid,$fromuserid,$website,$url);
- $json = file_get_contents("json/".$uniacid."_kefulist.json");//客服详情页
- $kefulist = json_decode($json,true);
- $kefuname = $kefulist[$Kefuopenid];
- edituser($uniacid,$fromuserid,'',$website,$avartar,$zhuangtai,$kefuname);
- $json = file_get_contents("json/".$uniacid."_paidui.json");
- $paiduinum = count(json_decode($json,true));
- sendmsg($Kefuopenid,'text','当前客户已经离开,发下一个接通.当前有'.$paiduinum.'人排队.','',$url);//说再见.
- $kefuarr[$Kefuopenid]='空闲';
- //建立对接 同时通知双方. 发两次消息.
- unlink('json/'.$uniacid.'_kefu.json');
- $res=file_put_contents("json/".$uniacid."_kefu.json", json_encode($kefuarr));
- }else{
- $users=getuser($uniacid,$fromuserid,$nickname,$website);
- //记录客户的消息 =@1
- $bbb=sendmsg($Kefuopenid,$MsgType,'['.$users['id'].']'.$users['nickname'].':'.$keyword,$postObj,$url);
- $a=Inserthistory($toUsername,$uniacid,$Kefuopenid,$kfname,$fromuserid,$users['nickname'],$keyword,$postObj,json_decode($bbb, true)['errcode'],$website);
- //记录时间 ---
- $json = file_get_contents("json/".$uniacid."_time.json");
- $kefutime = json_decode($json,true);
- $kefutime[$Kefuopenid]=time();
- $res=file_put_contents("json/".$uniacid."_time.json", json_encode($kefutime));
-
- //记录时间结束
- if (json_decode($bbb, true)['errcode']<>0){
- logger('开始通知');
- if(!file_exists('json/'.$toUsername.'_lishi.json')){
- logger('开始通知1'.$arr['Mobanid']);
- if($arr['Mobanid']<>''){//判断 如果是xcx 就直接推,如果不是 则用另外的.
-
- $template_id=$arr['Mobanid'];
- logger('开始通知2'.$template_id);
- if($xcx){$jsonid=$arr['Gjsonid'];
- $jopenid=$arr['Gopenids'];
- logger('开始通知21:'.$jopenid);
- $MBtoken=getToken($arr['Gappid'],$arr['GAPPSECRET'],$arr['Gjsonid']);
- }
- else{
- $jsonid=$ToUserName;
- $MBtoken=$Atoken;
- $jopenid=$Kefuopenid;}
- logger('MBtoken:'.$MBtoken);
- if($MBtoken<>''){
-
- $data='{
- "first": {
- "value":"你好,应用编号:'.$uniacid.'有用户咨询,请尽快处理",
- "color":"#FF8247"
- },
- "keyword1": {
- "value":"客户信息:'.$nickname.'",
- "color":"#173177"
- },
- "keyword2": {
- "value":"用户发送:'.$keyword.'",
- "color":"#173177"
- },
- "remark": {
- "value":"应用客服消息内回复:看留言 查看",
- "color":"#173177"
- }
- }'; logger('jopenid:'.$jopenid);
- $bbb=sendMBmsg($MBtoken,$jopenid,$template_id,'','','',$data);
- logger($bbb);
- $tongzhi=json_decode($bbb,true)['errcode'];
- if ($tongzhi==0){$tongzhi='已通知到管理员,请稍等.';}
- // logger($tongzhi);
- }
- }
- }
-
-
-
-
- sendmsg($fromUsername,'text',$mang,'',$url);//给用户发消息.
- // savejson('json/'.$toUsername.'_lishi.json', '@'.$users['id'].'_'.$users['nickname'].''.$keyword );
- file_put_contents('json/'.$toUsername.'_lishi.json', '@'.$users['id'].'_'.$users['nickname'].''.$keyword .PHP_EOL, FILE_APPEND);
- }
-
- }
- }else{//不是客服 那就是用户
-
- if ( strpos($arr['kefustr'],$keyword)>0){//客户发张三
- $kongkefu='';
- $zhiding=1;
- }else{
- $kongkefu=array_search('空闲',$kefuarr,true);
- }
- if($kongkefu<>''){
-
- if(zhishiku($fromuserid,$keyword,$uniacid,$url,'',$userinfo)){
- exit;
- }
-
-
-
- //echo '当前有空的客服:';
- //echo $kongkefu;
- $kefuarr[$kongkefu]=$fromuserid;
- //建立对接 同时通知双方. 发两次消息.
- unlink('json/'.$uniacid.'_kefu.json');
- $res=file_put_contents("json/".$uniacid."_kefu.json", json_encode($kefuarr));
- //增加获取用户信息功能. 没排队 直接进入 需要查客户信息.
- $users=getuser($uniacid,$fromuserid,$nickname,$website);
-
-
-
- sendmsg($kongkefu,'text',$users['id'].$users['nickname'].':'.$keyword,'',$url);//通知客服
- $kefulist = json_decode(file_get_contents("json/".$uniacid."_kefulist.json"),true);
- $kefuname = $kefulist[$kongkefu];
- sendmsg($fromuserid,'text',$kefuname.':'.$kaishi,'',$url);//通知客服
- $tongzhiadmin=$kefuname.' 接入了新客户.['.$users['id'].']'.$users['nickname'];
- }else
- { //echo '当前客服都忙:/或者客户指定了客服.';
- //检查关键词回复 如果有则回复关键词
- if($MsgType=='text'){
- if (!zhishiku($fromuserid,$keyword,$uniacid,$url,'',$userinfo)){
- //当客服发送 指定客服的指令时 .如发 客服1
- if ($zhiding==1){//客户主动选择客服.
- $zd=zhaokefumingling($fromuserid,$uniacid,$keyword,$url,$kefuarr,$website);
- if($zd){ $tongzhiadmin=$keyword.' 被客户点名. ';}
- }else{
- $paidui=paidui($uniacid,$fromuserid,$website);//排队语自己组织.
- $daohang=daohang($uniacid);
- $daohang="\n先看看下面能不能帮到你,可直接回复数字\n".$daohang;
- if ($arr["其他"]=='人工+机器人'){
- $daohang="\n智能客服:".jiqiren($keyword,$fromuserid);
- }
- sendmsg($fromuserid,'text',$paiduile.$daohang,'',$url);//下发排队情况给用户.
- if($paidui<>'排队中,请耐心等待.'){
- $tongzhiadmin='有用户来:'.$keyword." \n排队:".$paidui;
- }else{
-
- chaoshile($uniacid,300,$website,$url,$fromuserid,$arr['结束语']);
- }
- }
- }
- }else{//用户发送其他信息怎么办? 通知他排队.
- $paidui=paidui($uniacid,$fromuserid,$website);//排队语自己组织.
- sendmsg($fromuserid,'text',$paidui,'',$url);//下发排队情况给用户.
- sendmsg($myopenid,$MsgType,'其他类型文件',$postObj,$url);//其他文件 直接通知管理员..
- }
-
- // 是否在排队? 用数组键值查询, 没有.插入排队表 .有 返回排队顺序?
-
- }
-
- } //下发给总管理员通知;
- if ($tongzhiadmin<>''){
- $data1='{ "touser":"'.$myopenid.'", "msgtype":"text",
- "text": { "content":"[管理员提醒:]\n'.$tongzhiadmin.'" } }';
- $aaa = http_post_data($url, $data1); //减少骚扰 不通知
- }
-
- }
- //处理客服消息模块结束.
-
-
-
- }else{///////////////////////////////////////////////////////////////
- echo "";
- exit;
- }
- }
- }
-
-
- function zhishiku($fromuserid,$keyword,$uniacid,$url,$addstr,$userinfo){
- //知识库处理模块
- //echo '<br>知识库模块<br>'.$keyword.$uniacid;
- $json = file_get_contents('json/'.$uniacid.'_keywords.json');//读取key列表
- $keys = json_decode($json,true);
- $json = file_get_contents('json/'.$uniacid.'_keys.json');//读取数字key列表
- $numkeys = json_decode($json,true);
- if(is_numeric($keyword)){
- $send=$keys[$numkeys[$keyword]];
- }else {
- $send=$keys[$keyword]; //$keys['关于我们'];
- }
- if ( $send<>'' ) { //判断是否是知识库设置字段
- if ($send['link']['title']!=''){
- $send['link']['title']=str_replace('id',$userinfo['id'],$send['link']['title']);
- $send['link']['title']=str_replace('[name]', trim($userinfo['nickname']),$send['link']['title']);
- }
- if ($send['miniprogrampage']['title']!=''){
- $send['miniprogrampage']['title']=str_replace('id',$userinfo['id'],$send['miniprogrampage']['title']);
- $send['miniprogrampage']['title']=str_replace('[name]', trim($userinfo['nickname']),$send['miniprogrampage']['title']);
- }
- if ($send['news']['articles'][0]['title']!=''){
- // $send['news']['articles'][0]['title']=str_replace('id',$userinfo['id'],$send['news']['articles'][0]['title']);
- $str=json_encode($send['news']['articles']);
- $str=str_replace('[name]', trim($userinfo['nickname']),$str);
- $send['news']['articles']=json_decode($str,true);
-
- }
- if ($send['text']['content']!=''){
- $send['text']['content']=str_replace('[id]',$userinfo['id'],$send['text']['content']);
- $send['text']['content']=str_replace('[name]',trim($userinfo['nickname']),$send['text']['content']);
- $send['text']['content']=changeurl($send['text']['content']);
- $send['text']['content'].=$addstr;
- }
- $send['touser']=$fromuserid;
- $data=json_encode($send,JSON_UNESCAPED_UNICODE);
- $aaa = http_post_data($url, $data);
- $zt=json_decode($aaa, true)['errcode'];
- if ($zt!=0){//下发未成功
- $data='{ "touser":"'.$fromuserid.'", "msgtype":"text",
- "text": { "content":" 系统忙 错误代码: ' . $zt . ' " } }';
- $aaa = http_post_data($url, $data);
- }
- return true;
- }else{
- return false;//不是知识.
- }
- }
- function sendmsg($openid,$msgtype,$keyword,$postObj,$url){
- //消息处理模块.
- if($openid=='obW0e0QwzK2KTM3ueYbXS96GyomA'){
- $kf=' ,"customservice":
- {
- "kf_account": "kf2002@gh_4caa0ef9c5e1"
- }';}
- switch ($msgtype)
- {
- case 'text':
- $data1='{ "touser":"'.$openid.'", "msgtype":"text",
- "text": { "content":" '.$keyword.' " } '.$kf.' }';
- break;
- case 'image':
-
- $MediaId = $postObj->MediaId;
-
- $data1=' { "touser":"'.$openid.'", "msgtype":"image",
- "image": { "media_id":"'.$MediaId.'" }}';
- break;
- case 'voice':
-
- $MediaId = $postObj->MediaId;
-
- $Recognition = $postObj->Recognition;
- $data1=' { "touser":"'.$openid.'", "msgtype":"voice",
- "voice": { "media_id":"'.$MediaId.'" }}';
- break;
- case 'miniprogrampage':
- $data1='';
- break;
- case 'link':
- $baogao=' {
- "title": " '.$postObj->Title.'",
- "description": "'.$postObj->Description.'",
- "url": "'.$postObj->Url.'",
- "thumb_url": "http://'.$_SERVER['HTTP_HOST'].'/addons/qidong_app/icon.jpg"
- }';
- $data1='{ "touser":"'.$openid.'", "msgtype":"link", "link": '.$baogao.' }';
- break;
- default:
- $data1='';
- }
-
- $aaa = http_post_data($url, $data1);
- //echo '发送消息:'.$data1.$aaa;
- logger('@@@@@@@@'.$data1.$aaa);
-
- return $aaa;
- }
- function http_post_data($url, $data_string) {
-
- set_time_limit ( 0 );
- $curl = curl_init();
- curl_setopt($curl, CURLOPT_URL, $url);
- curl_setopt($curl, CURLOPT_HEADER, 0);
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//这个是重点。
- curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);
- curl_setopt($curl, CURLOPT_HTTPHEADER, array(
- 'Content-Type: application/json',
- 'Content-Length: ' . strlen($data_string))
- );
- $data = curl_exec($curl);
- curl_close($curl);
- return $data;
- }
-
- function zhaokefumingling($fromuserid,$uniacid,$keyword,$url,$kefuarr,$website){
- $kefulist = json_decode(file_get_contents("json/".$uniacid."_kefulist.json"),true);
- //$kefuname=substr($keyword,7);
- $Kefuopenid=array_search($keyword,$kefulist,true);//找到客服id
- if (substr($kefuarr[$Kefuopenid],0,1)=='o')//看客服状态 客服状态over
- {
- sendmsg($fromuserid,'text','客服忙,请稍后.','',$url);//下发排队情况给用户.
- return false;
- }else{//客服接入//
- if($Kefuopenid==''){
- sendmsg($fromuserid,'text','客服休息了.请稍后再试.','',$url);//下发排队情况给用户.
- return false;
- }else{//客服在,对接开始. 如果是排队发的 则删除排队.如果是没排队发的.则不排队.
-
- $kefuarr[$Kefuopenid]=$fromuserid;
- //建立对接 同时通知双方. 发两次消息.
- unlink('json/'.$uniacid.'_kefu.json');
- $res=file_put_contents("json/".$uniacid."_kefu.json", json_encode($kefuarr));
- //增加获取用户信息功能. 没排队 直接进入 需要查客户信息.
- $json = file_get_contents("json/".$uniacid."_paidui.json");
- $paiduiarr = json_decode($json,true);
- if(array_key_exists($fromuserid,$paiduiarr)){//如果在排队则..
- $uid=$paiduiarr[$fromuserid]['id'];
- $nickname=$paiduiarr[$fromuserid]['nickname'];
- unset($paiduiarr[$fromuserid]);//删除它
- $res=file_put_contents("json/".$uniacid."_paidui.json", json_encode($paiduiarr));
- }else{//没排队 .就是上来就发的. 新用户就注册 老用户就获取.
- $users=getuser($uniacid,$fromuserid,$nickname,$website);
- $uid=$users['id'];
- $nickname=$users['nickname'];
- }
- sendmsg($Kefuopenid,'text','['.$uid.']'.$nickname.':'.$keyword.' 你好','',$url);//通知客服
- // $kefuname = $kefulist[$Kefuopenid];
- sendmsg($fromuserid,'text',$keyword.':你好,有什么可以帮到你的?','',$url);//通知客服
- return true;
- }
- }
-
-
- }
- function atsuoyouren($uniacid,$website,$keyword,$myopenid,$url,$toUsername){
- //@所有人
- $huncun= json_decode(alluser($uniacid,$website),true);
- $gjz=substr($keyword,10,strlen(trim($keyword))-10);
- if (substr ($keyword, -1)=='#'){
- $gjz=str_replace('#','|',$gjz);
- }
- $baogao=' {
- "title": "代发列表已经准备好!点此群发",
- "description": "本次准备发送: '.$huncun['count'].' 请1分钟内点击,过期失效.",
- "url": "'.$website.'addons/qidong_app/qunfa.php?uniacid='.$uniacid.'&keyword='.$gjz.'&tousername='.$toUsername.'&t='.time().'",
- "thumb_url": "'.$website.'/addons/qidong_app/icon.jpg"
- }';
- $data1='{ "touser":"'.$myopenid.'", "msgtype":"link", "link": '.$baogao.' }';
-
- $aaa = http_post_data($url, $data1); //
-
-
-
-
- }
- function zxkefu($uniacid,$kefuarr,$sqstr1){//读取在线客服列表//下次升级点击接通??
- $json = file_get_contents("json/".$uniacid."_kefulist.json");//客服详情页
- $kefulist = json_decode($json,true);
- $kefuopenid= array_keys($kefulist);//kfuopenid
- $kefuall='';
- $i=0;
- foreach ($kefuopenid as $kefuopenid){ //群发--
- //$kfopenid=$arr;
-
- if(substr($kefuarr[$kefuopenid],0,1)=="o"){
- $zt='忙碌';
- }else{
- $zt=$kefuarr[$kefuopenid];
- }
- if ($zt<>'隐身'){
- $i++;
- //$sqstr=$website."addons/qidong_app/intenet.php?zfopenid=".$fromUsername."&toUsername=".$toUsername."&appid=".$arr['Gappid']."&kfname=".$kfname;
- //$sqstr="\n<a href='".$sqstr."'>点此快速接通客服</a>";
- //$sqstr1=$website."addons/qidong_app/intenet.php?zfopenid=".$fromUsername."&toUsername=".$toUsername."&appid=".$arr['Gappid']."&kfname=".$kfname;
- if(($sqstr1=='') or ($zt=='忙碌')){
- $kefuall=$kefuall." ".$kefulist[$kefuopenid]."[".$zt."]";
- }else{
- $sqstr="\n<a href='".$sqstr1."&kfname=".$kefulist[$kefuopenid]."&kfopenid=".$kefuopenid."'>".$kefulist[$kefuopenid]."</a>";
- $kefuall=$kefuall." ".$sqstr."[".$zt."]";
-
- }
- if(($i % 2)==0){ $kefuall.="\n";}
- // $kefuall=$kefuall.' <a href="#">'.$kefulist[$kefuopenid].'</a>['.$zt.']';
- }
-
- }
- //logger($kefuall);
- return $kefuall;
-
- }
- function atmouren($keyword,$uniacid,$website,$fromuserid,$url,$kefuname){
- $stri=0;
- $stri= stripos($keyword,':');
- if ($stri==0){$stri= stripos($keyword,' ') ;}
- if ($stri==0){$stri= stripos($keyword,':') ;}
- $nid=substr($keyword,1,$stri-1); //@12:=>12
- $say=trim(substr($keyword,$stri+1));//发送的内容:
- if($say==''){$say=$kefuname.'@你 ,客服上线了,邀请你进入会话.';}
- //判断say最后字符是# 则是关键词消息 991#
- $liuuser= hiuser($uniacid,$nid,$website);
- $result = substr ($say, -1); //当是# 关键字图文时 .
- if ($result=='#'){
- $json = file_get_contents('json/'.$uniacid.'_keywords.json');//读取key列表
- $keys = json_decode($json,true);
- $json = file_get_contents('json/'.$uniacid.'_keys.json');//读取数字key列表
- $numkeys = json_decode($json,true);
- $gjz=substr($say,0,strlen($say)-1);
- if(is_numeric($gjz)){
- $send=$keys[$numkeys[$gjz]];
- } else {
- $send=$keys[$gjz]; //$keys['关于我们'];
- }
- $send['touser']=$liuuser['openid'];
- $nickname=$liuuser['nickname'];
- if($nickname==''){$nickname='会员'.$liuuser['id'];}
- $send['link']['title']=str_replace('[id]',$liuuser['id'],$send['link']['title']);
- $send['link']['title']=str_replace('[name]', trim($nickname),$send['link']['title']);
- $data=json_encode($send,JSON_UNESCAPED_UNICODE);
- $bbb = http_post_data($url, $data);
- logger('单发:'.$gjz.'-'.$data);
- }else{
-
- sendmsg($liuuser['openid'],'text','['.$kefuname.'@你]:'.$say,'',$url);
- }
- if (json_decode($bbb, true)['errcode']==0)
- { $zt='送达';
- //对方正在输入...哈哈
- $data8='{ "touser":"'.trim($liuuser['openid']).'", "command":"Typing"}';
- $url8='https://api.weixin.qq.com/cgi-bin/message/custom/typing?access_token='.$Atoken;
- $bbb = http_post_data($url8, $data8);
- //logger($bbb);
- //结束输入判断.
- }else{
- $zt='失败,可能已经离线'.json_decode($bbb, true)['errcode']; };
-
- sendmsg($fromuserid,'text','[@'.$nid.'报告]:'.$zt,'',$url);
-
- //发送消息
-
- }
- function glymingling($uniacid,$openid,$kehuopenid,$keyword,$jsy,$kefuarr,$url,$toUsername,$website){
- //处理管理员命令 @某人命令?
- //echo '检查命令!';$
-
-
- if (strpos(',清零,下一个,隐身,看留言,上班,排队,@所有人,',$keyword)>0){
- //此处增加管理员命令列表处理.
- if($keyword=='看留言'){
- $json = file_get_contents('json/'.$toUsername.'_lishi.json');
- sendmsg($openid,'text','本次获取的内容,已清空留言板:\n'.$json,'',$url);
-
- unlink('json/'.$toUsername.'_lishi.json');
-
- }
- if($keyword=='排队'){
- $json = file_get_contents("json/".$uniacid."_paidui.json");
- $karr = json_decode($json,true);
- $pdrs=count($karr);
- sendmsg($openid,'text','排队人数:'.$pdrs,'',$url);//发排队人数.后面再做详情.??
- }
-
- if($keyword=='隐身'){
- $kefuarr[$openid]='隐身';
- $res=file_put_contents("json/".$uniacid."_kefu.json", json_encode($kefuarr));
- sendmsg($openid,'text','设置隐身成功. 可被点名进入聊天.不能自动进入聊天.','',$url);
-
- }
- if($keyword=='清零'){
- unlink('json/'.$toUsername.'_paidui.json');
- unlink('json/'.$toUsername.'_token.json');
- unlink('log.xml');
- if (!file_exists('json/'.$toUsername.'_paidui.json')){
- $t="清零成功!";
- }else{
- $t="清零失败,请检查目录权限是否设置为777!";
- }
- sendmsg($openid,'text',$t,'',$url);
-
- }
-
- if($keyword=='上班'){
- $kefuarr[$openid]='空闲';
- $res=file_put_contents("json/".$uniacid."_kefu.json", json_encode($kefuarr));
- sendmsg($openid,'text','设置上班成功. 可自动接入来访客户.','',$url);
-
- }
- if($keyword=='下一个'){
- //跟现在的说再见 ?再见语?
- $json = file_get_contents("json/".$uniacid."_kefulist.json");//客服详情页
- $kefulist = json_decode($json,true);
- $kefuname = $kefulist[$openid];
- if (substr($kehuopenid,0,1)=='o'){
- //回复图文消息.
- jieshuyu($jsy,$uniacid,$kehuopenid,$website,$url);
-
- edituser($uniacid,$kehuopenid,'',$website,$avartar,$zhuangtai,$kefuname);
- }
- //找到下一个客户?
- $json = file_get_contents("json/".$uniacid."_paidui.json");
- $paiduiarr = json_decode($json,true);
- $nextkh=array_shift($paiduiarr);//取出并从排队中删除第一个.
- if (substr($nextkh['openid'],0,1)=='o'){
-
- sendmsg($nextkh['openid'],'text',$kefuname.':你好,久等了.','',$url);//新用户你好.
- $userjson=json_encode($paiduiarr);
- $res=file_put_contents("json/".$uniacid."_paidui.json",$userjson);//更新排队数据.
- $kefuarr[$openid]=$nextkh['openid'];//保存新的用户进来.;
- sendmsg($openid,'text','['.$nextkh['id'].']'.$nextkh['nickname'].'已经进入聊天.','',$url);//
- $res=file_put_contents("json/".$uniacid."_kefu.json",json_encode($kefuarr));//更新客服数据.
- //$kefulist = json_decode(file_get_contents("json/".$uniacid."_kefulist.json"),true);
- //$kefuname = $kefulist[$fromuserid];
- //sendmsg($nextkh['openid'],'text',$kefuname.':你好久等了.','',$url);//
-
- }else{//已无排队用户.修正客服表 保存.告诉客服.
- $kefuarr[$openid]='空闲';
- $res=file_put_contents("json/".$uniacid."_kefu.json",json_encode($kefuarr));//更新客服数据.
- sendmsg($openid,'text','已无排队用户.你的状态目前是空闲.\n常用命令: 上班 隐身 排队.','',$url);//新用户你好.
- }
-
- }
- return true;
- }else
- {
- return false;
- }
-
- }
-
-
- function paidui($uniacid,$openid,$website){
- $json = file_get_contents("json/".$uniacid."_paidui.json");
- $kefuarr = json_decode($json,true);
- if(array_key_exists($openid,$kefuarr)){
- return '排队中,请耐心等待.';//排队中...
- }else{
- $user=getuser($uniacid,$openid,$nickname,$website);//获取用户信息
- $userinfo=array('id'=>$user['id'],
- 'nickname'=>$user['nickname'],
- 'beizhu'=>$user['beizhu'],
- 'openid'=>$openid);
- $kefuarr[$openid]=$userinfo;
- $userjson=json_encode($kefuarr);
- $res=file_put_contents("json/".$uniacid."_paidui.json",$userjson);
- $qianmian=count($kefuarr)-1;
- return '已接入客服中心,前面有'.$qianmian.'人';//排队数量
- }
- }
- function getuser($ucid,$openid,$nickname,$website)
- {
- ///先判断缓存文件是否存在
-
- $json = file_get_contents("json/".$ucid."_user.json");
- $userinfos = json_decode($json,true);
- // $userid=$userinfos[$openid]['id'];
- // echo '找到缓存表:'.$userid;
-
-
- if (!array_key_exists($openid,$userinfos)){
-
- $token_access_url = "{$website}/app/index.php?i=".$ucid."&c=entry&a=wxapp&do=getuser&m=qidong_app&openid=".$openid."&nickname=".$nickname;
- // echo $token_access_url;
- $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
- $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP
- $nickname= $result['data']['wxapp'][0]['nickname'];
- $beizhu= $result['data']['wxapp'][0]['zhuangtai'];
- $lastliao= $result['data']['wxapp'][0]['lastliao'];
- if (trim($nickname)==null) {
- $nickname='会员'.$result['data']['wxapp'][0]['id'];
- $isid=1;
- }
- $userid=$result['data']['wxapp'][0]['id'];
- $data = array(
- 'nickname' => $nickname,
- 'id' => $userid,
- 'beizhu' => $beizhu,
- 'lastliao'=> $lastliao
- );
- return $data ;
-
- }else
- {
- // echo '找到缓存 直接返回;';
- return $userinfos[$openid];
-
- }
-
-
- //缓存 先去判断文件是否存在 .
-
-
-
- }
- //去查询 用户表 或者 客服表 找到详细信息.
- // 输出 : 身份[客服 或 用户 ] 状态 [ 咨询中 | 排队中 ]
- //规则 聊天中 不能使用1 2 3 不去查询 . 都发给管理员 .
-
-
- function changeurl($a){
- $bi= strpos($a,'[[');
- if ($bi==0){
- return $a;
- }else{
- $ei= strpos($a,']]');
- $qb=substr($a,0,$bi);
- $eb=substr($a,$ei+2);
- $b=substr($a,$bi+2,$ei-$bi-2);
- $ci=strpos($b,'|');
- $add=substr($b,0,$ci);
- $herf=substr($b,$ci+1,strlen($b)-$ci);
- }
- return $qb."<a href='".$herf."'>".$add."</a>".$eb;
- }
-
- function getToken($appid,$appsecret,$jsonid){
-
- $file = file_get_contents("json/{$jsonid}_token.json",true);
- $result = json_decode($file,true);
- if (time() > $result['expires']){
- $data = array();
- $data['access_token'] = getNewToken($appid,$appsecret);
- $data['expires']=time()+7200;
- $jsonStr = json_encode($data);
- $fp = fopen("json/{$jsonid}_token.json", "w");
- fwrite($fp, $jsonStr);
- fclose($fp);
- return $data['access_token'];
- }else{
- return $result['access_token'];
- }
- }
- function getNewToken($appid,$appsecret){
- $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
- $access_token_Arr = https_request($url);
- return $access_token_Arr['access_token'];
- }
- function https_request ($url){
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- $out = curl_exec($ch);
- curl_close($ch);
- return json_decode($out,true);
- }
-
- function logger($log_content)
- {
- if(isset($_SERVER['HTTP_APPNAME'])){ //SAE
- sae_set_display_errors(false);
- sae_debug($log_content);
- sae_set_display_errors(true);
- }else{ //LOCAL
- $max_size = 500000;
- $log_filename = "log1.xml";
- if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
- file_put_contents($log_filename, date('Y-m-d H:i:s').$log_content."\r\n", FILE_APPEND);
- }
- }
-
-
- function getwxinfo($token,$openid){
- $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token={$token}&openid={$openid}&lang=zh_CN";
-
- // logger($url);
- $access_token_Arr = https_request($url);
- return $access_token_Arr;
- }
- function hiuser($ucid,$id,$website){
-
- $token_access_url = "{$website}/app/index.php?i=".$ucid."&c=entry&a=wxapp&do=getopenid&m=qidong_app&id=".$id;
-
- $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
- $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP
- $data=$result['data'][0] ;
-
- return $data ;
- }
- function alluser($ucid,$website){
-
- $token_access_url = "{$website}/app/index.php?i=".$ucid."&c=entry&a=wxapp&do=Getallopenid&m=qidong_app";
-
- $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
- $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP
- $data=$result['data'] ;
-
- return json_encode($data) ;
- }
-
- function edituser($ucid,$openid,$nickname,$website,$avartar,$zhuangtai,$lastliao) //改名取号
- {
- $token_access_url = "{$website}/app/index.php?i=".$ucid."&c=entry&a=wxapp&do=edituser&m=qidong_app&openid=".$openid."&nickname=".$nickname."&avartar=".$avartar."&lastliao=".$lastliao; //zhuangtai
- // echo $token_access_url;
- // exit;
- $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
- $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP
- $data=$result['data'];
- if ($data==1){$data='改名成功!';}
- else{$data='改名失败!';}
- return $data ;
- }
- function chaoshile($uniacid,$chaoshi,$website,$url,$fromuserid,$jsy){
- //超时自动退出 读取时间表 读取客服表 判断时间 超过的 ->设置成空闲 .给用户发消息超时退出.
- $json = file_get_contents('json/'.$uniacid.'_time.json');//读取key列表
- $kefutime = json_decode($json,true);
- $json = file_get_contents('json/'.$uniacid.'_kefu.json');//读取数字key列表
- $kefustr = json_decode($json,true);
- $arr = array_keys($kefutime);//openid
- $kefulist = json_decode(file_get_contents("json/".$uniacid."_kefulist.json"),true);
- foreach ($arr as $arr){
- $kftime=$kefutime[$arr]+$chaoshi;
- if (substr($kefustr[$arr],0,1)=="o"){
- if ($kftime<time()){
- //给老客户发信息
- $kefutime[$arr]=time();//修改时间.
- jieshuyu($jsy,$uniacid,$kefustr[$arr],$website,$url);
-
- $kefuname = $kefulist[$arr];
- edituser($uniacid,$kefustr[$arr],'',$website,$avartar,$zhuangtai,$kefuname);
- //设置新标签 查找排队
- $paiduinumber=count(file('json/'.$uniacid.'_paidui.json'));
- if ($paiduinumber==0){
- $kefustr[$arr]='空闲';}
- else{
-
- $json = file_get_contents('json/'.$uniacid.'_paidui.json');//读取key列表
- $paiduiarr = json_decode($json,true);
- $nextkh=array_shift($paiduiarr);//取出并从排队中删除第一个.
- if(substr($nextkh['openid'],0,1)=='o'){
- sendmsg($nextkh['openid'],'text',$kefuname.':你好,久等了.','',$url);//新用户你好.
- $kefustr[$arr]=$nextkh['openid'];//保存新的用户进来.;
- sendmsg($arr,'text','['.$nextkh['id'].']'.$nextkh['nickname'].'已经进入聊天.','',$url);//
- // $res=file_put_contents("json/".$uniacid."_kefu.json",json_encode($kefuarr));//更新客服数据.
- }else{
- $kefustr[$arr]='空闲';
-
- }
- $userjson=json_encode($paiduiarr);
- $res=file_put_contents("json/".$uniacid."_paidui.json",$userjson);//更新排队数据.
-
-
- }
- }//结束判断
- }//结束判断o
- }
- $res=file_put_contents("json/".$uniacid."_kefu.json", json_encode($kefustr));
- $res=file_put_contents("json/".$uniacid."_time.json", json_encode($kefutime));
-
- }
- function daohang($uniacid){
- $json = file_get_contents('json/'.$uniacid.'_keywords.json');//读取key列表
- $keys = json_decode($json,true);
- $json = file_get_contents('json/'.$uniacid.'_keys.json');//读取数字key列表
- $numkeys = json_decode($json,true);
- $arr= array_keys($numkeys);
- $i=0;
- foreach ($arr as $arr) {
- $daohang.=$arr.':'.changeurl($numkeys[$arr]) .'\n';
- $i++;
- if ($i>9){break;};
- }
- return $daohang;
-
-
- }
- function jieshuyu($bye,$uniacid,$openid,$website,$url){
- if(is_numeric($bye)){
- $json = file_get_contents('json/'.$uniacid.'_keywords.json');//读取key列表
- $keys = json_decode($json,true);
- $json = file_get_contents('json/'.$uniacid.'_keys.json');//读取数字key列表
- $numkeys = json_decode($json,true);
-
- $delid=getuser($uniacid,$openid,'',$website);
- $send=$keys[$numkeys[$bye]];
-
- if ($send['link']['title']!=''){
- $send['link']['title']=str_replace('id',$delid['id'],$send['link']['title']);
- $send['link']['title']=str_replace('[name]', trim($delid['nickname']),$send['link']['title']);
- }
- if ($send['miniprogrampage']['title']!=''){
- $send['miniprogrampage']['title']=str_replace('id',$delid['id'],$send['miniprogrampage']['title']);
- $send['miniprogrampage']['title']=str_replace('[name]', trim($delid['nickname']),$send['miniprogrampage']['title']);
- }
- if ($send['text']['content']!=''){
- $send['text']['content']=str_replace('[id]',$delid['id'],$send['text']['content']);
- $send['text']['content']=str_replace('[name]',trim($delid['nickname']),$send['text']['content']);
- // logger('要替换的文本:'.$send['text']['content']);
- $send['text']['content']=changeurl($send['text']['content']);
- }
-
- $send['touser']=trim($openid);
- $data0=json_encode($send,JSON_UNESCAPED_UNICODE);
- }
- else {
- $sends=$bye; //$keys['关于我们'];
- $jieshuyu= str_replace('[name]',$delid['nickname'],$sends);
- $jieshuyu=str_replace("{br}","\n",$jieshuyu);
- $jieshuyu=changeurl($jieshuyu);
- $data0='{ "touser":"'.trim($openid).'", "msgtype":"text",
- "text": { "content":" '.$jieshuyu.' " } }';
- }
-
- $aaa = http_post_data($url, $data0);
- logger($data0);
-
-
- }
- function Finduser($ucid,$tablename,$culname,$openid,$findname,$website){
- //&tablename=dc_user&culname=openid&findname=name&openid=ogMce0dAqzqm3LSCIBzoHb4XYgFU
- $token_access_url = "{$website}/app/index.php?i=".$ucid."&c=entry&a=wxapp&do=finduser&m=qidong_app&tablename={$tablename}&culname={$culname}&findname={$findname}&openid={$openid}";
- // logger( $token_access_url);
- $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
- logger('--------------'.$res);
- $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP
- $data=$result['data']['nickname'] ;
-
- return $data ;
- }
-
- function Inserthistory($toUsername,$uniacid,$kfopenid,$kfname,$khopenid,$khname,$keyword,$postObj,$zhuangtai,$website){
- //&tablename=dc_user&culname=openid&findname=name&openid=ogMce0dAqzqm3LSCIBzoHb4XYgFU
- $type=$postObj->MsgType;
- if ($type=='image'){
- $keyword=$postObj->PicUrl;
- }
- if ($type=='voice'){
- $keyword=$postObj->Recognition;
- }
- $token_access_url = "{$website}/app/index.php?i=".$uniacid."&c=entry&a=wxapp&do=Inserthistory&m=qidong_app&uniacid={$uniacid}&type={$type}&toUsername={$toUsername}&kfopenid={$kfopenid}&kfname={$kfname}&khopenid={$khopenid}&khname={$khname}&keyword={$keyword}&zhuangtai={$zhuangtai}";
- // logger( $token_access_url);
- $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
-
-
- //return $data ;
- }
-
-
- function sendMBmsg($Atoken,$openid,$template_id,$url,$appid,$pagepath,$data){
- //消息处理模块.
- // $info = json_decode(file_get_contents("json/info_".$jsonid.".json"),true);//读取设置文件.
- //$Atoken=$info['access_token'];
-
-
- $data1=' {
- "touser":"'.$openid.'",
- "template_id":"'.$template_id.'",
- "url":"'.$url.'",
- "miniprogram":{
- "appid":"'.$appid.'",
- "pagepath":"'.$pagepath.'"
- },
- "data": '.$data.'
- }';
-
- // echo $data1."<br>";
-
- $url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=$Atoken";
- // echo $url."<br>";
- $aaa = http_post_data($url, $data1);
-
- // print_r($aaa);
-
- return $aaa;
- }
- function getReqSign($params /* 关联数组 */, $appkey /* 字符串*/)
- {
- // 1. 字典升序排序
- ksort($params);
- // 2. 拼按URL键值对
- $str = '';
- foreach ($params as $key => $value)
- {
- if ($value !== '')
- {
- $str .= $key . '=' . urlencode($value) . '&';
- }
- }
- // 3. 拼接app_key
- $str .= 'app_key=' . $appkey;
- // 4. MD5运算+转换大写,得到请求签名
- $sign = strtoupper(md5($str));
- return $sign;
- }
- // doHttpPost :执行POST请求,并取回响应结果
- // 参数说明
- // - $url :接口请求地址
- // - $params:完整接口请求参数(特别注意:不同的接口,参数对一般不一样,请以具体接口要求为准)
- // 返回数据
- // - 返回false表示失败,否则表示API成功返回的HTTP BODY部分
- function doHttpPost($url, $params)
- {
- $curl = curl_init();
- $response = false;
- do
- {
- // 1. 设置HTTP URL (API地址)
- curl_setopt($curl, CURLOPT_URL, $url);
- // 2. 设置HTTP HEADER (表单POST)
- $head = array(
- 'Content-Type: application/x-www-form-urlencoded'
- );
- curl_setopt($curl, CURLOPT_HTTPHEADER, $head);
- // 3. 设置HTTP BODY (URL键值对)
- $body = http_build_query($params);
- curl_setopt($curl, CURLOPT_POST, true);
- curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
- // 4. 调用API,获取响应结果
- curl_setopt($curl, CURLOPT_HEADER, false);
- curl_setopt($curl, CURLOPT_NOBODY, false);
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
- $response = curl_exec($curl);
- if ($response === false)
- {
- $response = false;
- break;
- }
- $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
- if ($code != 200)
- {
- $response = false;
- break;
- }
- } while (0);
- curl_close($curl);
- return $response;
- }
- // 设置请求数据(应用密钥、接口请求参数)
- function jiqiren($keyword,$session){
- $appkey = 'l2FBbW8zsJvp3kQa';
- $params = array(
- 'app_id' => '1106992438',
- 'time_stamp' => time(),
- 'nonce_str' => '20e340'.rand(1000,9999),
- 'session' => $session,
- 'question' => $keyword,
- 'sign' => ''
- );
- $params['sign'] = getReqSign($params, $appkey);
- // 执行API调用
- $url = 'https://api.ai.qq.com/fcgi-bin/nlp/nlp_textchat';
- $response = doHttpPost($url, $params);
- return json_decode($response,true)['data']['answer'];
- }
-
- ?>
|