ข้ามไปเนื้อหาหลัก
LikeSlip|API Documentation

LikeSlip API v1 — เอกสาร

Base URL: https://your-domain.com/api/v1

การยืนยันตัวตน (Authentication)

ส่ง API Key ใน header ทุก request:

Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxx

API Key สร้างได้จากหน้า ตั้งค่า → API & Webhook
Key ที่ถูกเพิกถอน (revoked) จะได้รับ HTTP 401

Idempotency

Endpoint POST /slips/verify ต้องส่ง header Idempotency-Key ทุกครั้ง — ค่านี้จะถูกใช้เป็น request_id ในระบบ

  • Key เดิม + payload เดิม → ส่งคืนผลเดิม ไม่หักโทเคนซ้ำ
  • Key เดิม + payload ต่างกัน → HTTP 409 IDEMPOTENCY_MISMATCH

ใช้ UUID v4 หรือ order reference ที่ไม่ซ้ำกันเป็น Idempotency-Key

Endpoints

POST /api/v1/slips/verify

ส่งสลิปเพื่อตรวจสอบ รับได้ 2 รูปแบบ:

  • Multipart: field image (JPEG/PNG/WebP ≤ 5 MB) หรือ qr
  • JSON: { "qr": "...", "expected_amount": "100.00" }

Headers ที่ต้องการ:

Authorization: Bearer sk_live_...
Idempotency-Key: <unique-key>

Fields:

Fieldประเภทคำอธิบาย
imageFileรูปสลิป (multipart เท่านั้น)
qrstringข้อมูล QR จากสลิป
expected_amountstringยอดที่คาดหวัง (บาท เช่น "100.00")
order_refstringเลขอ้างอิงคำสั่งซื้อ
receiver_account_idstringID บัญชีรับเงินที่ต้องตรวจ
branch_idstringID สาขา

GET /api/v1/slips/:request_id

ดูผลตรวจสอบสลิปตาม request_id (ต้องเป็น key ของร้านเดียวกัน)

GET /api/v1/balance

ดูยอดโทเคน เครดิต แพ็กเกจปัจจุบัน และอัตราการหักโทเคน

รูปแบบ Response

ทุก endpoint ใช้รูปแบบเดียวกัน:

// สำเร็จ
{
  "success": true,
  "data": { ... }
}

// ผิดพลาด
{
  "success": false,
  "error": {
    "code": "ERROR_CODE",
    "message": "คำอธิบาย"
  }
}

ยอดเงินในการตอบกลับเป็น string หน่วยบาท (เช่น "100.50"), โทเคนเป็น string (เช่น "1.000")

Status & Reason Codes

Statusความหมาย
checkingกำลังตรวจสอบ (ยังไม่เสร็จ)
passedผ่านทุกเงื่อนไข
failedไม่ผ่านเงื่อนไข (ดู reason)
unverifiableตรวจไม่ได้ (ข้อมูลไม่ครบ)
provider_errorระบบตรวจสลิปขัดข้อง
Reason Codeความหมาย
QR_UNREADABLEอ่าน QR จากสลิปไม่ได้ — คืนโทเคน
TX_NOT_FOUNDไม่พบรายการในระบบธนาคาร — คืนโทเคน
RECEIVER_MISMATCHบัญชีผู้รับไม่ตรง — หักโทเคน
AMOUNT_MISMATCHยอดเงินไม่ตรง — หักโทเคน
SLIP_TOO_OLDสลิปเก่าเกินกำหนด — หักโทเคน
BEFORE_ORDERโอนก่อนสร้างคำสั่งซื้อ — หักโทเคน
DUPLICATEสลิปนี้ถูกใช้แล้ว — หักโทเคน
PROVIDER_ERRORระบบตรวจสลิปขัดข้อง — คืนโทเคน
INSUFFICIENT_TOKENโทเคนไม่เพียงพอ — ไม่หัก
PLAN_EXPIREDแพ็กเกจหมดอายุ — ไม่หัก

กฎการหักโทเคน

  • หักโทเคน: เมื่อ slip-checker พบรายการ (ไม่ว่าจะผ่านเงื่อนไขหรือไม่)
  • คืนโทเคน: เมื่ออ่าน QR ไม่ได้ / ไม่พบรายการ / ระบบตรวจสลิปขัดข้อง
  • ถ้าโทเคนหมดและเปิด Credit Overflow ไว้ จะหักเครดิตแทนในอัตราตามแพ็กเกจ

Webhook

ตั้งค่า Webhook URL ได้จากหน้า ตั้งค่า → Webhook

Headers ที่ส่งมาพร้อม event:

X-Signature: <hmac-hex>
X-Timestamp: <unix-seconds>
X-Event-Id: <uuid>

การตรวจสอบลายเซ็น

// HMAC-SHA256 over "{timestamp}.{raw_body}"
$expected = hash_hmac('sha256', $timestamp . '.' . $raw_body, $secret);
if (!hash_equals($expected, $signature)) {
    http_response_code(401);
    exit;
}
// ตรวจอายุ (ไม่เกิน 300 วินาที)
if (abs(time() - intval($timestamp)) > 300) {
    http_response_code(401);
    exit;
}

Event Types

Typeเกิดเมื่อ
slip.checkedตรวจสลิปเสร็จ (ทุก status)

Webhook จะส่งซ้ำสูงสุด 6 ครั้ง (exponential backoff) หากปลายทางตอบ non-2xx

Rate Limits

จำนวน request ต่อนาทีขึ้นกับแพ็กเกจ (ดูได้จาก GET /api/v1/balance → rates.rate_limit_rpm)

เมื่อเกินจะได้รับ HTTP 429 พร้อม code: "RATE_LIMIT_EXCEEDED"