मुख्य कंटेंट तक स्किप करें

त्वरित शुरुआत

भुगतान का एक न्यूनतम इंटीग्रेशन: API के ज़रिए इनवॉइस बनाना और भुगतान की सूचना को प्रोसेस करना। आख़िरी सेक्शन ऑर्डर पूरा करने के बारे में है। उदाहरण अपने-आप में पूरे हैं; कोई SDK इस्तेमाल नहीं होता।

tip

AI एजेंट के साथ काम कर रहे हैं? उसे इस पृष्ठ का markdown वर्शन दें। इसमें आपकी साइट या स्टोर के लिए इंटीग्रेशन बनाने लायक पूरी जानकारी है।

ज़रूरी चीज़ें

मानकहाँ से मिलेगा
API कुंजीइंटीग्रेशन (Integrations) सेक्शन
प्रोजेक्ट IDप्रोजेक्ट (Projects) सेक्शन
Webhook की गुप्त कुंजी (Webhook secret)प्रोजेक्ट सेटिंग्स

उन्हीं प्रोजेक्ट सेटिंग्स में Webhook URL सेट करें — आपके सर्वर पर सूचना हैंडलर का पता। सिर्फ़ HTTPS; रीडायरेक्ट फ़ॉलो नहीं होते।

उदाहरणों में टेस्ट मान इस्तेमाल हुए हैं — इन्हें अपने मानों से बदल लें।

इनवॉइस बनाना

POST https://api.bitsby.app/invoices/create, API कुंजी Authorization हेडर में भेजी जाती है।

पैरामीटरअनिवार्यमान
projectIdहाँप्रोजेक्ट ID, UUID
amountFiatहाँइनवॉइस की राशि
currencyFiatहाँमुद्रा: USD, EUR, RUB
timeToPayहाँभुगतान की समय-सीमा, घंटों में: 0.5, 1, 3, 6, 12
descriptionनहींविवरण, ग्राहक को भुगतान पृष्ठ पर दिखता है
serviceDataनहींसर्विस डेटा, ग्राहक को नहीं दिखता। हम ऑर्डर नंबर भेजने की सलाह देते हैं: यह भुगतान की सूचना में वापस आता है
curl -X POST https://api.bitsby.app/invoices/create \
-H "Authorization: Token MSvL2ltaDZdWVjmZURURMVWhqSJLT2NURjhL2Fla1Z1T1IxQTltKs1T3Ay" \
-F "projectId=9deea1e2-0c08-41a3-bdc2-a34eada3892d" \
-F "amountFiat=49.90" \
-F "currencyFiat=USD" \
-F "timeToPay=1" \
-F "description=Order 4172" \
-F "serviceData=order-4172"

जवाब:

{
"result": "success",
"data": {
"id": "ade9550d-3dc7-4fd3-b94e-3b4c12aaaa0c",
"uid": "MXNj4m8HhcM4",
"createDatetime": "2026-09-14 10:12:03",
"timeToPayDatetime": "2026-09-14 11:12:03",
"commissionFiatUSD": 0.5,
"amountFiatUSD": 49.9,
"url": "https://dash.bitsby.app/invoices/pay/MXNj4m8HhcM4"
}
}

data.id को ऑर्डर के साथ सेव करें और ग्राहक को data.url पर भेजें — यह भुगतान पृष्ठ है। लिंक किसी भी तरीके से पहुँचाएँ: रीडायरेक्ट, ईमेल, बॉट का संदेश। इनवॉइस timeToPayDatetime (UTC) तक मान्य है।

सूचना को प्रोसेस करना

जब इनवॉइस भुगतान हुआ (Paid) स्थिति में जाता है, तो सेवा प्रोजेक्ट के Webhook URL पर POST अनुरोध भेजती है। बॉडी में JSON होता है; हस्ताक्षर हेडर में होते हैं:

हेडरमान
X-Timestampभेजने का समय, सेकंड में unix time
X-Signaturesha256= + स्ट्रिंग <timestamp>.<request body> का hex HMAC-SHA256

साइनिंग कुंजी Webhook की गुप्त कुंजी है। हस्ताक्षर raw अनुरोध बॉडी पर कंप्यूट होता है, इसलिए JSON पार्स करने से पहले हस्ताक्षर की जाँच करें।

<?php
$secret = 'k7QwR2mZ9tXbN4vL8sJpH3dF6yA1cE0u';

$body = file_get_contents('php://input');
$timestamp = $_SERVER['HTTP_X_TIMESTAMP'] ?? '';
$signature = $_SERVER['HTTP_X_SIGNATURE'] ?? '';

// Reject replayed requests: allow up to 5 minutes of clock drift
if (abs(time() - (int)$timestamp) > 300) {
http_response_code(400);
exit;
}

$expected = 'sha256='.hash_hmac('sha256', $timestamp.'.'.$body, $secret);

if (!hash_equals($expected, $signature)) {
http_response_code(403);
exit;
}

$invoice = json_decode($body, true)['invoice'];

if ($invoice['status'] === 'paid') {
// $invoice['serviceData'] — the order id passed at creation: 'order-4172'
// $invoice['amountFiat'] — the original invoice amount: 49.9
// Issue the order here, see the next section
}

http_response_code(200);

10 सेकंड के भीतर 2xx कोड के साथ जवाब दें। कोई भी दूसरा कोड, रीडायरेक्ट या टाइमआउट असफल डिलीवरी माना जाता है: सेवा 5 मिनट से 24 घंटे तक बढ़ते अंतराल पर पुनः प्रयास करती है, फिर रुक जाती है। लंबी प्रोसेसिंग क्यू में डालें: पहले 200 का जवाब दें, फिर ऑर्डर पर काम करें।

सूचना का पूरा फ़ॉर्मैट और फ़ील्ड का विवरण Webhook URL सेक्शन में है।

ऑर्डर पूरा करना

paid स्थिति वाली, जाँची हुई सूचना भुगतान की पुष्टि करती है। ऑर्डर पूरा करने के चरण:

  1. ऑर्डर खोजें invoice.serviceData से — वह मान, जो इनवॉइस बनाते समय भेजा गया था (order-4172)।
  2. invoice.id से जाँचें कि यह इनवॉइस पहले पूरा तो नहीं हो चुका। एक ही invoice.id वाली सूचना एक से ज़्यादा बार आ सकती है — ऑर्डर एक ही बार पूरा करें और प्रोसेस हो जाने का फ़्लैग सेव करें।
  3. राशि और मुद्रा की जाँच करें invoice.amountFiat और invoice.currencyFiat से — ये इनवॉइस के मूल मान हैं और कभी नहीं बदलते। amountFiatUSD में असल में मिली राशि लिख दी जाती है। राशियों की तुलना संख्या के रूप में करें, स्ट्रिंग के रूप में नहीं: आख़िर के शून्य हट जाते हैं, इसलिए 49.90 आता है 49.9 बनकर। अगर मान ऑर्डर से मेल नहीं खाते, तो इनवॉइस को पूरा करने के बजाय मैन्युअल जाँच में भेजें — ऐसे मामले भुगतान को इनवॉइस से जोड़ना और राशि का अंतर में बताए गए हैं।
  4. ऑर्डर पूरा करें और प्रोसेस हो जाने का फ़्लैग सेट करें।

ऑर्डर पूरा करते समय भुगतान की समय-सीमा न जाँचें: भुगतान timeToPayDatetime के बाद ऑन-चेन कन्फ़र्म हो सकता है, और व्यापारी भुगतान को इनवॉइस से मैन्युअल रूप से जोड़ सकता है। सूचना ख़ुद ही भुगतान की पुष्टि है।

आगे क्या