คู่มือ API
เชื่อมระบบโดเนทกับเว็บไซต์ เซิร์ฟเวอร์เกม หรือบอทของคุณ ทุกคำตอบเป็น JSON การอัปโหลดสลิปส่งเป็น multipart/form-data ใช้ได้กับแพ็กเกจที่มี API
เริ่มต้น
Base URL
https://donate.shicenter.net/api/v1
สร้าง API key ที่แดชบอร์ด เมนู โซนนักพัฒนา แล้วส่งใน header ทุกคำขอ แบบใดแบบหนึ่ง
Authorization: Bearer sk_xxxxxxxxxxxxxxxx
X-API-Key: sk_xxxxxxxxxxxxxxxx
เก็บ key ไว้ฝั่งเซิร์ฟเวอร์เท่านั้น จำกัด 120 คำขอต่อนาที และตรวจสลิปได้ 30 ครั้งต่อนาทีต่อ key การตรวจสลิปนับรวมในโควต้ารายเดือนของแพ็กเกจ
ตรวจสลิปและบันทึกโดเนท
POST/donations/verify
ส่งรูปสลิปหรือข้อความ QR บนสลิป ระบบตรวจกับธนาคารผ่าน Slip2Go ตามบัญชีรับเงินที่ตั้งไว้ ถ้าผ่านจะบันทึกเป็นโดเนท ขึ้นจอไลฟ์ และส่ง webhook
| ฟิลด์ | รายละเอียด |
|---|---|
slip | ไฟล์รูปสลิป jpg/png/webp ไม่เกิน 8 MB (ต้องมี slip หรือ qr_code) |
qr_code | ข้อความที่อ่านได้จาก QR บนสลิป |
donor_name | ชื่อที่ขึ้นจอ ไม่ใส่จะใช้ชื่อผู้โอนในสลิป |
message | ข้อความ ไม่เกิน 200 ตัวอักษร |
min_amount | ยอดขั้นต่ำของคำขอนี้ เช่น ราคาสินค้า |
external_ref | รหัสอ้างอิงของคุณ เช่น เลขออเดอร์ |
meta | JSON ไม่เกิน 4 KB ส่งกลับมาใน webhook |
alert | false ถ้าไม่ต้องการให้ขึ้นจอ |
curl -X POST https://donate.shicenter.net/api/v1/donations/verify \
-H "Authorization: Bearer sk_..." \
-F slip=@slip.jpg \
-F donor_name="Ryu" \
-F message="ซื้อยศ VIP" \
-F external_ref="order-1029" \
-F min_amount=99
ผ่าน: HTTP 201
{
"ok": true,
"data": {
"id": 51, "donor_name": "Ryu", "message": "ซื้อยศ VIP",
"amount": 99, "currency": "THB", "source": "api",
"trans_ref": "015073144041ATF00999",
"sender_name": "นาย ริว ส.", "sender_bank": "ธนาคารกสิกรไทย",
"transferred_at": "2026-10-21T14:48:00+07:00",
"external_ref": "order-1029", "meta": null, "hidden": false,
"created_at": "2026-10-21T14:48:09+07:00"
}
}
ไม่ผ่าน: HTTP 422 ถ้า retry เป็น true แปลว่าเป็นปัญหาชั่วคราว ลองส่งใหม่ได้
{ "ok": false, "error": "slip_rejected", "code": "200401",
"message": "บัญชีผู้รับในสลิปไม่ตรงกับบัญชีที่ตั้งไว้", "retry": false }
อ่านข้อมูล
GET/donations
รายการล่าสุดก่อน พารามิเตอร์ limit (1–100), since_id (เหมาะกับ polling), before_id (หน้าถัดไป), from, to, external_ref, include_hidden=1
GET/donations/{id}
รายการเดียว
GET/stats
ยอดรวมวันนี้ เดือนนี้ ทั้งหมด และความคืบหน้าเป้าหมาย
GET/me
ข้อมูลบัญชี แพ็กเกจ โควต้าที่ใช้ และลิงก์วิดเจ็ต
GET/promptpay-qr?amount=100
สร้าง QR พร้อมเพย์ของคุณตามยอด ได้ทั้ง payload และรูป SVG แบบ data URI
GET/public/{slug}
ไม่ต้องใช้ key ข้อมูลสาธารณะของหน้าโดเนทและเป้าหมาย
ยิงแจ้งเตือนขึ้นจอ
POST/alerts/test
ขึ้นจอทันทีโดยไม่บันทึกเป็นโดเนท ส่ง name, amount, message ได้
curl -X POST https://donate.shicenter.net/api/v1/alerts/test -H "Authorization: Bearer sk_..." \
-d name="บอทเซิร์ฟ" -d amount=0 -d message="คนเข้าเซิร์ฟครบ 100 คนแล้ว"
Webhook
ตั้ง URL ในโซนนักพัฒนา ระบบจะส่ง POST แบบ JSON ทุกครั้งที่มีโดเนทใหม่ (event donation.created) ตอบกลับด้วย HTTP 2xx ภายใน 8 วินาที
POST /your-webhook
Content-Type: application/json
X-Donate-Event: donation.created
X-Donate-Timestamp: 1792556889
X-Donate-Signature: sha256=5b1f...c9
{
"id": "evt_Qp3...",
"event": "donation.created",
"created_at": "2026-10-21T14:48:09+07:00",
"streamer": { "slug": "ryu", "name": "Ryu" },
"data": { "donation": { "id": 51, "donor_name": "Ryu", "amount": 99, ... } }
}
ตรวจลายเซ็น
ลายเซ็นคือ HMAC-SHA256 ของ timestamp + "." + body ด้วย signing secret ของคุณ ควรปฏิเสธคำขอที่ timestamp เก่ากว่า 5 นาที
// PHP
$body = file_get_contents('php://input');
$ts = $_SERVER['HTTP_X_DONATE_TIMESTAMP'] ?? '';
$sig = $_SERVER['HTTP_X_DONATE_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $ts . '.' . $body, getenv('DONATE_WEBHOOK_SECRET'));
if (!hash_equals($expected, $sig) || abs(time() - (int) $ts) > 300) { http_response_code(401); exit; }
$event = json_decode($body, true);
// Node.js (Express)
const crypto = require('crypto');
app.post('/donate-webhook', express.raw({ type: 'application/json' }), (req, res) => {
const ts = req.get('X-Donate-Timestamp');
const expected = 'sha256=' + crypto.createHmac('sha256', process.env.DONATE_WEBHOOK_SECRET)
.update(ts + '.' + req.body).digest('hex');
if (expected !== req.get('X-Donate-Signature')) return res.sendStatus(401);
const event = JSON.parse(req.body);
res.sendStatus(200);
});
ฝังหน้าโดเนทในเว็บอื่น
<iframe src="https://donate.shicenter.net/ชื่อของคุณ?embed=1" width="100%" height="980" style="border:0"></iframe>
รหัสข้อผิดพลาด
| HTTP | error | ความหมาย |
|---|---|---|
| 401 | invalid_api_key | ไม่มี key หรือ key ถูกเปลี่ยนแล้ว |
| 402 | plan_required | แพ็กเกจหมดอายุ หรือแพ็กเกจไม่รวม API |
| 403 | not_accepting | ถูกระงับ ยังไม่ตั้งบัญชีรับเงิน หรือโควต้าตรวจสลิปเดือนนี้หมด |
| 409 | duplicate | สลิปนี้ถูกใช้ไปแล้ว |
| 422 | slip_rejected | สลิปไม่ผ่าน ดู code และ message |
| 422 | validation | ข้อมูลที่ส่งมาไม่ถูกต้อง |
| 429 | — | ส่งคำขอถี่เกินไป |