GokuPay

คู่มือ API

ดึงรายการเงินเข้า/ออกจากบัญชีธนาคารของคุณ ไปจับคู่กับออเดอร์ในระบบของคุณเอง

ภาพรวม

GokuPay ดักการแจ้งเตือนเงินเข้า/ออกจาก SMS ธนาคาร และ LINE (KBank Live / SCB Connect) แล้วแปลงเป็นรายการมาตรฐานให้คุณดึงไปใช้ผ่าน API เดียว — กันข้อความซ้ำและรองรับการแจ้งช้าให้ในตัว

🔑 เอา API Key ได้ที่หน้า เชื่อมต่อ API · คีย์แยกต่อโปรไฟล์ (1 เว็บ = 1 คีย์)

GET /api_moneyin

ดึงรายการเงินเข้า/ออกล่าสุดของบัญชีในโปรไฟล์นั้น

พารามิเตอร์

ชื่อจำเป็นคำอธิบาย
api_keyคีย์ของโปรไฟล์
direction-all (ค่าเริ่มต้น) · in เฉพาะเงินเข้า · out เฉพาะเงินออก
limit-จำนวนรายการ 1-200 (ค่าเริ่มต้น 50)
bank-กรองธนาคาร เช่น KBANK, SCB

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

curl "https://pay.teddynes.com/api_moneyin?api_key=gpay_xxx&direction=in&limit=20"

ผลลัพธ์

{
  "status": "success",
  "data": [{
    "bank": "KBANK",           // ธนาคารเจ้าของบัญชี
    "direction": "in",          // in = เงินเข้า, out = เงินออก
    "date": "19/08/69",         // วันที่ (พ.ศ.)
    "time": "02:47",
    "account": "xxx-x-x8998-x", // บัญชีที่รับเงิน (ปิดบังตามที่ธนาคารส่ง)
    "from_bank": null,          // ธนาคารต้นทาง (ถ้าธนาคารแจ้ง)
    "amount": "320.50",
    "amount_cents": 32050,      // ใช้ตัวนี้เทียบยอด (int กัน float เพี้ยน)
    "balance": "5000.00",
    "received_at": "2026-08-19T02:47:10.000Z"  // UTC
  }]
}

⚠️ api_key ผิด → HTTP 401

ตัวอย่างจับคู่ออเดอร์ (Node.js)

ดึงทุก ~10 วินาที แล้วจับคู่กับออเดอร์ที่รอจ่าย

const KEY = 'gpay_xxx';
const seen = new Set(); // กันประมวลผลซ้ำ (ควรเก็บลง DB จริง)

async function poll() {
  const r = await fetch(`https://pay.teddynes.com/api_moneyin?api_key=${KEY}&direction=in&limit=50`);
  const { data } = await r.json();

  for (const tx of data) {
    const key = `${tx.received_at}|${tx.amount_cents}|${tx.account}`;
    if (seen.has(key)) continue;
    seen.add(key);

    // จับคู่ออเดอร์: ยอดตรง + ยังไม่หมดอายุ (แนะนำเผื่อเวลา 10-30 นาที)
    const order = await findPendingOrder({
      amountCents: tx.amount_cents,
      after: new Date(Date.now() - 30 * 60 * 1000),
    });

    if (!order) continue;                  // ไม่เจอ -> เก็บไว้ตรวจภายหลัง
    if (order.length > 1) { flagForReview(tx); continue; }  // ยอดซ้ำ -> อย่าเดา
    await markPaid(order[0].id, tx);
  }
}
setInterval(poll, 10000);
ข้อแนะนำการจับคู่
• เทียบด้วย amount_cents (int) ไม่ใช่ทศนิยม
• ใช้ ยอด + ช่วงเวลา ไม่ใช่แค่วันที่ — เผื่อธนาคารแจ้งช้า 10-30 นาที
• ถ้ายอดเดียวกันมีหลายออเดอร์ → อย่าเดา ให้เข้าคิวตรวจสอบ
• เก็บคีย์กันซ้ำของคุณเอง (เช่น received_at + amount + account)

เริ่มใช้งาน

  1. สมัครสมาชิก แล้วเข้าหน้า เชื่อมต่อ API
  2. เพิ่มบัญชีธนาคารที่ต้องการให้ระบบเฝ้า
  3. เชื่อมช่องทางรับข้อมูล: แอปดัก SMS หรือ LINE Connect
  4. คัดลอก API Key ไปเรียก /api_moneyin