|
導讀微信小程序,簡稱小程序,英文名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)了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。 |
溫馨提示:喜歡本站的話,請收藏一下本站!