kefu.php 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395
  1. <?php
  2. //echo checkSignature;
  3. /* 本程序已经申请著作权保护
  4. 违规使用将受到法律制裁.
  5. 法律顾问:北京东环律师事务所
  6. CopyRight 2017 www.17cheng.cn All Rights Reserved
  7. */
  8. header('Content-type:text/json');
  9. traceHttp();
  10. $stime=microtime(true);
  11. ini_set("display_errors", "off");
  12. define("TOKEN", "xcxkefu");
  13. $wechatObj = new wechatCallbackapiTest();
  14. if (isset($_GET['echostr'])) { //判断是不是首次验证
  15. $wechatObj->valid();
  16. }else{
  17. $wechatObj->responseMsg();
  18. }
  19. class wechatCallbackapiTest
  20. {
  21. public function valid()
  22. {
  23. $echoStr = $_GET["echostr"];
  24. if($this->checkSignature()){
  25. echo $echoStr;
  26. exit;
  27. }
  28. }
  29. private function checkSignature()
  30. {
  31. $signature = $_GET["signature"];
  32. $timestamp = $_GET["timestamp"];
  33. $nonce = $_GET["nonce"];
  34. $token = TOKEN;
  35. $tmpArr = array($token, $timestamp, $nonce);
  36. sort($tmpArr);
  37. $tmpStr = implode( $tmpArr );
  38. $tmpStr = sha1( $tmpStr );
  39. if( $tmpStr == $signature ){
  40. return true;
  41. }else{
  42. return false;
  43. }
  44. }
  45. public function responseMsg()
  46. {
  47. // $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取数据
  48. $postStr = file_get_contents("php://input");
  49. //logger(time());
  50. if (!empty($postStr)){
  51. // $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  52. $postObj =json_decode($postStr);
  53. $fromUsername = $postObj->FromUserName; //openid
  54. $toUsername = $postObj->ToUserName;
  55. $tousernamebak=$toUsername;
  56. $keyword = trim($postObj->Content);
  57. $sessionFrom=$postObj->SessionFrom;
  58. //logger('sessionFrom:'.$sessionFrom);
  59. // $sessionFrom.="|";
  60. //$userinfo=explode("|",$sessionFrom,-1);
  61. $MsgType = $postObj->MsgType;//消息类型 text event
  62. //$SessionFrom = $postObj->SessionFrom;//消息类型 text event
  63. $time = time();
  64. logger($postStr);
  65. //读取设置json 系统设置
  66. $json = file_get_contents('json/'.$toUsername.'.json');
  67. $arr = json_decode($json,true);
  68. $uniacid=$arr['uniacid'];
  69. $website=$arr['website'];
  70. $json = file_get_contents('json/'.$uniacid.'_keywords.json');//读取key列表
  71. $keys = json_decode($json,true);
  72. $json = file_get_contents('json/'.$uniacid.'_keys.json');//读取数字key列表
  73. $numkeys = json_decode($json,true);
  74. define("APPID", $arr['APPID']);
  75. define("APPSECRET", $arr['APPSECRET']);
  76. $myopenid=trim($arr['openids']);//管理员id
  77. // if(isset($arr['uniacid'])){$uniacid=0; }else{};
  78. //获取access_token 先获取token备份.查询 token是否存在
  79. // $token_access_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".APPSECRET;
  80. // logger( $token_access_url);
  81. // $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
  82. // $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP 变量
  83. // $Atoken = $result['access_token']; //
  84. $Atoken=getToken(APPID,APPSECRET,$toUsername);//修正token时间问题
  85. //下发信息
  86. $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$Atoken;
  87. $urlbak=$url;
  88. if ($MsgType == "image") {//接收图片
  89. $PicUrl = $postObj->PicUrl;
  90. $MediaId = $postObj->MediaId;
  91. $MsgId = $postObj->MsgId;
  92. if ($fromUsername!= $myopenid){
  93. if ($arr["其他"]=='公众号客服'){//推送给绑定的外面的管理员.
  94. $caidan=trim($arr['Gjsonid']);//进入通知:
  95. $Btoken=getToken($arr['Gappid'],$arr['GAPPSECRET'],$caidan);//修正token时间问题
  96. $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$Btoken;
  97. $myopenid=trim($arr['Gopenids']);
  98. $toUsername= $caidan; //写入新的公众号文件里面.
  99. logger('///-'.$toUsername.$myopenid);
  100. ////////////////////////转换图片.
  101. $add="temp/".time().".png";//保存图片时的id
  102. $img = GrabImage($PicUrl,$add);
  103. logger('////--'.$img);
  104. // $type = 'image';
  105. if ($img<>''){//当是图片时 转换成微信图片
  106. $udata= json_decode(uploadFile($add,'image',$Btoken),true) ;
  107. $MediaId = $udata['media_id'];
  108. logger('Mid:'.$MediaId);
  109. }
  110. }
  111. //////////////////////转换结束
  112. //发来图片 没转换成功时
  113. if ($MediaId==''){
  114. $data8='{ "touser":"'.trim($myopenid).'", "msgtype":"text",
  115. "text": { "content":"[用户发来图片]\n <a href=\"'.$PicUrl.'\">点击查看</a> " } }';
  116. $bbb = http_post_data($url, $data8);
  117. }else{
  118. $data1=' { "touser":"'.$myopenid.'", "msgtype":"image",
  119. "image": { "media_id":"'.$MediaId.'" }}';
  120. $aaa = http_post_data($url, $data1); //减少骚扰 不通知
  121. }
  122. } else
  123. {//管理员下发消息.
  124. $nowid=dujson('json/'.$toUsername.'_now.json');
  125. $nowid=json_decode($nowid, true);
  126. //判断是给谁的图片 .获取到token 并
  127. if (trim($nowid['tousername'])==$toUsername)
  128. {
  129. $data1=' { "touser":"'.$nowid['openid'].'", "msgtype":"image",
  130. "image": { "media_id":"'.$MediaId.'" }}';
  131. $bbb = http_post_data($url, $data1);
  132. }else{
  133. $file = file_get_contents("json/{$nowid['tousername']}_token.json",true);
  134. $result = json_decode($file,true);
  135. $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$result['access_token'];
  136. $add="temp/".time().".png";//保存图片时的id
  137. $img = GrabImage($PicUrl,$add);
  138. logger('////--'.$img);
  139. // $type = 'image';
  140. if ($img<>''){//当是图片时 转换成微信图片
  141. $udata= json_decode(uploadFile($add,'image',$result['access_token']),true) ;
  142. $MediaId = $udata['media_id'];
  143. logger('Mid:'.$MediaId);
  144. }
  145. $data1=' { "touser":"'.$nowid['openid'].'", "msgtype":"image",
  146. "image": { "media_id":"'.$MediaId.'" }}';
  147. $bbb = http_post_data($url, $data1);
  148. logger($data1.$bbb);
  149. }
  150. }
  151. exit;
  152. }
  153. if ($MsgType == "file") {//接收文件 暂时不能支持 .
  154. $FromUserName = $postObj->FromUserName;
  155. $Title = $postObj->Title;
  156. $FileMd5 = $postObj->FileMd5;
  157. if ($fromUsername!= $myopenid){
  158. // $data1=' { "touser":"'.$fromUsername.'", "msgtype":"file",
  159. // "file": { "title": "'.$Title.'", "FileMd5":"'.$FileMd5.'" }}';
  160. $data1='{ "touser":"'.$fromUsername.'", "msgtype":"text",
  161. "text": { "content":"[系统提示]\n由于微信系统限制,我们还不能接收您发来的文件,可以加我们的客服QQ进行传递.回复QQ立即接通QQ链接. " } }';
  162. $aaa = http_post_data($url, $data1); //减少骚扰 不通知
  163. logger($aaa);
  164. } else{
  165. $nowid=dujson('json/'.$toUsername.'_now.json');
  166. $nowopenid=json_decode($nowid, true);
  167. $content=''.$paidui['nickname'].':\n';
  168. // $fromUsername= $myopenid;
  169. $data1=' { "touser":"'.$nowopenid['openid'].'", "msgtype":"image",
  170. "image": { "media_id":"'.$MediaId.'" }}';
  171. $bbb = http_post_data($url, $data1);
  172. $data1='{ "touser":"'.$myopenid.'", "msgtype":"text",
  173. "text": { "content":"[图片ID]\n '.$MediaId.'\n 图片链接:'.$PicUrl.' " } }';
  174. $aaa = http_post_data($url, $data1); //减少骚扰 不通知
  175. }
  176. exit;
  177. }
  178. if ($MsgType == "miniprogrampage") {//接收转发小程序...
  179. $FromUserName = $postObj->FromUserName;
  180. $Title = $postObj->Title;
  181. $AppId = $postObj->AppId;
  182. $PagePath = $postObj->PagePath;
  183. $ThumbMediaId = $postObj->ThumbMediaId;
  184. if ($fromUsername!= $myopenid){ //发送给管理员
  185. $data1=' { "touser":"'.$myopenid.'", "msgtype":"miniprogrampage",
  186. "miniprogrampage": { "title": "'.$Title.'",
  187. "pagepath": "'.$pagepath.'",
  188. "thumb_media_id": "'.$ThumbMediaId.'" }}';
  189. $aaa = http_post_data($url, $data1); //减少骚扰 不通知
  190. // logger($aaa);
  191. } else{
  192. $nowid=dujson('json/'.$toUsername.'_now.json');
  193. $nowopenid=json_decode($nowid, true);
  194. // $fromUsername= $myopenid;
  195. // $data1=' { "touser":"'.$nowopenid['openid'].'", "msgtype":"image",
  196. // "image": { "media_id":"'.$MediaId.'" }}';
  197. $data1=' { "touser":"'.$nowopenid['openid'].'", "msgtype":"miniprogrampage",
  198. "miniprogrampage": { "title": "'.$Title.'",
  199. "pagepath": "'.$pagepath.'",
  200. "thumb_media_id": "'.$ThumbMediaId.'" }}';
  201. $bbb = http_post_data($url, $data1);
  202. }
  203. exit;
  204. }
  205. if ($MsgType == "event") {
  206. //如果传输了seession 就读取然后存储 .
  207. /// if (length($SessionFrom)>3) {$nickname=explode("|",$SessionFrom,-1)[0] ;}
  208. $nickname=explode("|",$sessionFrom,-1)[0] ;
  209. logger('nickname0:'.$nickname);
  210. //处理第一次进入的回复内容 用户信息查询. 先查询数据库: 并注册用户.
  211. if ($fromUsername== $myopenid){ //管理员上线通知 排队人数 留言条数 排队的人.
  212. $paiduinumber=count(file('json/'.$toUsername.'_now.json'));
  213. if (!file_exists('json/'.$toUsername.'_lishi.json')){
  214. $liuyannumber=0;
  215. }else{
  216. $liuyannumber=count(file('json/'.$toUsername.'_lishi.json'));
  217. }
  218. $nowid=dujson('json/'.$toUsername.'_now.json');
  219. $nowopenid=json_decode($nowid, true);
  220. $tongzhi='排队人数:'. $paiduinumber.'\n'.'留言条数:'. $liuyannumber.' \n当前聊天:\n'.$nowopenid['nickname'];
  221. $data1='{ "touser":"'.$myopenid.'", "msgtype":"text",
  222. "text": { "content":"[管理员上线工作提醒]\n '.$tongzhi.' " } }';
  223. $aaa = http_post_data($url, $data1); //减少骚扰 不通知
  224. exit;
  225. }
  226. //下发图片.
  227. //查询昵称 Finduser($ucid,$tablename,$culname,$openid,$findname)
  228. // $sqstr=$website."addons/qidong_app/intenet.php?zfopenid=".$fromUsername."&toUsername=".$toUsername."&appid=".$arr['Gappid'];
  229. // $sqstr="\n<a href='".$sqstr."'>点此授权</a>";
  230. $tablename=trim($arr['tablename']);//管理员id
  231. if ($tablename<>''){
  232. $culname=$arr['culname'];
  233. $findname=$arr['findname'];
  234. $nickname= Finduser($uniacid,$tablename,$culname,$fromUsername,$findname,$website);
  235. if(!$nickname)
  236. {
  237. $nickname ='';
  238. }
  239. logger('findname:'. $nickname);
  240. }
  241. $userinfo= getuser($uniacid,$fromUsername,$nickname,$website);
  242. logger('nickname1:'.$uniacid.$fromUsername.$userinfo['nickname']);
  243. $send=$keys[$arr['默认']];
  244. //$data['title']= str_replace($userinfo['id'],'[id]',$data);
  245. if ($arr['Gappid']<>''){ //网页授权
  246. //logger()
  247. if((substr($userinfo['nickname'],0,6)=='会员')){
  248. // logger('左边2个字:'.substr($userinfo['nickname'],0,6));
  249. $sqstr=$website."addons/qidong_app/intenet.php?zfopenid=".$fromUsername."&toUsername=".$toUsername."&appid=".$arr['Gappid'];
  250. $sqstr="\n<a href='".$sqstr."'>点此快速接通客服</a>";
  251. //logger($sqstr);
  252. }
  253. }
  254. // $data['title'].= $sqstr;
  255. if ($send['link']['title']!=''){
  256. $send['link']['title']=str_replace('id',$userinfo['id'],$send['link']['title']);
  257. $send['link']['title']=str_replace('[name]', trim($userinfo['nickname']),$send['link']['title']);
  258. }
  259. if ($send['miniprogrampage']['title']!=''){
  260. $send['miniprogrampage']['title']=str_replace('id',$userinfo['id'],$send['miniprogrampage']['title']);
  261. $send['miniprogrampage']['title']=str_replace('[name]', trim($userinfo['nickname']),$send['miniprogrampage']['title']);
  262. }
  263. if ($send['text']['content']!=''){
  264. $send['text']['content']=str_replace('[id]',$userinfo['id'],$send['text']['content']);
  265. $send['text']['content']=str_replace('[name]',trim($userinfo['nickname']),$send['text']['content']);
  266. $send['text']['content']=changeurl($send['text']['content']);
  267. $send['text']['content'].=$sqstr;
  268. }
  269. $send['touser']=$fromUsername;
  270. $data=json_encode($send,JSON_UNESCAPED_UNICODE);
  271. //替换会员id和名字:
  272. // $data= str_replace($userinfo['id'],'[id]',$data);
  273. // echo str_replace("world","Shanghai","Hello world!");
  274. // json_encode( $arr['关注'],JSON_UNESCAPED_UNICODE);
  275. $aaa = http_post_data($url, $data); //下发首次进入的回复内容.
  276. $zt=json_decode($aaa, true)['errcode'];
  277. logger("关注下发:".$data.'-状态:'. $zt);
  278. // $data1='{ "touser":"'.$myopenid.'", "msgtype":"text",
  279. //"text": { "content":"[进入提醒测试]\n '.$zt.' " } }';
  280. // $aaa = http_post_data($url, $data1); //减少骚扰 不通知
  281. $caidan=trim($arr['Gjsonid']);//进入通知:
  282. if ($caidan<>''){
  283. $Btoken=getToken($arr['Gappid'],$arr['GAPPSECRET'],$caidan);//修正token时间问题
  284. // logger("通知下发:".$caidan_arr['APPID'].'-状态:'.$caidan_arr['openids']);
  285. $url1 = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$Btoken;
  286. $data1='{ "touser":"'.$arr['Gopenids'].'", "msgtype":"text",
  287. "text": { "content":"[小程序编号'.$uniacid.'进入提醒]\n '.$userinfo['nickname'].'_备注['.$userinfo['beizhu']. '] " } }';
  288. $aaa = http_post_data($url1, $data1); // //通知到公共号
  289. logger($data1.$aaa);
  290. }
  291. exit;
  292. }
  293. if ($MsgType == "text") {// 如果不是第一次进入
  294. // logger("keyword".$arr[$keyword]);
  295. //如果进入的是数字 判断是否有对应的文字 .
  296. if(is_numeric($keyword)){
  297. $send=$keys[$numkeys[$keyword]];
  298. }
  299. else {
  300. $send=$keys[$keyword]; //$keys['关于我们'];
  301. }
  302. if ( $send<>'' ) { //判断是否是知识库设置字段
  303. $userinfo= getuser($uniacid,$fromUsername,$nickname); //???
  304. if ($send['link']['title']!=''){
  305. $send['link']['title']=str_replace('id',$userinfo['id'],$send['link']['title']);
  306. $send['link']['title']=str_replace('[name]', trim($userinfo['nickname']),$send['link']['title']);
  307. }
  308. if ($send['miniprogrampage']['title']!=''){
  309. $send['miniprogrampage']['title']=str_replace('id',$userinfo['id'],$send['miniprogrampage']['title']);
  310. $send['miniprogrampage']['title']=str_replace('[name]', trim($userinfo['nickname']),$send['miniprogrampage']['title']);
  311. }
  312. if ($send['text']['content']!=''){
  313. $send['text']['content']=str_replace('[id]',$userinfo['id'],$send['text']['content']);
  314. $send['text']['content']=str_replace('[name]',trim($userinfo['nickname']),$send['text']['content']);
  315. // logger('要替换的文本:'.$send['text']['content']);
  316. $send['text']['content']=changeurl($send['text']['content']);
  317. }
  318. $send['touser']=$fromUsername;
  319. $data=json_encode($send,JSON_UNESCAPED_UNICODE);
  320. $aaa = http_post_data($url, $data);
  321. $zt=json_decode($aaa, true)['errcode'];
  322. if ($zt!=0){//下发未成功
  323. $data='{ "touser":"'.$fromUsername.'", "msgtype":"text",
  324. "text": { "content":" 系统忙 错误代码: ' . $zt . ' " } }';
  325. // $aaa = http_post_data($url, $data);
  326. //当错误代码是40007的时候 重新上传素材.
  327. if($zt==40007){
  328. if ($send['msgtype']=='image'){
  329. $imagefile= $send['image']['media_id'] ;
  330. }
  331. if ($send['msgtype']=='miniprogrampage'){
  332. // miniprogrampage
  333. $imagefile= $send['miniprogrampage']['thumb_media_id'];
  334. }
  335. // logger($send);
  336. $add="temp/".$imagefile.".png";//保存图片时的id
  337. logger($add);
  338. if (file_exists($add)){//当是图片时 转换成微信图片
  339. logger('图片存在.'.$MediaId);
  340. $udata= json_decode(uploadFile($add,'image',$Atoken),true) ;
  341. logger('0000:'.$udata);
  342. $MediaId = $udata['media_id'];
  343. if ($send['msgtype']=='image'){
  344. $send['image']['media_id']=$MediaId;
  345. }
  346. if ($send['msgtype']=='miniprogrampage'){
  347. // miniprogrampage
  348. $send['miniprogrampage']['thumb_media_id']=$MediaId;
  349. }
  350. rename($add,"temp/".$MediaId.".png");
  351. $data=json_encode($send,JSON_UNESCAPED_UNICODE);
  352. $aaa = http_post_data($url, $data);
  353. }else{
  354. logger('图片不存在.' );
  355. $data='{ "touser":"'.$fromUsername.'", "msgtype":"text",
  356. "text": { "content":" 系统忙 错误代码: ' . $zt . ' " } }';
  357. $aaa = http_post_data($url, $data);
  358. }
  359. }
  360. }
  361. logger("关注下发:".$data.'-状态:'. $zt);
  362. exit;
  363. }else {//文字推送
  364. if ($keyword=='openid'){ //获取openid
  365. $data='{ "touser":"'.$fromUsername.'", "msgtype":"text",
  366. "text": { "content":" 你的openid: ' . $fromUsername . ' " } }';
  367. $aaa = http_post_data($url, $data);
  368. exit;
  369. }
  370. if (substr($keyword,0,6)=='取号'){ //手动设置昵称..
  371. $quhao= edituser($uniacid,$fromUsername,trim(substr($keyword,6)),$website);
  372. $allnumber=count(file('json/'.$toUsername.'_now.json'));
  373. $data='{ "touser":"'.$fromUsername.'", "msgtype":"text",
  374. "text": { "content":" '.substr($keyword,6).$quhao.' 前面有' .$allnumber . '人排队. " } }';
  375. $aaa = http_post_data($url, $data);
  376. $data1='{ "touser":"'.$myopenid.'", "msgtype":"text",
  377. "text": { "content":"[取号通知]\n'.substr($keyword,6).'排队取号,目前共'.$allnumber+1 . ' 人. \n " } }';
  378. $bbb = http_post_data($url, $data1);
  379. exit;
  380. }
  381. if ($arr["其他"]<>""){
  382. //人工客服时 读一次数据库 .
  383. if ($fromUsername!= $myopenid){ //不是管理员时
  384. //先判断用户是否在排队?
  385. $caidan=trim($arr['Gjsonid']);//进入通知:
  386. if ($arr["其他"]=='公众号客服'){
  387. $Btoken=getToken($arr['Gappid'],$arr['GAPPSECRET'],$caidan);//修正token时间问题
  388. $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$Btoken;
  389. $myopenid=trim($arr['Gopenids']);
  390. $toUsername= $caidan; //写入新的公众号文件里面.
  391. }
  392. $paidui= ifpaidui('json/'.$toUsername.'_now.json',$fromUsername);
  393. logger($fromUsername.':'.$paidui['shunxu']);
  394. if ($paidui['shunxu']==0)//是新用户 查编号 写入队列.
  395. {
  396. $userinfo= getusernew($uniacid,$fromUsername,$nickname,$website);//如果是第一个 直接读取缓存
  397. $userinfo['tousername']=$tousernamebak;
  398. $userinfo['uniacid']=$uniacid;
  399. //判断是否是公共号绑定回复----
  400. $new= savejson('json/'.$toUsername.'_now.json', json_encode($userinfo));//写入一个. 改.
  401. $allnumber=count(file('json/'.$toUsername.'_now.json'));
  402. if ($new==0){$new1=$allnumber;} else{$new1=$new;} //新用户 总排队
  403. // $fromUsername= $myopenid;
  404. if($allnumber==1)
  405. {$hui='可直接回复';
  406. $tishi='\n人工客服已经接入.';
  407. //对方正在输入...哈哈
  408. $data8='{ "touser":"'.$fromUsername.'", "command":"Typing"}';
  409. $url8='https://api.weixin.qq.com/cgi-bin/message/custom/typing?access_token='.$Atoken;
  410. $bbb = http_post_data($url8, $data8);
  411. logger($bbb);
  412. //结束输入判断.
  413. } else{
  414. $hui='可用命令 下一个 接通.或\n @'.$userinfo['id'].':私信Ta';
  415. if ($arr["其他"]=='人工+机器人'){ $tishi='\n直接回复接入智能聊天机器人.';};
  416. };
  417. $data1='{ "touser":"'.$myopenid.'", "msgtype":"text",
  418. "text": { "content":"[排队通知]目前共'.$allnumber . ' 人. \n'.$userinfo['nickname'].' 备注:['.$userinfo['beizhu'].'] :'.$keyword.'\n '.$hui.$sqstr.'" } }';
  419. $bbb = http_post_data($url, $data1); //第一次打招呼通知管理员.
  420. //读取Key 自动导航
  421. $arr= array_keys($numkeys);
  422. $i=0;
  423. foreach ($arr as $arr) {
  424. $daohang.=$arr.':'.changeurl($numkeys[$arr]) .'\n';
  425. $i++;
  426. if ($i>9){break;};
  427. }
  428. //echo $caidan;
  429. $jqr=' 先看看这些能不能帮到您. 直接回复序号即可.\n'.$daohang;
  430. $data='{ "touser":"'.$fromUsername.'", "msgtype":"text",
  431. "text": { "content":"排队中,您是第'.$new1.' 个. '.$jqr.$tishi.$sqstr.' " } }'; //当没有约定好的回复时,这么回复。
  432. $bbb = http_post_data($urlbak, $data); //第一次打招
  433. exit;
  434. }
  435. elseif($paidui['shunxu']==1){ //是第一个 .
  436. $content='['.$paidui['id'].']'.$paidui['nickname'].'_'.$uniacid.':\n';
  437. // $fromUsername= $myopenid;
  438. $data1='{ "touser":"'.$myopenid.'", "msgtype":"text",
  439. "text": { "content":"'. $content. $keyword . ' " } }';
  440. $bbb = http_post_data($url, $data1);
  441. if (json_decode($bbb, true)['errcode']==40001)
  442. {
  443. //发送失败 删掉token 再次获取.
  444. unlink('json/'.$toUsername.'_token.json');
  445. //
  446. $data1='{ "touser":"'.$myopenid.'", "msgtype":"text",
  447. "text": { "content":"重发:'. $content. $keyword . ' " } }';
  448. $bbb = http_post_data($url, $data1);
  449. exit;
  450. }
  451. if (json_decode($bbb, true)['errcode']<>0){
  452. $data2='{ "touser":"'.$fromUsername.'", "msgtype":"text",
  453. "text": { "content":" 客服离开... 消息已存入信箱.'.json_decode($bbb, true)['errcode'].'" } }'; //当没有约定好的回复时,这么回复。
  454. $bbbb = http_post_data($urlbak, $data2);
  455. savejson('json/'.$toUsername.'_lishi.json', '@'.$paidui['id'].'_'.$content.''.$keyword );
  456. $caidan=trim($arr['Gjsonid']);//消息通知到公共号:
  457. if ($caidan<>''){
  458. $Btoken=getToken($arr['Gappid'],$arr['GAPPSECRET'],$caidan);//修正token时间问题
  459. $url1 = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$Btoken;
  460. $data1='{ "touser":"'.$arr['Gopenids'].'", "msgtype":"text",
  461. "text": { "content":"[客服离线消息]错误代码:'.json_decode($bbb, true)['errcode'].'\n '. $content. $keyword .' " } }';
  462. $aaa = http_post_data($url1, $data1); // //通知到公共号
  463. logger($data1.$aaa);
  464. if (json_decode($aaa, true)['errcode']==40001)
  465. {
  466. //发送失败 删掉token 再次获取.
  467. unlink('json/'.$caidan.'_token.json');
  468. $Btoken=getToken($arr['Gappid'],$arr['GAPPSECRET'],$caidan);//修正token时间问题
  469. $url1 = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$Btoken;
  470. $data1='{ "touser":"'.$arr['Gopenids'].'", "msgtype":"text",
  471. "text": { "content":"[客服离线消息]错误代码:'.json_decode($bbb, true)['errcode'].'\n '. $content. $keyword .' " } }';
  472. $aaa = http_post_data($url1, $data1); // //通知到公共号
  473. }
  474. }
  475. }
  476. }else {//不是第一个 判断客服模式
  477. if ($arr["其他"]=='人工+机器人')
  478. { $jqr='先和智能客服聊会. \n智能客服:'.jiqiren($keyword); }
  479. else
  480. { $jqr='轮到您时我们会信息通知.请耐心等待. \n '; }
  481. // $jqr='先和智能客服聊会. \n智能客服:'.jiqiren($keyword);
  482. $data='{ "touser":"'.$fromUsername.'", "msgtype":"text",
  483. "text": { "content":"排队中,您是第'.$paidui['shunxu'].' 个. '.$jqr.$sqstr.' " } }'; //当没有约定好的回复时,这么回复。
  484. $aaa = http_post_data($urlbak, $data); //
  485. logger('下发:'.$data.$aaa);
  486. //通知到公共号
  487. exit;
  488. }
  489. }else{//处理管理员发来的消息
  490. //备注客户
  491. if (substr($keyword,0,6)=='备注'){ //命令 备注12:大灰狼
  492. //取openid hiuser
  493. $stri=0;
  494. $stri= stripos($keyword,':');
  495. if ($stri==0){$stri= stripos($keyword,' ') ;}
  496. if ($stri==0){$stri= stripos($keyword,':') ;}
  497. $nid=substr($keyword,6,$stri-6); //@12:=>12
  498. $bzname=trim(substr($keyword,$stri+1));//发送的内容:
  499. logger($uniacid.'-'.$nid.'-'.$bzname);
  500. $bzjg= edituserid(trim($uniacid),trim($nid),trim($bzname),$website);
  501. $data1='{ "touser":"'.$myopenid.'", "msgtype":"text",
  502. "text": { "content":" 会员'.$nid.'_ '.$bzjg.' " } }';
  503. $aaa = http_post_data($url, $data1); //减少骚扰 不通知
  504. exit;
  505. }
  506. //测试下发图片
  507. if ($keyword=='生成缓存'){//调用生成缓存接口.
  508. //
  509. $huncun= json_decode(alluser($uniacid,$website),true);
  510. $data1='{ "touser":"'.$myopenid.'", "msgtype":"text",
  511. "text": { "content":" [缓存报告:]'.$huncun['openids'].' 数量:'.$huncun['count'].' "" } }';
  512. $aaa = http_post_data($url, $data1); //减少骚扰 不通知
  513. exit;
  514. }
  515. //处理群发所有人消息
  516. if (substr($keyword,0,10)=='@所有人'){
  517. //判断有没有缓存.
  518. $huncun= json_decode(alluser($uniacid,$website),true);
  519. //复制一份 "json/".$uniacid."_user.json"
  520. // exec("cp -f {$icon} ".$_base_path.'/WeMall/res/drawable-xhdpi-v4/ic_launcher.png');
  521. $gjz=substr($keyword,10,strlen(trim($keyword))-10);
  522. if (substr ($keyword, -1)=='#'){
  523. $gjz=str_replace('#','|',$gjz);
  524. }
  525. logger('是不是:'.$gjz) ;
  526. $baogao=' {
  527. "title": "代发列表已经准备好!点此群发",
  528. "description": "本次准备发送: '.$huncun['count'].' 请1分钟内点击,过期失效.",
  529. "url": "'.$website.'addons/qidong_app/qunfa.php?uniacid='.$uniacid.'&keyword='.$gjz.'&tousername='.$toUsername.'&t='.time().'",
  530. "thumb_url": "'.$website.'/addons/qidong_app/logo.jpg"
  531. }';
  532. logger($baogao);
  533. $data1='{ "touser":"'.$myopenid.'", "msgtype":"link",
  534. "link": '.$baogao.' }';
  535. $aaa = http_post_data($url, $data1); //
  536. exit;
  537. }///@所有人结束
  538. // 聊天过程中 直接发#
  539. //
  540. //增加@某人的功能
  541. if (substr($keyword,0,1)=='@'){
  542. //取openid hiuser
  543. $stri=0;
  544. $stri= stripos($keyword,':');
  545. if ($stri==0){$stri= stripos($keyword,' ') ;}
  546. if ($stri==0){$stri= stripos($keyword,':') ;}
  547. $nid=substr($keyword,1,$stri-1); //@12:=>12
  548. $say=trim(substr($keyword,$stri+1));//发送的内容:
  549. if($say==''){$say='有人@你 ,客服上线了,邀请你进入会话.';}
  550. //判断say最后字符是# 则是关键词消息 991#
  551. $liuuser= hiuser($uniacid,$nid,$website);
  552. $result = substr ($say, -1);
  553. if ($result=='#'){
  554. $gjz=substr($say,0,strlen($say)-1);
  555. if(is_numeric($gjz)){
  556. $send=$keys[$numkeys[$gjz]];
  557. }
  558. else {
  559. $send=$keys[$gjz]; //$keys['关于我们'];
  560. }
  561. $send['touser']=$liuuser['openid'];
  562. $nickname=$liuuser['nickname'];
  563. if($nickname==''){$nickname='会员'.$liuuser['id'];}
  564. $send['link']['title']=str_replace('[id]',$liuuser['id'],$send['link']['title']);
  565. $send['link']['title']=str_replace('[name]', trim($nickname),$send['link']['title']);
  566. $data=json_encode($send,JSON_UNESCAPED_UNICODE);
  567. $bbb = http_post_data($url, $data);
  568. logger('单发:'.$data);
  569. }else{
  570. $data2='{ "touser":"'.$liuuser['openid'].'", "msgtype":"text",
  571. "text": { "content":"[管理员@你]:\n'.$say.'" } }'; //当没有约定好的回复时,这么回复。
  572. $bbb = http_post_data($url, $data2);
  573. }
  574. if (json_decode($bbb, true)['errcode']==0)
  575. { $zt='送达';
  576. //对方正在输入...哈哈
  577. $data8='{ "touser":"'.trim($liuuser['openid']).'", "command":"Typing"}';
  578. $url8='https://api.weixin.qq.com/cgi-bin/message/custom/typing?access_token='.$Atoken;
  579. $bbb = http_post_data($url8, $data8);
  580. logger($bbb);
  581. //结束输入判断.
  582. }else{ $zt='失败,可能已经离线'.json_decode($bbb, true)['errcode']; };
  583. $data1='{ "touser":"'.$myopenid.'", "msgtype":"text",
  584. "text": { "content":"会员'.$nid.'[消息'.$zt.']\n " } }';
  585. $aaa = http_post_data($url, $data1); //减少骚扰 不通知
  586. //发送消息
  587. exit;
  588. }//@某人结束
  589. switch ($keyword)
  590. {
  591. case '下一个':
  592. $delid=deljson('json/'.$toUsername.'_now.json');//删掉一个
  593. //2.15 获取自定义下一个
  594. // $data=$arr['联系电话'];
  595. $a= edituser($uniacid,$delid['openid'],'',$website);
  596. logger('更新时间:'.$uniacid.$delid['openid'].$a);
  597. //删掉时 更新time ;
  598. // $send['touser']=trim($delid);
  599. // $data=json_encode($send,JSON_UNESCAPED_UNICODE);//
  600. //结束语 查询是不是 send/
  601. if(is_numeric($arr['结束语'])){
  602. $send=$keys[$numkeys[$arr['结束语']]];
  603. if ($send['link']['title']!=''){
  604. $send['link']['title']=str_replace('id',$delid['id'],$send['link']['title']);
  605. $send['link']['title']=str_replace('[name]', trim($delid['nickname']),$send['link']['title']);
  606. }
  607. if ($send['miniprogrampage']['title']!=''){
  608. $send['miniprogrampage']['title']=str_replace('id',$delid['id'],$send['miniprogrampage']['title']);
  609. $send['miniprogrampage']['title']=str_replace('[name]', trim($delid['nickname']),$send['miniprogrampage']['title']);
  610. }
  611. if ($send['text']['content']!=''){
  612. $send['text']['content']=str_replace('[id]',$delid['id'],$send['text']['content']);
  613. $send['text']['content']=str_replace('[name]',trim($delid['nickname']),$send['text']['content']);
  614. // logger('要替换的文本:'.$send['text']['content']);
  615. $send['text']['content']=changeurl($send['text']['content']);
  616. }
  617. $send['touser']=trim($delid['openid']);
  618. $data0=json_encode($send,JSON_UNESCAPED_UNICODE);
  619. }
  620. else {
  621. $sends=$arr['结束语']; //$keys['关于我们'];
  622. $jieshuyu= str_replace('[name]',$delid['nickname'],$sends);
  623. $jieshuyu=changeurl($jieshuyu);
  624. $data0='{ "touser":"'.trim($delid['openid']).'", "msgtype":"text",
  625. "text": { "content":" '.$jieshuyu.' " } }';
  626. }
  627. // logger($data0);
  628. $aaa = http_post_data($url, $data0);
  629. $nowid=dujson('json/'.$toUsername.'_now.json');
  630. $nowopenid=json_decode($nowid, true);
  631. $data2='{ "touser":"'.trim($nowopenid['openid']).'", "msgtype":"text",
  632. "text": { "content":"'.$nowopenid['nickname'].', 你好,久等了,有什么可以帮你的吗? " } }';
  633. $aaa = http_post_data($url, $data2);
  634. //对方正在输入...哈哈
  635. $data8='{ "touser":"'.trim($nowopenid['openid']).'", "command":"Typing"}';
  636. $url8='https://api.weixin.qq.com/cgi-bin/message/custom/typing?access_token='.$Atoken;
  637. $bbb = http_post_data($url8, $data8);
  638. logger($bbb);
  639. //结束输入判断.
  640. // $fromUsername= $myopenid;
  641. If (substr(trim($nowopenid['openid']),0,1)=='o'){
  642. //$userinfo= getuser($uniacid,$nowid,$nickname);
  643. $data1='{ "touser":"'.$myopenid.'", "msgtype":"text",
  644. "text": { "content":"新用户'.$nowopenid['nickname'].'接入,准备接待.\n排队人数:'.count(file('json/'.$toUsername.'_now.json')).' " } }';
  645. // $bbb = http_post_data($url, $data1);
  646. }else{
  647. $data1='{ "touser":"'.$myopenid.'", "msgtype":"text",
  648. "text": { "content":"已经接待完毕,没有用户排队了. " } }';
  649. }
  650. // file_put_contents('json/'.$toUsername.'_all.json'.$delid.PHP_EOL, FILE_APPEND);
  651. break;
  652. case '排队'://排队列表
  653. $paiduis=paiduilist('json/'.$toUsername.'_now.json');
  654. $data1='{ "touser":"'.$fromUsername.'", "msgtype":"text",
  655. "text": { "content":"排队人数:'.count(file('json/'.$toUsername.'_now.json')).'\n 排队列表'.$paiduis.'\n 小提示 发送@ID:内容 可直接给会员私信. " } }';
  656. break;
  657. case '看留言':
  658. $json = file_get_contents('json/'.$toUsername.'_lishi.json');
  659. $data1='{ "touser":"'.$fromUsername.'", "msgtype":"text",
  660. "text": { "content":"本次获取的内容,已清空留言板:\n'.$json.' " } }';
  661. unlink('json/'.$toUsername.'_lishi.json');
  662. break;
  663. case '清零'://清除文件 继续..
  664. unlink('json/'.$toUsername.'_now.json');
  665. unlink('json/'.$toUsername.'_token.json');
  666. unlink('log.xml');
  667. if (!file_exists('json/'.$toUsername.'_now.json')){
  668. $data1='{ "touser":"'.$fromUsername.'", "msgtype":"text",
  669. "text": { "content":" 排队人数清零成功! " } }';
  670. }
  671. else{
  672. $data1='{ "touser":"'.$fromUsername.'", "msgtype":"text",
  673. "text": { "content":" 清零失败,请检查目录addons/qidong_app/json/权限. " } }';
  674. }
  675. break;
  676. case '公众号':
  677. ///推送公众号给用户
  678. $nowid=dujson('json/'.$toUsername.'_now.json');
  679. $data1=' {
  680. "touser": "'.$nowid.'",
  681. "msgtype": "link",
  682. "link": '.json_encode( $arr['关注'],JSON_UNESCAPED_UNICODE).'}';
  683. //没成功....
  684. break;
  685. default://管理员默认回复第一个 .
  686. $nowid=dujson('json/'.$toUsername.'_now.json');
  687. $nowid=json_decode($nowid, true);
  688. //如果读到的jsonid 和 这里的不同 则是来自其他平台的 .
  689. //logger('读取到了一个文件:'.$nowid['tousername']);
  690. if (trim($nowid['tousername'])==null)
  691. {
  692. //$nowopenid=json_decode($nowid, true)['openid'];
  693. $data1='{ "touser":"'.trim($nowid['openid']).'", "msgtype":"text",
  694. "text": { "content":" '. $keyword . ' " } }';
  695. }else{
  696. $file = file_get_contents("json/{$nowid['tousername']}_token.json",true);
  697. $result = json_decode($file,true);
  698. $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$result['access_token'];
  699. $nowopenid=$nowid['openid'];
  700. $data1='{ "touser":"'.trim($nowopenid).'", "msgtype":"text",
  701. "text": { "content":" '. $keyword . ' " } }';
  702. }
  703. }//case 结束
  704. $bbb = http_post_data($url, $data1);
  705. }//消息处理结束
  706. }//qita 结束.
  707. }//字符串结束
  708. }//text 类型结束
  709. $aaa = http_post_data($url, $data);
  710. //给管理员推送:
  711. }else{
  712. echo "";
  713. exit;
  714. }
  715. }
  716. }
  717. function http_post_data($url, $data_string) {
  718. set_time_limit ( 0 );
  719. $curl = curl_init();
  720. curl_setopt($curl, CURLOPT_URL, $url);
  721. curl_setopt($curl, CURLOPT_HEADER, 0);
  722. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  723. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//这个是重点。
  724. curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);
  725. curl_setopt($curl, CURLOPT_HTTPHEADER, array(
  726. 'Content-Type: application/json',
  727. 'Content-Length: ' . strlen($data_string))
  728. );
  729. $data = curl_exec($curl);
  730. curl_close($curl);
  731. return $data;
  732. }
  733. function traceHttp()
  734. {
  735. //logger("\n\nREMOTE_ADDR:".$_SERVER["REMOTE_ADDR"].(strstr($_SERVER["REMOTE_ADDR"],'101.226')? " FROM WeiXin": "Unknown IP"));
  736. // logger("QUERY_STRING:".$_SERVER["QUERY_STRING"]);
  737. }
  738. function logger($log_content)
  739. {
  740. if(isset($_SERVER['HTTP_APPNAME'])){ //SAE
  741. sae_set_display_errors(false);
  742. sae_debug($log_content);
  743. sae_set_display_errors(true);
  744. }else{ //LOCAL
  745. $max_size = 500000;
  746. $log_filename = "log.xml";
  747. if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
  748. file_put_contents($log_filename, date('Y-m-d H:i:s').$log_content."\r\n", FILE_APPEND);
  749. }
  750. }
  751. //查询进入人的相关信息的
  752. function getinfo($open_id,$title,$description,$url){
  753. $link=mysql_connect("localhost","we7000","w7pass000");
  754. if(!$link) echo "没有连接成功!";
  755. mysql_select_db("we7", $link); //选择数据库
  756. //查询userid ,昵称,图片
  757. $q = "SELECT * FROM hjmall_user where (wechat_open_id ='".$open_id."' and store_id=20) "; //SQL查询语句
  758. mysql_query("SET NAMES utf8");
  759. $rs = mysql_query($q); //获取数据集
  760. if(!$rs){die("Valid result!");}
  761. $row = mysql_fetch_array($rs);
  762. $result=' {
  763. "title": "hi!'.$row[10].','.$title.'",
  764. "description": "'.$description.'",
  765. "url": "'.$url.'",
  766. "thumb_url":"'. $row[11].'"
  767. }';
  768. mysql_free_result($rs); //关闭数据集
  769. return $result;
  770. }
  771. //查询进入人的相关信息的
  772. function getinfo_s($open_id){
  773. $link=mysql_connect("localhost","we70000","w7pass000");
  774. if(!$link) echo "没有连接成功!";
  775. mysql_select_db("we7", $link); //选择数据库
  776. //查询userid ,昵称,图片
  777. $q = "SELECT * FROM hjmall_user where (wechat_open_id ='".$open_id."' and store_id=20) "; //SQL查询语句
  778. mysql_query("SET NAMES utf8");
  779. $rs = mysql_query($q); //获取数据集
  780. if(!$rs){die("Valid result!");}
  781. $row = mysql_fetch_array($rs);
  782. $result= $row[10] ;
  783. mysql_free_result($rs); //关闭数据集
  784. return $result;
  785. }
  786. function alluser($ucid,$website){
  787. $token_access_url = "{$website}/app/index.php?i=".$ucid."&c=entry&a=wxapp&do=Getallopenid&m=qidong_app";
  788. $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
  789. $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP
  790. $data=$result['data'] ;
  791. return json_encode($data) ;
  792. }
  793. function jiqiren($keyword)
  794. {
  795. $token_access_url = "http://api.qingyunke.com/api.php?key=free&appid=0&msg=".urlencode($keyword);
  796. // logger( $token_access_url);
  797. $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
  798. $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP 变量
  799. $content = $result['content'];
  800. $content=str_replace("{br}","\n",$content);
  801. return $content;
  802. }
  803. function getToken($appid,$appsecret,$jsonid){
  804. $file = file_get_contents("json/{$jsonid}_token.json",true);
  805. $result = json_decode($file,true);
  806. if (time() > $result['expires']){
  807. $data = array();
  808. $data['access_token'] = getNewToken($appid,$appsecret);
  809. $data['expires']=time()+7200;
  810. $jsonStr = json_encode($data);
  811. $fp = fopen("json/{$jsonid}_token.json", "w");
  812. fwrite($fp, $jsonStr);
  813. fclose($fp);
  814. return $data['access_token'];
  815. }else{
  816. return $result['access_token'];
  817. }
  818. }
  819. function getNewToken($appid,$appsecret){
  820. $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
  821. $access_token_Arr = https_request($url);
  822. return $access_token_Arr['access_token'];
  823. }
  824. function https_request ($url){
  825. $ch = curl_init();
  826. curl_setopt($ch, CURLOPT_URL, $url);
  827. curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  828. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  829. $out = curl_exec($ch);
  830. curl_close($ch);
  831. return json_decode($out,true);
  832. }
  833. function deljson($path){//读出第一行 删除
  834. $f= fopen($path, "r");
  835. $line = fgets($f);
  836. ob_start();
  837. fpassthru($f);
  838. fclose($f);
  839. file_put_contents($path, ob_get_clean() );
  840. $nowopenid=json_decode($line, true);
  841. return $nowopenid;
  842. }
  843. function dujson($path){//读出第一行
  844. $f= fopen($path, "r");
  845. $line = fgets($f);
  846. return trim($line);
  847. }
  848. function ifpaidui($path,$openid){//查看用户是否在队列
  849. $lines = file($path);
  850. $i=0;
  851. $cf=0;
  852. foreach ($lines as $line) {
  853. $line = rtrim($line);
  854. $i++;
  855. $nowopenid=json_decode($line, true);
  856. if ($openid==$nowopenid['openid']){
  857. $cf=$i;
  858. $findedata = array(
  859. 'shunxu' => $cf,
  860. 'nickname' => $nowopenid['nickname'],
  861. 'openid'=> $nowopenid['openid'],
  862. 'id' => $nowopenid['id']
  863. );
  864. break;//找到后中止.
  865. }
  866. // more statements...
  867. }//如果没找到.
  868. if ($cf==0) {
  869. $data = array(
  870. 'shunxu' => $cf,
  871. 'nickname' => '无',
  872. 'openid'=> '',
  873. 'avartar' => ''
  874. );
  875. return $data;
  876. }
  877. else{
  878. return $findedata;
  879. }
  880. }
  881. function paiduilist($path){//查看用户是否在队列
  882. $lines = file($path);
  883. $i=0;
  884. $cf=0;
  885. foreach ($lines as $line) {
  886. $line = rtrim($line);
  887. $i++;
  888. $nowopenid=json_decode($line, true);
  889. $paidui=$paidui.'\n ID:'.$nowopenid['id'].' 昵称:'.$nowopenid['nickname'];
  890. // more statements...
  891. }//如果没找到.
  892. return $paidui;
  893. }
  894. function savejson($path,$data){ //保存1行
  895. //去除重复
  896. $lines = file($path);
  897. $i=0;
  898. $cf=0;
  899. foreach ($lines as $line) {
  900. $line = rtrim($line);
  901. $i++;
  902. // print("$line\n");
  903. if ($data==$line){
  904. $cf=$i;
  905. break;
  906. }
  907. // more statements...
  908. }
  909. if ($cf==0) {
  910. // echo "newone:\n";
  911. file_put_contents($path, $data.PHP_EOL, FILE_APPEND);
  912. return $cf;
  913. }
  914. else{
  915. return $cf;
  916. }
  917. }
  918. function edituser($ucid,$openid,$nickname,$website) //改名取号
  919. {
  920. $token_access_url = "{$website}/app/index.php?i=".$ucid."&c=entry&a=wxapp&do=edituser&m=qidong_app&openid=".$openid."&nickname=".$nickname;
  921. $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
  922. $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP
  923. $data=$result['data'];
  924. if ($data==1){$data='取号成功!';}
  925. else{$data='取号失败!';}
  926. return $data ;
  927. }
  928. function edituserid($ucid,$id,$nickname,$website) //改名取号
  929. {
  930. $token_access_url = "{$website}/app/index.php?i=".$ucid."&c=entry&a=wxapp&do=EdituserID&m=qidong_app&id=".$id."&nickname=".$nickname;
  931. $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
  932. $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP
  933. $data=$result['data'];
  934. if ($data==1){$data='备注成功!';}
  935. else{$data='备注失败!';}
  936. return $data ;
  937. }
  938. function getusernew($ucid,$openid,$nickname,$website)
  939. {
  940. $file = file_get_contents("json/{$ucid}_token.json",true);
  941. $result = json_decode($file,true);
  942. if ($openid != $result['openid']){
  943. $data = array();
  944. $token_access_url = "{$website}/app/index.php?i=".$ucid."&c=entry&a=wxapp&do=getuser&m=qidong_app&openid=".$openid."&nickname=".$nickname;
  945. // logger( $token_access_url);
  946. $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
  947. $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP
  948. $nickname= $result['data']['wxapp'][0]['nickname'];
  949. if (trim($nickname==null)) {
  950. $nickname='会员'.$result['data']['wxapp'][0]['id'];
  951. $isid=1;
  952. }
  953. $data = array(
  954. 'nickname' => $nickname,
  955. 'id' => $result['data']['wxapp'][0]['id'],
  956. 'openid'=> $result['data']['wxapp'][0]['openid'],
  957. 'beizhu'=> $result['data']['wxapp'][0]['zhuangtai'],
  958. 'avartar' => $result['data']['wxapp'][0]['avartar']
  959. );
  960. $jsonStr = json_encode($data);
  961. $fp = fopen("json/{$ucid}_token.json", "w");
  962. fwrite($fp, $jsonStr);
  963. fclose($fp);
  964. return $data;
  965. }else{
  966. return $result;
  967. }
  968. }
  969. function hiuser($ucid,$id,$website){
  970. $token_access_url = "{$website}/app/index.php?i=".$ucid."&c=entry&a=wxapp&do=getopenid&m=qidong_app&id=".$id;
  971. $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
  972. $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP
  973. $data=$result['data'][0] ;
  974. return $data ;
  975. }
  976. function Finduser($ucid,$tablename,$culname,$openid,$findname,$website){
  977. //&tablename=dc_user&culname=openid&findname=name&openid=ogMce0dAqzqm3LSCIBzoHb4XYgFU
  978. $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}";
  979. // logger( $token_access_url);
  980. $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
  981. logger('--------------'.$res);
  982. $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP
  983. $data=$result['data']['nickname'] ;
  984. return $data ;
  985. }
  986. function getuser($ucid,$openid,$nickname,$website)
  987. {
  988. ///先判断缓存文件是否存在
  989. if (file_exists("json/".$ucid."_user.json")){
  990. $json = file_get_contents("json/".$ucid."_user.json");
  991. $userinfos = json_decode($json,true);
  992. $userid=$userinfos[$openid]['id'];
  993. }
  994. if ($userid==null){
  995. $token_access_url = "{$website}/app/index.php?i=".$ucid."&c=entry&a=wxapp&do=getuser&m=qidong_app&openid=".$openid."&nickname=".$nickname;
  996. // logger( $token_access_url);
  997. $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容
  998. $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP
  999. $nickname= $result['data']['wxapp'][0]['nickname'];
  1000. $beizhu= $result['data']['wxapp'][0]['zhuangtai'];
  1001. if (trim($nickname)==null) {
  1002. $nickname='会员'.$result['data']['wxapp'][0]['id'];
  1003. $isid=1;
  1004. }
  1005. $userid=$result['data']['wxapp'][0]['id'];
  1006. }else
  1007. {
  1008. $beizhu= $userinfos[$openid]['zhuangtai'];
  1009. if (trim($userinfos[$openid]['nickname'])==null) {
  1010. $nickname='会员'.$userinfos[$openid]['id'];
  1011. $isid=1;
  1012. }else{
  1013. $nickname=$userinfos[$openid]['nickname'];
  1014. $userid=''.$userinfos[$openid]['id'];
  1015. }
  1016. }
  1017. //缓存 先去判断文件是否存在 .
  1018. $data = array(
  1019. 'nickname' => $nickname,
  1020. 'id' => $userid,
  1021. 'beizhu' => $beizhu,
  1022. 'isid'=> $isid,
  1023. 'avartar' => ''
  1024. );
  1025. return $data ;
  1026. }
  1027. function changeurl($a){
  1028. $bi= strpos($a,'[[');
  1029. if ($bi==0){
  1030. return $a;
  1031. }else{
  1032. $ei= strpos($a,']]');
  1033. $qb=substr($a,0,$bi);
  1034. $eb=substr($a,$ei+2);
  1035. $b=substr($a,$bi+2,$ei-$bi-2);
  1036. $ci=strpos($b,'|');
  1037. $add=substr($b,0,$ci);
  1038. $herf=substr($b,$ci+1,strlen($b)-$ci);
  1039. }
  1040. return $qb."<a href='".$herf."'>".$add."</a>".$eb;
  1041. }
  1042. function GrabImage($url, $filename = "") {
  1043. if ($url == ""):return false;
  1044. endif;
  1045. //如果$url地址为空,直接退出
  1046. if ($filename == "") {
  1047. //如果没有指定新的文件名
  1048. $ext = strrchr($url, ".");
  1049. //得到$url的图片格式
  1050. if ($ext != ".gif" && $ext != ".jpg"):return false;
  1051. endif;
  1052. //如果图片格式不为.gif或者.jpg,直接退出
  1053. $filename = date("dMYHis") . $ext;
  1054. //用天月面时分秒来命名新的文件名
  1055. }
  1056. ob_start();//打开输出
  1057. readfile($url);//输出图片文件
  1058. $img = ob_get_contents();//得到浏览器输出
  1059. ob_end_clean();//清除输出并关闭
  1060. $size = strlen($img);//得到图片大小
  1061. $fp2 = @fopen($filename, "a");
  1062. fwrite($fp2, $img);//向当前目录写入图片文件,并重新命名
  1063. fclose($fp2);
  1064. return $filename;//返回新的文件名
  1065. }
  1066. function uploadFile($file, $type = 'image', $acctoken = '') {
  1067. // $post_data ['type'] = $type; // 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)
  1068. $post_data ['media'] = '@'.$file;
  1069. //$post_data ['media'] =$file;
  1070. $url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token={$acctoken}&type=image";
  1071. $output=http_post_media($url, $post_data);
  1072. return $output;
  1073. }
  1074. function http_post_media($url,$strPOST)
  1075. {
  1076. $oCurl = curl_init ();
  1077. curl_setopt ( $oCurl, CURLOPT_SAFE_UPLOAD, false);
  1078. if (stripos ( $url, "https://" ) !== FALSE) {
  1079. curl_setopt ( $oCurl, CURLOPT_SSL_VERIFYPEER, FALSE );
  1080. curl_setopt ( $oCurl, CURLOPT_SSL_VERIFYHOST, false );
  1081. }
  1082. curl_setopt ( $oCurl, CURLOPT_URL, $url );
  1083. curl_setopt ( $oCurl, CURLOPT_RETURNTRANSFER, 1 );
  1084. curl_setopt ( $oCurl, CURLOPT_POST, true );
  1085. curl_setopt ( $oCurl, CURLOPT_POSTFIELDS, $strPOST );
  1086. $sContent = curl_exec ( $oCurl );
  1087. $aStatus = curl_getinfo ( $oCurl );
  1088. curl_close ( $oCurl );
  1089. if (intval ( $aStatus ["http_code"] ) == 200) {
  1090. return $sContent;
  1091. } else {
  1092. return false;
  1093. }
  1094. }
  1095. ?>