डेवलपर्स

Webhooks

जब इनवॉइस की स्थिति बदलती है, तो CryBit आपके मर्चेंट के webhook URL पर JSON बॉडी के साथ एक साइन की गई POST रिक्वेस्ट भेजता है।

सेटअप

मर्चेंट सेटिंग्स में, इंटीग्रेशन टैब पर webhook URL सेट करें और इवेंट्स चुनें: paid, expired, refunded, cancelled। URL एक पब्लिक HTTP या HTTPS एड्रेस होना चाहिए जो पोर्ट 80, 443, 8080 या 8443 पर हो; रीडायरेक्ट फॉलो नहीं किए जाते। यह मर्चेंट पर सेट होता है, इनवॉइस रिक्वेस्ट में नहीं।

हेडर

हेडरवैल्यू
X-CryBit-Eventइवेंट का नाम, उदाहरण के लिए payment.paid।
X-CryBit-Signaturet=<unix time>,v1=<hex>: आपकी signing secret के साथ "<t>.<raw body>" का HMAC-SHA256।

सिग्नेचर वेरिफाई करें

signing secret मर्चेंट सेटिंग्स में webhook URL के बगल में दिखाई जाती है। raw body पर सिग्नेचर कैलकुलेट करें, constant time में तुलना करें और पांच मिनट से पुरानी रिक्वेस्ट को रिजेक्ट करें।

PHP

$secret = getenv('CRYBIT_WEBHOOK_SECRET');
$body   = file_get_contents('php://input');
$header = $_SERVER['HTTP_X_CRYBIT_SIGNATURE'] ?? '';

parse_str(str_replace(',', '&', $header), $p);   // t=…&v1=…
$t = (int) ($p['t'] ?? 0);
$expected = hash_hmac('sha256', $t . '.' . $body, $secret);

if (abs(time() - $t) > 300 || !hash_equals($expected, $p['v1'] ?? '')) {
    http_response_code(400);
    exit;
}
// the request is genuine: store the event, answer 200, do the rest later
http_response_code(200);

Node.js

import crypto from 'node:crypto'

export function verify(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(',').map((kv) => kv.split('=')))
  const t = Number(parts.t)
  const expected = crypto.createHmac('sha256', secret).update(t + '.' + rawBody).digest('hex')
  const ok = parts.v1 && parts.v1.length === expected.length
    && crypto.timingSafeEqual(Buffer.from(parts.v1), Buffer.from(expected))
  return ok && Math.abs(Date.now() / 1000 - t) <= 300
}

डिलीवरी और रीट्राई

  • जल्दी 2xx स्टेटस के साथ जवाब दें: CryBit लगभग बारह सेकंड इंतजार करता है।
  • अगर आप जवाब नहीं देते, तो CryBit 15 सेकंड, 1 मिनट, 5, 15 और 30 मिनट बाद, फिर 2, 6 और 24 घंटे बाद रीट्राई करता है।
  • 429 को छोड़कर कोई भी 4xx जवाब रीट्राई को रोक देता है।
  • एक ही इवेंट एक से ज्यादा बार आ सकता है: इसे idempotently हैंडल करें, order_id या इनवॉइस uuid से की गई कीइंग के साथ।
  • अगर आपसे कोई webhook छूट गया है, तो GET /api/v1/payments/{uuid} से स्टेटस पढ़ें: यह हमेशा सही जानकारी का स्रोत होता है।

FAQ

क्या मैं देख सकता हूं कि क्या डिलीवर हुआ?

हां। मर्चेंट अकाउंट में API logs पेज पर रिक्वेस्ट और webhook डिलीवरी की सूची status code और body के साथ दिखाई जाती है।

और

API key प्राप्त करें