安裝環(huán)境 PHP 拓展 直接使用 寶塔一鍵安裝 (Windows系統(tǒng)不支持)
設(shè)置命令行的PHP版本避免執(zhí)行腳本時(shí) 獲取不到 swoole
檢查swoole是否安裝成功
獲取官方SDK?
GitHub - kaiheila/php-bot: 開黑啦機(jī)器人的php版本https://github.com/kaiheila/php-bot
?配置參數(shù) 機(jī)器人鏈接模式選擇 webhook
密鑰 自己設(shè)置
回調(diào)鏈接直接填寫 (配置回調(diào)地址之前 先將機(jī)器人邀請(qǐng)進(jìn)頻道,在域名后面一定要自己定義域名端口如果是正常的80端口會(huì)被占用導(dǎo)致無(wú)法運(yùn)行)
端口一定要開放否則無(wú)法監(jiān)聽到,如果是騰訊云就去安全組釋放端口,最好在寶塔面板頁(yè)開放端口
獲取到邀請(qǐng)鏈接后直接請(qǐng)求即可
配置好參數(shù)示例:?
使用tp5框架創(chuàng)建一個(gè) api 文件 用于 配置 WebHook 回調(diào)地址 處理 Challenge 請(qǐng)求
(數(shù)據(jù)默認(rèn)會(huì)先被進(jìn)行?zlib (deflate)
?壓縮再發(fā)送。請(qǐng)先使用你使用的語(yǔ)言的?zlib
?相關(guān)方法解壓,或在提供給 KOOK 開放平臺(tái)的 callback url 中加上 Query 參數(shù)?compress=0
?以停用壓縮)
<?php
namespace app\api\controller;
use think\Env;
use think\Log;
class Api
{
private $config = [];
public function __construct()
{
$this->config = [
'token' => Env::get('kook.token'),
'verify_token' => Env::get('kook.verify_token'),
'encrypt_key' => Env::get('kook.encrypt_key'),
];
}
public function start(){
$params = file_get_contents("php://input");
Log::info("接收參數(shù)");
$param = json_decode($params,true);
Log::info($param);
if (isset($param['encrypt']) && !empty($param['encrypt'])){
Log::info('解密信息');
$challenge = $this->decryptData($param['encrypt'],$this->config['encrypt_key']);
Log::info($challenge);
$response_data = json_decode($challenge,true);
Log::info($response_data);
if (!empty($response_data)){
// 判斷是否是驗(yàn)證請(qǐng)求 s 等于 0 代表 消息(包含聊天和通知消息)
if (isset($response_data['s']) && $response_data['s'] == 0 && isset($response_data['d']['channel_type']) && $response_data['d']['channel_type'] == 'WEBHOOK_CHALLENGE'){
// 判斷驗(yàn)證token是否正確
if ($response_data['d']['verify_token'] == $this->config['verify_token']) {
// code...
return json(['challenge' => $response_data['d']['challenge']]);
}else {
return json(['msg'=>'驗(yàn)證錯(cuò)誤!']);
}
}
}
}
}
/**
* 數(shù)據(jù)加密
* @param $data
* @param $key 密鑰
* @return string
*/
private function encryptData($data, $key)
{
$iv = substr(md5(uniqid()), 0, 16);
return base64_encode($iv.openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv));
}
/**
*
* 數(shù)據(jù)解密
* @param $eData
* @param $key 密鑰
* @return false|string
*/
private function decryptData($eData, $key)
{
$eData = base64_decode($eData);
$iv = substr($eData, 0, 16);
return openssl_decrypt(substr($eData, 16), 'aes-256-cbc', $key, 0, $iv);
}
}
?在項(xiàng)目根目錄(在tp5 command文件夾中創(chuàng)建也可?自定義命令行 ) 創(chuàng)建一個(gè) PHP文件 使用腳本運(yùn)行 復(fù)制官方示例webhook.php即可 配置好參數(shù)
?官方示例使用的是 swoole中的 http 服務(wù)器
實(shí)例化http服務(wù)器
$http = new Swoole\Http\Server(監(jiān)聽I(yíng)P地址,監(jiān)聽端口);
監(jiān)聽I(yíng)P地址: 可以填寫 0.0.0.0 代表所有,可以指定 使用當(dāng)前服務(wù)器IP
監(jiān)聽端口:則是你在機(jī)器人后臺(tái)填寫的 http請(qǐng)求地址的端口
參數(shù)配置好,打開終端 ,進(jìn)入項(xiàng)目根目錄
使用命令 檢查端口是否被占用
netstat -anp | grep 9501
如果被占用這 使用命令 kill 進(jìn)程 注意如果進(jìn)程后面跟著 nginx 則代表端口被 nginx占用,那是在綁定域名時(shí)設(shè)置了端口號(hào),這時(shí)候去寶塔域名把綁定了端口的域名刪除即可,如果直接kill進(jìn)程會(huì)導(dǎo)致nginx 停止運(yùn)行(綁定域名時(shí)不用設(shè)置端口,設(shè)置回調(diào)地址時(shí)設(shè)置端口即可)
在執(zhí)行 文件?
php webhook.php 啟動(dòng)?
啟動(dòng)成功 打印 啊啊啊
這是我自己在代碼中添加的日志
$session->log('receiveFrame', '啊啊啊啊');
?在頻道內(nèi)隨便發(fā)送一條信息
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-668058.html
?監(jiān)聽到數(shù)據(jù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-668058.html
到了這里,關(guān)于開黑啦kook 機(jī)器人開發(fā) PHP swoole Liunx 服務(wù)器(寶塔)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!