C#
वेबहुक सत्यापित करें
किसी डिलीवरी की बात पर भरोसा करने से पहले उसका हस्ताक्षर जाँचें।
एक डिलीवरी सत्यापित करें
using OpenEmail; var builder = WebApplication.CreateBuilder(args);var app = builder.Build();var secret = builder.Configuration["OPENEMAIL_WEBHOOK_SECRET"] ?? string.Empty; app.MapPost("/webhooks/openemail", async (HttpRequest request) =>{ using var reader = new StreamReader(request.Body); var payload = await reader.ReadToEndAsync(); try { var delivery = OpenEmailClient.VerifyWebhookSignature(payload, request.Headers["X-OpenEmail-Signature"], secret); app.Logger.LogInformation("{Type} {Id}", (string?)delivery["type"], (string?)delivery["id"]); return Results.NoContent(); } catch (OpenEmailWebhookException) { return Results.BadRequest(); }}); app.Run();OpenEmailClient.VerifyWebhookSignature() टाइमस्टैम्प और बॉडी पर हेडर के HMAC को स्थिर समय में जाँचता है, और इवेंट को JsonObject के रूप में लौटाता है। दूसरा आर्ग्युमेंट X-OpenEmail-Signature हेडर का मान है, और दूसरे ओवरलोड खुद अनुरोध के हेडर लेते हैं। सीक्रेट वही है जो client.Webhooks.CreateAsync() ने लौटाया था।
कच्ची बॉडी ठीक वैसी ही पास करें जैसी वह आई थी। जिस बॉडी को पार्स करके दोबारा एनकोड किया गया हो वह अब अपने हस्ताक्षर से मेल नहीं खाती।
पुरानी डिलीवरी
var payload = """{"id":"evt_1","type":"email.received"}"""; try{ OpenEmailClient.VerifyWebhookSignature(payload, "t=1767225600,v1=5f2d", "whsec_example", toleranceSeconds: 60);}catch (OpenEmailWebhookException error){ Console.WriteLine($"refused: {error.Message}");}पाँच मिनट से ज़्यादा पुरानी डिलीवरी अस्वीकार कर दी जाती है, इसलिए पकड़ा गया अनुरोध बाद में दोबारा नहीं चलाया जा सकता। toleranceSeconds: इन पाँच मिनट को बदलता है, और शून्य किसी भी उम्र की डिलीवरी स्वीकार करता है।
- गायब या गलत बनावट वाला हेडर, मेल न खाने वाला हस्ताक्षर और बहुत पुरानी डिलीवरी, तीनों
OpenEmailWebhookExceptionथ्रो करते हैं। - सीक्रेट बदलने के बाद एक डिलीवरी में एक से ज़्यादा हस्ताक्षर हो सकते हैं, और उनमें से किसी एक का मेल खाना काफ़ी है।
- जल्दी से 2xx स्टेटस के साथ जवाब दें। जिस डिलीवरी को कोई और जवाब मिलता है उसे बाद में दोबारा आज़माया जाता है।