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);