Verificar firma

Verifica los eventos que Piriod envía a tus endpoints de webhooks.

Opcionalmente puedes verificar que sea Piriod y no un tercero el que envía los eventos a tu endpoint de webhook. Esto lo haces haciendo una comparativa entre Piriod Signature enviado con el encabezado x-piriod-signature de la solicitud HTTP

Antes de verificar la firma, debes recuperar el secreto desde tu Webhook registrado en Piriod. Seleccione un webhook y obtén el secreto desde la sección Secreto, luego haz clic en Copiar secreto. Cada webhook registrado posee un secreto distinto, por lo que, si utilizas varios endpoints de webhooks y deseas verificar la firma, debes obtener un secreto para cada uno.

Ejemplo de código para verificar la firma

La verificación se realiza proporcionando el payload del evento enviado por Piriod a tu endpoint, el encabezado x-piriod-signature y el secreto del endpoint de webhook. Si la verificación falla, debes levantar una excepción.

import hashlib
import hmac

from flask import Flask

app = Flask(__name__)

WH_SECRET = 'whsecret_g9En7rfNBZBYFr968pLqPDQ6O302Q1DAI3TXi3aky1eAcUqgJg3EjBP'

# using Flask
@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':
        ##
        # do anything with your new payment
        ##
    return True

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()
    if not signature == piriod_signature:
        return False
    return True

if __name__ == '__main__':
    app.run(debug=True)

Última actualización