ข้ามไปยังเนื้อหาหลัก

REST API

ตรวจสอบสลิปด้วยไฟล์ภาพ

อัปโหลดไฟล์ภาพสลิปโดยตรงในรูปแบบ multipart/form-data เหมาะกับระบบที่รับไฟล์จากผู้ใช้แล้วส่งต่อทันทีโดยไม่ต้องแปลงเป็น Base64

POST/api/verify-slip/image/info

การคิดโทเคน

หักโทเคนตามอัตรา API ของร้านค้าเมื่อระบบสรุปผลได้ (200000, 200200, 200401, 200402, 200403, 200500, 200501) ไม่หักโทเคนเมื่อไม่พบสลิป (200404) หรือธนาคารขัดข้อง (200502)

พารามิเตอร์

รูปแบบข้อมูลที่ส่งเข้ามา: multipart/form-data

Headers

ฟิลด์ชนิดข้อมูลจำเป็นคำอธิบาย
Authorizationstringจำเป็นBearer ตามด้วย API Secret ของร้านค้า
Content-Typestringจำเป็นmultipart/form-data ส่วนใหญ่ HTTP client จะใส่ให้อัตโนมัติพร้อม boundary ไม่ต้องตั้งเอง

Form fields

ฟิลด์ชนิดข้อมูลจำเป็นคำอธิบาย
filefileจำเป็นไฟล์ภาพสลิป ถ้าไม่ส่งหรือส่งมาไม่ใช่ไฟล์ จะได้ HTTP 400 พร้อมข้อความ Missing 'file' field (multipart/form-data)
checkConditionstring (JSON)ไม่บังคับเงื่อนไขการตรวจสอบ ส่งเป็นข้อความ JSON ในฟิลด์เดียว โครงสร้างเหมือน payload.checkCondition ของ endpoint อื่น

payload.checkCondition

ไม่บังคับ ถ้าไม่ส่งมา ระบบจะดึงข้อมูลสลิปอย่างเดียวและตอบกลับด้วยรหัส 200000 (Slip found) แต่ถ้าส่งเงื่อนไขมา ระบบจะตรวจตามเงื่อนไขและตอบ 200200 เมื่อผ่านครบทุกข้อ

ฟิลด์ชนิดข้อมูลจำเป็นคำอธิบาย
checkDuplicatebooleanไม่บังคับตรวจสลิปซ้ำภายในร้านค้าเดียวกัน โดยเทียบจาก transRef ถ้าเคยตรวจแล้วจะได้รหัส 200501
checkReceiverarray<object>ไม่บังคับรายการบัญชีผู้รับที่ยอมรับได้ ผ่านเมื่อ ตรงกับรายการใดรายการหนึ่ง (ANY) ถ้าไม่ตรงเลยจะได้รหัส 200401
checkAmountobjectไม่บังคับตรวจยอดเงินที่โอน ถ้าไม่ตรงตามเงื่อนไขจะได้รหัส 200402
checkDateobjectไม่บังคับตรวจวันเวลาที่โอน ถ้าไม่ตรงตามเงื่อนไขจะได้รหัส 200403

payload.checkCondition.checkReceiver[]

ส่งได้หลายรายการ ระบบจะถือว่าผ่านเมื่อมีอย่างน้อยหนึ่งรายการที่ตรงทุกฟิลด์ที่คุณระบุไว้ในรายการนั้น ฟิลด์ที่ไม่ได้ส่งจะไม่ถูกนำมาเทียบ

ฟิลด์ชนิดข้อมูลจำเป็นคำอธิบาย
accountTypestringไม่บังคับรหัสธนาคาร 5 หลัก เช่น 01004 ถ้าส่งรหัสที่ไม่มีในระบบจะได้ HTTP 400 ดูรายการรหัสทั้งหมดด้านล่าง
accountNameTHstringไม่บังคับชื่อบัญชีผู้รับภาษาไทย เทียบแบบยืดหยุ่น ตัดคำนำหน้า ช่องว่าง และเครื่องหมายออกก่อนเทียบ
accountNameENstringไม่บังคับชื่อบัญชีผู้รับภาษาอังกฤษ เทียบแบบยืดหยุ่นเช่นเดียวกับชื่อภาษาไทย
accountNumberstringไม่บังคับเลขที่บัญชีผู้รับ ธนาคารมักปิดบังตัวเลขบางส่วน ระบบจึงเทียบเฉพาะเลขท้ายที่ตรงกันได้ (สูงสุด 4 หลักท้าย)

payload.checkCondition.checkAmount

ฟิลด์ชนิดข้อมูลจำเป็นคำอธิบาย
type"lte" | "eq" | "gte"ไม่บังคับรูปแบบการเทียบ lte คือน้อยกว่าหรือเท่ากับ eq คือเท่ากับพอดี gte คือมากกว่าหรือเท่ากับ ค่าเริ่มต้นคือ eq
amountstringจำเป็นยอดเงินที่คาดหวัง ส่งเป็นสตริง เช่น "1500.00"

payload.checkCondition.checkDate

ฟิลด์ชนิดข้อมูลจำเป็นคำอธิบาย
type"lte" | "eq" | "gte"ไม่บังคับรูปแบบการเทียบวันเวลา ค่าเริ่มต้นคือ eq ซึ่งหมายถึงตรงกันถึงระดับวินาที
datestring (ISO 8601)จำเป็นวันเวลาที่คาดหวัง เช่น "2026-07-21T09:32:11.000Z"

รหัสธนาคาร (accountType)

