Skip to main content

handle Method

Overview

The handle method processes raw webhook payloads from payment processors. It verifies webhook signatures and returns a normalized response.

Business Use Case: When Stripe sends a webhook that a payment succeeded, verify it's authentic and update your order status.

Purpose

ChallengeSolution
Signature verificationAutomatic verification
Multiple formatsNormalized responses
SecurityValidates secrets

Request Fields

FieldTypeRequiredDescription
merchant_event_idstrYesYour unique event reference
payloadstr/dictYesRaw webhook body
headersdictYesHTTP headers
webhook_secretstrYesWebhook signing secret

Response Fields

FieldTypeDescription
event_typestrType: payment.captured, refund.succeeded, etc.
event_responsedictPayment/refund/dispute details
source_verifiedboolWhether signature verified
event_statusstrCOMPLETE, INCOMPLETE

Example

SDK Setup

from orchestratorx_prism import EventClient

event_client = EventClient(
connector='stripe',
api_key='YOUR_API_KEY'
)

Flask Webhook Handler

from flask import Flask, request

@app.route('/webhooks/stripe', methods=['POST'])
async def handle_webhook():
request_data = {
"merchant_event_id": f"evt_{int(time.time())}",
"payload": request.get_data().decode(),
"headers": dict(request.headers),
"webhook_secret": os.environ['STRIPE_WEBHOOK_SECRET']
}

try:
response = await event_client.handle(request_data)

if response["event_type"] == "payment.captured":
await fulfill_order(
response["event_response"]["payments_response"]["merchant_transaction_id"]
)

return "OK", 200
except Exception as e:
return str(e), 400

Response

{
"event_type": "payment.captured",
"event_response": {
"payments_response": {
"merchant_transaction_id": "txn_order_001",
"connector_transaction_id": "pi_3Oxxx...",
"status": "CAPTURED"
}
},
"source_verified": True,
"event_status": "COMPLETE"
}

Event Types

Event TypeDescription
payment.authorizedPayment authorized
payment.capturedPayment completed
payment.failedPayment declined
refund.succeededRefund processed
dispute.createdNew chargeback

Next Steps