Skip to main content

Documentation Index

Fetch the complete documentation index at: https://piriod-d406ac55.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Piriod firma cada solicitud de webhook que envía, lo que permite confirmar que la solicitud es auténtica y no ha sido falsificada por un tercero. La verificación es opcional, pero se recomienda encarecidamente para los endpoints de producción.

Obtén tu secreto de webhook

Cada webhook registrado tiene su propio secreto único.
1

Abre tu webhook

Ve a Configuración de la organización → Webhooks y haz clic en el webhook que deseas verificar.
2

Copia el secreto

Busca la sección Secreto y haz clic en Copiar secreto. Guarda este valor de forma segura en tu servidor; nunca lo expongas en el código del cliente.
Cada webhook tiene una clave secreta diferente. Si utilizas varios webhooks, recupera y almacena una clave secreta para cada uno por separado.

Verificar la firma

Piriod incluye la firma en el encabezado HTTP x-piriod-signature de cada solicitud. Para verificarla, calcula un HMAC-SHA256 sobre los valores del payload de forma concatenada utilizando tu secreto de webhook y, a continuación, compara el resultado con el valor del encabezado.
import hashlib
import hmac

from flask import Flask, request, abort

app = Flask(__name__)

WH_SECRET = 'whsecret_g9En7rfNBZBYFr968pLqPDQ6O302Q1DAI3TXi3aky1eAcUqgJg3EjBP'

@app.route('/webhooks', methods=['POST'])
def webhooks():
    payload = request.json
    piriod_signature = request.headers.get('x-piriod-signature')
    if not _signature_is_valid(payload, piriod_signature):
        abort(400)
    if not payload:
        abort(400)
    if payload.get('event') == 'payment.created':
        # handle the payment.created event
        pass
    return '', 200

def _signature_is_valid(payload, piriod_signature):
    signature = hmac.new(
        WH_SECRET.encode(),
        msg=(''.join(map(str, payload.values()))).encode('UTF-8'),
        digestmod=hashlib.sha256
    ).hexdigest()
    return signature == piriod_signature

if __name__ == '__main__':
    app.run(debug=True)
Si la verificación de la firma falla, devuelve un código de estado 400 y no proceses el evento. Esto protege tu aplicación de solicitudes falsificadas.