使用 Zoho Sign 的 GET 方法在 Laravel 中创建 Webhook 接收器

Creating a Webhook Receiver in Laravel using GET Method for Zoho Sign

提问人:Rommel Verterra Traya 提问时间:9/19/2023 更新时间:9/19/2023 访问量:134

问:

我正在努力将 Zoho Sign 集成到我的 Laravel 应用程序中,我需要设置一个 webhook 接收器来从 Zoho Sign 获取完成的文档。但是,Zoho Sign 的 webhook 系统仅接受 GET 请求。

我之前在 Laravel 中成功实现了 webhook 接收器,但它们通常使用 POST 请求。我不确定如何处理 Laravel 中 webhook 端点的 GET 请求。

有人能否提供有关如何在 Laravel 中创建侦听来自 Zoho Sign 的 GET 请求的 webhook 接收器的指导或代码示例?具体来说,我需要捕获 Zoho Sign 发送的 webhook 数据,并在我的 Laravel 应用程序中对其进行处理。

任何帮助或见解将不胜感激!

这是我到目前为止尝试过的:

  1. 我在web_api.php中创建了一条新路线,如下所示:

Route::get('receive-waiver', [WaiverController::class, 'ReceiveWaiver']);

  1. 我创建了一个具有 ReceiveWaiver 函数的“WaiverController”。
<?php

namespace App\Http\Controllers\Zoho;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;

class WaiverController extends Controller
{

    public function ReceiveWaiver(Request $request)
    {
        \Log::info('Webhook success!');
        \Log::info('Webhook Data: ' . json_encode($request['requests']));
        \Log::info('Webhook Document: ' . json_encode($request['requests']['document_ids']));
        try {

            if (!empty($request['requests'])) {
                $waiverData = json_encode($request['requests']);
                $waiverDocument = json_encode($request['requests']['document_ids']);
                \Log::info('Success Webhook Data: ' . $waiverData);
                \Log::info('Success Webhook Document: ' . $waiverDocument);

            }

            return response()->json(['message' => 'Webhook received'], true);
        } catch (\Exception $e) {
            $errorMessage = $e->getMessage();
            \Log::info('Error Webhooks: ' . $errorMessage);
            return response()->json(['message' => $e->getMessage()]);
        }
    }
}

在 Zoho Sign 中,这就是它的样子。

Zoho Sign Webhook 设置

获取 Webhooks LaRavel-9 Zoho

评论


答:

0赞 Shri Hari L 9/19/2023 #1

Zoho Sign 的 webhook 系统仅接受 GET 请求。

否,Zoho Sign 会向您在设置页面中提供的 Webhook URL 发出 POST 请求。请求负载(请求正文)将包含与发生的事件相关的数据。

因此,您可以像以前一样继续开发。您可以使用应用程序中的 POST 路由来执行此操作。

Route::post('receive-waiver', [WaiverController::class, 'ReceiveWaiver']);
public function ReceiveWaiver(Request $request) {
   \Log::info('Webhook success!');
   $requestContent = $request->getContent();
   \Log::info('Webhook Data: ' . $requestContent);
   return response()->status(200);
}

您可以将以下这些链接作为参考:

https://help.zoho.com/portal/en/community/topic/webhooks-for-zoho-sign

https://help.zoho.com/portal/en/kb/zoho-sign/admin-guide/webhooks/articles/webhooks-management#Zoho_Sign_Webhooks

评论

0赞 OMi Shah 9/19/2023
另外,不要忘记将路由添加到 csrf 排除列表。
0赞 Rommel Verterra Traya 9/19/2023
在 Zoho Sign Webhook 中无法将路由路由转换为 POST。结果始终是:失败。
0赞 Rommel Verterra Traya 9/19/2023
另外,我已经将我的路由“receive-waiver”排除在 csrf 排除列表中
0赞 Shri Hari L 9/19/2023
更新了答案。您在 Laravel 日志上遇到任何错误吗?到目前为止,只需有一个空响应,然后在 Zoho Sign 上进行测试。当结果是 SUCCESS 时,我们可以继续前进。
0赞 Shri Hari L 9/19/2023
将路由保留为 POST 本身。