導讀微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現(xiàn)了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一... 微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現(xiàn)了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創(chuàng)新,經(jīng)過將近兩年的發(fā)展,已經(jīng)構(gòu)造了新的小程序開發(fā)環(huán)境和開發(fā)者生態(tài)。 本篇文章給大家?guī)淼膬?nèi)容是關(guān)于如何通過LayuiAdmin&LayIM&Thinkphp&Gateway實現(xiàn)小程序多客服接入系統(tǒng)的例子,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。先看下效果圖吧。 1、小程序客服對話實時接收并推送到Layim 實現(xiàn)邏輯: 以微信訪客的openid作為唯一標識符,新建一個layim用戶并將其作為客服的好友。后端TP作做消息接收和轉(zhuǎn)發(fā)的中間層。 實現(xiàn)步驟(重點說gateway部分): 1、安裝TP,composer安裝workerman、gateway 2、在tp的根目錄創(chuàng)建server.php(其他名字都行)#!/usr/bin/env php <?php ini_set('display_errors', 'on'); if(strpos(strtolower(PHP_OS), 'win') === 0) { exit("start.php not support windows.\n"); } // 檢查擴展 if(!extension_loaded('pcntl')) { exit("Please install pcntl extension. See http://doc3.workerman.net/appendices/install-extension.html\n"); } if(!extension_loaded('posix')) { exit("Please install posix extension. See http://doc3.workerman.net/appendices/install-extension.html\n"); } define('APP_PATH', __DIR__ . '/application/');//如果修改了也要跟著修改,tp的application define('BIND_MODULE','chat/Run');//這個位置是你唯一要自定義的 // 加載框架引導文件 require __DIR__ . '/thinkphp/start.php'; 3、在tp的application目錄下創(chuàng)建一個模塊chat,創(chuàng)建Run的控制器,這里除了Events的命名空間,其他基本不需要改動,改動端口有點坑,建議就用gateway默認的 class Run { public function __construct() { //注冊register new Register('text://0.0.0.0:1236'); //初始化 bussinessWorker 進程 $worker = new BusinessWorker(); $worker->name = 'WebIMBusinessWorker'; $worker->count = 4; $worker->registerAddress = '127.0.0.1:1236'; //設置處理業(yè)務的類,此處制定Events的命名空間 $worker->eventHandler = '\app\chat\controller\Events'; // 初始化 gateway 進程 $gateway = new Gateway("websocket://0.0.0.0:8282"); $gateway->name = 'WebIMGateway'; $gateway->count = 4; $gateway->lanIp = '127.0.0.1'; $gateway->startPort = 2900; $gateway->registerAddress = '127.0.0.1:1236'; $gateway->pingInterval = 55; $gateway->pingNotResponseLimit = 1; $gateway->pingData = '{"emit":"ping"}';//此處為心跳包數(shù)據(jù) //運行所有Worker; if(!defined('GLOBAL_START')) { Worker::runAll(); } } } 4、創(chuàng)建Event.php的控制器類,Event.php是主要的邏輯處理類,這里我只簡單說下我的onmessage方法: public static function onMessage($client_id, $data){ $message = json_decode($data, true); $message_type = $message['emit']; switch($message_type) { case 'init': // uid //根據(jù)token獲取uid $tokenCache = new TokenCache(); $user = $tokenCache->where('token','eq',$message['token'])->order('id DESC')->find(); if(!$user->uid||$user->date+$user->lifetime<time()){ self::onClose($client_id); } $wechatMsgUser = new WechatMsgUser(); $msgUser = $wechatMsgUser->where('openid','eq',$user->uid)->where('type','eq',0)->find(); if(!$msgUser->id){ self::onClose($client_id); } //*客服上線,設置數(shù)據(jù)庫狀態(tài)字段為在線狀態(tài) $msgUser->status = 1; $msgUser->save(); $uid = $msgUser->id; // 設置session,這個$_SESSION我是為了下面的onclose方法里設置客服離線狀態(tài) $_SESSION = [ 'id' => $uid, ]; // 將當前$client_id與uid綁定 Gateway::bindUid($client_id, $uid); $msgService = new MsgService(); $msgService->checkLeavedMessage($uid); return; break; case 'ping': $pingData=[ 'emit'=>'pong', 'data'=>$client_id ]; Gateway::sendToClient($client_id, json_encode($pingData)); return; default: echo "unknown message $data" . PHP_EOL; } } 這里因為我用的是jwt驗證,所以多繞了一層,先通過token找到layuiadmin的uid,再通過uid找到客服ID,把客服ID和client_id綁定,這樣在后端php里就可以直接使用gateway::sendToUid來推送消息了。 5、tp后端,在需要推送消息的地方使用GatewayClient來主動推送消息。 這是接收消息的整個流程:微信開放接口請求消息推送接口url→php拿到數(shù)據(jù),存庫,通過GatewayClient主動推送到指定客服→前端拿到數(shù)據(jù)通過layim渲染到視圖 其實這個Event.php我只做了兩件事,一個是心跳檢測,另一個就是登陸后將客服的ID和client_id綁定。 發(fā)送消息我用的是ajax的http方式發(fā)送,沒有使用websocket。 未能實現(xiàn)的功能: 消息狀態(tài)的處理,未讀/已讀 layim隱身/在線 目前只有文字消息,沒有圖片和卡片消息 相關(guān)推薦: 以上就是如何通過LayuiAdmin&LayIM&Thinkphp&Gateway實現(xiàn)小程序多客服接入系統(tǒng)的例子的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章! 小程序是一種不需要下載安裝即可使用的應用,它實現(xiàn)了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。 |
溫馨提示:喜歡本站的話,請收藏一下本站!