Skip to content

laravel实现gitee的webhook ​

创建一个 gitee 仓库 ​

这里创建一个 test 仓库,点击 管理 按钮,会打开仓库管理界面 创建一个gitee仓库

仓库管理页面 ​

仓库管理页面

打开 WebHooks 管理页面 ​

点击 WebHooks 按钮后,打开 WebHooks 管理 页面 点击WebHooks按钮

WebHooks 管理页面 ​

点击 添加 webHook 按钮,打开添加 WebHooks 页面 添加 webHooks

添加 WebHook 页面 ​

添加WebHook页面

填写 URL 和 WebHook 密码 ​

填写URL和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);