ใช้กับฟิลด์ accountType ใน checkReceiver ถ้าส่งรหัสที่ไม่มีในรายการนี้ ระบบจะตอบ HTTP 400 พร้อมข้อความ Unknown accountType

รายการรหัสธนาคาร 5 หลักที่ระบบรองรับ
รหัสชื่อธนาคารชื่อภาษาอังกฤษ
01002ธนาคารกรุงเทพBangkok Bank
01004ธนาคารกสิกรไทยKasikorn Bank
01006ธนาคารกรุงไทยKrung Thai Bank
01011ธนาคารทหารไทยธนชาตTMBThanachart
01014ธนาคารไทยพาณิชย์SCB
01020ธนาคารสแตนดาร์ดชาร์เตอร์ดSCBT
01022ธนาคารซีไอเอ็มบี ไทยCIMB Thai
01024ธนาคารยูโอบีUOB
01025ธนาคารกรุงศรีอยุธยาKrungsri
01030ธนาคารออมสินGSB
01033ธนาคารอาคารสงเคราะห์GH Bank
01034ธนาคารเพื่อการเกษตรและสหกรณ์BAAC
01067ธนาคารทิสโก้TISCO Bank
01069ธนาคารเกียรตินาคินภัทรKiatnakin Phatra
01071ธนาคารไทยเครดิตThai Credit Bank
01073ธนาคารแลนด์ แอนด์ เฮ้าส์LH Bank
01098ธนาคารพัฒนาวิสาหกิจฯSME Bank
01065ธนาคารธนชาตThanachart Bank
01088ธนาคารคลิกซ์CLICX Bank
01008ธนาคารเจพีมอร์แกน เชสJPMC
01017ธนาคารซิตี้แบงก์Citibank
01018ธนาคารซูมิโตโม มิตซุยSMBC
01029ธนาคารอินเดียนโอเวอร์ซีส์IOBA
01031ธนาคารเอชเอสบีซีHSBC
01032ธนาคารดอยซ์แบงก์ เอจีDeutsche Bank
01039ธนาคารมิซูโฮMizuho
01045ธนาคารบีเอ็นพี พารีบาส์BNP Paribas
01052ธนาคารแห่งประเทศจีน (ไทย)Bank of China
01066ธนาคารอิสลามแห่งประเทศไทยIslamic Bank of Thailand
01070ธนาคารไอซีบีซี (ไทย)ICBC Thai
02001พร้อมเพย์ เบอร์โทรศัพท์PromptPay Phone
02003พร้อมเพย์ บัตรประชาชน/เลขผู้เสียภาษีPromptPay Citizen ID
02004พร้อมเพย์ รหัส E-WalletPromptPay E-Wallet
03000ร้านค้า (K+ Shop, แม่มณี, ฯลฯ)Merchant QR
04000ทรูมันนี่ วอลเล็ทTrueMoney Wallet

ตัวอย่างการเรียกใช้

curl -X POST "https://slip.thesurelab.com/api/verify-slip/image/info" \
  -H "Authorization: Bearer $API_SECRET" \
  -F "file=@/path/to/slip.jpg" \
  -F 'checkCondition={"checkDuplicate":true,"checkAmount":{"type":"eq","amount":"1500.00"}}'

ตัวอย่างการเรียก /api/verify-slip/image/info

ตัวอย่างผลลัพธ์

ตัวอย่างผลลัพธ์
{
  "code": "200200",
  "message": "Slip is valid",
  "data": {
    "transRef": "0154202607210093A1B2C3D4",
    "amount": 1500,
    "transDate": "2026-07-21T09:32:11.000Z",
    "sender": {
      "name": "นาย ทดสอบ ระบบ",
      "account": "xxx-x-x1a2b-x",
      "bankCode": "01004"
    },
    "receiver": {
      "name": "นางสาว ผู้รับ ทดสอบ",
      "nameEN": "MISS PURAB TESTER",
      "account": "xxx-x-x9f8e-x",
      "bankCode": "01014"
    }
  }
}

อ่านผลจากฟิลด์ code เสมอ

ผลลัพธ์ทางธุรกิจทุกกรณีตอบกลับด้วย HTTP 200 ระบบจะแยกผลด้วยฟิลด์ code เท่านั้น ดูรายการรหัสทั้งหมดได้ที่หน้า Response

ข้อควรรู้

  • ผลลัพธ์ทางธุรกิจทุกกรณีตอบกลับด้วย HTTP 200 เสมอ ให้แยกผลจากฟิลด์ code ไม่ใช่จาก HTTP status
  • ถ้าไม่ส่ง checkCondition มาเลย และค้นเจอสลิป ระบบจะตอบรหัส 200000 (Slip found)
  • ถ้าส่ง checkCondition มาและผ่านครบทุกข้อ ระบบจะตอบรหัส 200200 (Slip is valid)
  • ระบบตรวจสลิปซ้ำก่อนเงื่อนไขอื่นเสมอ สลิปที่เคยตรวจแล้วจะได้ 200501 แม้ยอดเงินจะตรง
  • REST API ตรวจตามเงื่อนไขใน checkCondition ที่ส่งมาเท่านั้น ไม่นำบัญชีธนาคารที่ลงทะเบียนไว้ในระบบมาเทียบด้วย
  • ฟิลด์ checkCondition ต้องเป็นข้อความ JSON ที่ถูกต้อง ถ้าแปลงไม่ได้จะได้ HTTP 400 พร้อมข้อความ Invalid checkCondition