Verificar firma
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)
No content yet
No content yet
No content yet
No content yet
No content yet
Updated over 1 year ago