laravel实现gitee的webhook
创建一个 gitee 仓库
这里创建一个 test 仓库,点击 管理 按钮,会打开仓库管理界面 
仓库管理页面

打开 WebHooks 管理页面
点击 WebHooks 按钮后,打开 WebHooks 管理 页面 
WebHooks 管理页面
点击 添加 webHook 按钮,打开添加 WebHooks 页面 
添加 WebHook 页面

填写 URL 和 WebHook 密码

填写 URL 和 WebHook 签名密钥

代码实现
php
// 获取 Gitee 请求头
$giteeToken = $request->header('X-Gitee-Token');
$giteeTimestamp = $request->header('X-Gitee-Timestamp');
if (!$giteeToken || !$giteeTimestamp) {
return response('Missing headers', 400);
}
// 从配置文件中读取时间差
$timestampTolerance = Config::get('webhook.timestamp_tolerance');
// 验证时间戳是否在有效期内
$currentTime = time();
if (abs($currentTime - (intval($giteeTimestamp) / 1000)) > $timestampTolerance) {
return response('Invalid timestamp', 401);
}
// 计算签名
$signKey = Config::get('webhook.gitee_sign_key'); // 从配置文件中读取
$secStr = "$giteeTimestamp\n$signKey";
$computeToken = base64_encode(hash_hmac('sha256', $secStr, $signKey, true));
// 安全比较 token
if (!hash_equals($computeToken, $giteeToken)) {
return response('Invalid token', 401);
}
// 执行 shell 命令
// 处理 Gitee Webhook 请求
return response('Gitee Webhook processed successfully', 200);