Django-ninja Webhook Server - ошибка подписи/неправильный запрос

Я работаю над приложением Django, где мне нужно разработать сервер webhook с помощью Django-ninja. Приложение webhook получает уведомление о новом заказе, как описано здесь: https://developer.wolt.com/docs/marketplace-integrations/restaurant-advanced#webhook-server

Мой код ниже:

@api.post("/v1/wolt-new-order")
def wolt_new_order(request: HttpRequest):

    received_signature = request.headers.get('wolt-signature')
    if not received_signature:
        print("Missing signature")
        return HttpResponse('Missing signature', status=400)


    payload = request.body


    expected_signature = hmac.new(
        CLIENT_SECRET.encode(),
        payload,
        hashlib.sha256
    ).hexdigest()
    
    print(f"Received: {received_signature}")
    print(f"Expected: {expected_signature}")


    if not hmac.compare_digest(received_signature, expected_signature):
        return HttpResponse('Invalid signature', status=400)

    print(payload)

    return HttpResponse('Webhook received', status=200)

По какой-то причине это всегда возвращает "код ошибки 400, плохой синтаксис запроса", и две подписи всегда разные.

Я правильно импортирую CLIENT_SECRET, и у меня правильно установлены все необходимые библиотеки.

Как ни странно, когда я делаю то же самое в тестовом приложении Flask, я получаю уведомление от webhook корректно и без проблем.

Ниже приведен код Flask:

import hmac
import hashlib
from flask import Flask, request, abort

app = Flask(__name__)

@app.route('/api/v1/wolt-new-order', methods=['POST'])
def webhook():
    # Extract the wolt-signature header
    received_signature = request.headers.get('wolt-signature')
    
    print(received_signature)

    # Extract the request payload
    payload = request.get_data()
    
    print(payload)

    # Compute the expected signature
    expected_signature = hmac.new(
        CLIENT_SECRET.encode(),
        payload,
        hashlib.sha256
    ).hexdigest()
    
    print(expected_signature)

    # Compare signatures
    if not hmac.compare_digest(received_signature, expected_signature):
        abort(400, 'Invalid signature')

    
    print(payload)

    return 'Webhook received', 200

if __name__ == '__main__':
    app.run(port=8000)

Мой сервер вебхуков находится за ngrok. Есть идеи?

Что я делаю не так? Есть предложения?

Вернуться на верх