Description
We are currently developing a sample Zoom appointment integration with our application and are facing an issue while configuring the Event Subscription webhook.
Before Zoom enables the Event Subscription, Zoom sends an endpoint.url_validation request to our webhook endpoint containing a plainToken. Our application uses the plainToken and the configured Zoom Webhook Secret Token to generate the required encryptedToken using HMAC-SHA256 and returns the validation response to Zoom.
We have verified our implementation and confirmed the following:
- The Zoom validation request is reaching our server.
- Our application receives the
plainTokensuccessfully. - The required
encryptedTokenis generated using HMAC-SHA256. - Our application returns an HTTP 200 response.
- We tested the endpoint using Postman and cURL, and the endpoint is accessible.
- We reviewed the application and server logs and confirmed that the validation request is being processed successfully.
However, the Zoom Marketplace continues to display:
URL validation failed. Try again.
Error?
URL validation failed. Try again.
How To Reproduce
Steps to reproduce the behavior:
1. /api/zoom/webhooks
2. Server-To-Server OAuth - endpoint.url_validation
3. **URL validation failed. Try again.
Larvael Code**
Route::post(‘/zoom/webhook’, function (Request $request) {
$payload = json_decode($request->getContent(), true);
if (($payload\['event'\] ?? null) === 'endpoint.url_validation') {
$plainToken = $payload\['payload'\]\['plainToken'\] ?? '';
$secretToken = "\*\*\*\*\*\*\*\*\*\*";
$encryptedToken = hash_hmac('sha256', $plainToken, $secretToken);
return response()->json([
'plainToken' => $plainToken,
'encryptedToken' => $encryptedToken,
\], 200);
}
return response()->json(\['message' => 'OK'\], 200);
});