Skip to main content

เริ่มต้นอย่างรวดเร็ว

การเชื่อมต่อรับชำระเงินแบบมินิมอล: การสร้างใบแจ้งหนี้ผ่าน API และการจัดการการแจ้งเตือนการชำระเงิน ส่วนสุดท้ายกล่าวถึงการส่งมอบสินค้า ตัวอย่างทั้งหมดครบถ้วนในตัว ไม่ต้องใช้ SDK

tip

ทำงานร่วมกับ AI agent อยู่หรือไม่ ส่งเวอร์ชัน Markdown ของหน้านี้ให้กับมัน เนื้อหามีรายละเอียดเพียงพอสำหรับสร้างการเชื่อมต่อให้เว็บไซต์หรือร้านค้าของคุณ

ข้อกำหนดเบื้องต้น

ค่ารับได้จากที่ใด
คีย์ APIส่วน การเชื่อมต่อ (Integrations)
ID ของโปรเจกต์ส่วน โปรเจกต์ (Projects)
คีย์ลับของ Webhookการตั้งค่าโปรเจกต์

ในการตั้งค่าโปรเจกต์เดียวกันนั้น ให้ตั้งค่า Webhook URL — ที่อยู่ของตัวจัดการการแจ้งเตือนบนเซิร์ฟเวอร์ของคุณ รองรับ HTTPS เท่านั้น และจะไม่ติดตามการเปลี่ยนเส้นทาง

ตัวอย่างใช้ค่าทดสอบ — ให้แทนที่ด้วยค่าของคุณเอง

การสร้างใบแจ้งหนี้

POST https://api.bitsby.app/invoices/create โดยส่งคีย์ API ใน header 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) บริการจะส่งคำขอ POST ไปยัง Webhook URL ของโปรเจกต์ เนื้อหาคำขอเป็น JSON ส่วนลายเซ็นอยู่ใน header:

Headerค่า
X-Timestampเวลาส่ง เป็น unix time หน่วยวินาที
X-Signaturesha256= + HMAC-SHA256 แบบ hex ของสตริง <timestamp>.<request body>

คีย์ที่ใช้เซ็นคือคีย์ลับของ 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);

ตอบกลับด้วยโค้ด 2xx ภายใน 10 วินาที โค้ดอื่น การเปลี่ยนเส้นทาง หรือการหมดเวลาจะนับเป็นการส่งที่ล้มเหลว: บริการจะลองส่งใหม่โดยเว้นช่วงนานขึ้นเรื่อย ๆ ตั้งแต่ 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. ส่งมอบคำสั่งซื้อและทำเครื่องหมายว่าประมวลผลแล้ว

อย่าตรวจสอบกำหนดเวลาชำระเงินตอนส่งมอบ: การชำระเงินอาจได้รับการยืนยัน on-chain หลังจาก timeToPayDatetime และร้านค้าสามารถจับคู่การชำระเงินกับใบแจ้งหนี้ด้วยตนเองได้ การแจ้งเตือนนั้นเองคือการยืนยันการชำระเงิน

ขั้นตอนถัดไป