Skip to content

ตรวจสอบด้วย URL

ตรวจสอบสลิปธนาคารด้วย URL ของรูปภาพ

Endpoint

http
POST /verify/bank

URL เต็ม: https://api.easyslip.com/v2/verify/bank

การยืนยันตัวตน

จำเป็น ดูคู่มือการยืนยันตัวตน

http
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Request

พารามิเตอร์

พารามิเตอร์ประเภทจำเป็นคำอธิบาย
urlstringใช่URL ของรูปสลิป (1-255 ตัวอักษร)
remarkstringไม่หมายเหตุ (1-255 ตัวอักษร)
matchAccountbooleanไม่จับคู่ผู้รับกับบัญชีที่ลงทะเบียน
matchAmountnumberไม่จำนวนเงินที่คาดหวัง
checkDuplicatebooleanไม่ตรวจสอบสลิปซ้ำ

ข้อกำหนด URL

ข้อกำหนดค่า
ProtocolHTTP หรือ HTTPS เท่านั้น
ความยาวสูงสุด255 ตัวอักษร
Content typeต้องเป็นรูปภาพที่ถูกต้อง
ขนาดสูงสุด4 MB
ข้อจำกัด IPไม่รองรับ Private/Internal IP

URL ที่ถูกบล็อก

ไม่อนุญาตสิ่งต่อไปนี้เพื่อความปลอดภัย:

  • Private IP ranges: 10.x.x.x, 172.16-31.x.x, 192.168.x.x
  • Localhost: 127.0.0.1, localhost
  • Link-local: 169.254.x.x
  • Non-HTTP protocols: file://, ftp://, ฯลฯ

Type Definitions

typescript
// Request
interface VerifyByUrlRequest {
  url: string;              // 1-255 ตัวอักษร
  remark?: string;          // 1-255 ตัวอักษร
  matchAccount?: boolean;
  matchAmount?: number;
  checkDuplicate?: boolean;
}

// Response
interface VerifyBankResponse {
  success: true;
  data: VerifyBankData;
  message: string;
}

interface VerifyBankData {
  remark?: string;
  isDuplicate: boolean;
  matchedAccount: MatchedAccount | null;
  amountInOrder?: number;
  amountInSlip: number;
  isAmountMatched?: boolean;
  rawSlip: RawSlip;
}

interface MatchedAccount {
  bank: {
    nameTh: string;
    nameEn: string;
    code: string;
    shortCode: string;
  };
  nameTh: string;
  nameEn: string;
  type: 'PERSONAL' | 'JURISTIC';
  bankNumber: string;
}

interface RawSlip {
  payload: string;
  transRef: string;
  date: string;              // ISO 8601
  countryCode: string;
  amount: Amount;
  fee: number;
  ref1: string;
  ref2: string;
  ref3: string;
  sender: Party;
  receiver: Party & { merchantId?: string | null };
}

interface Amount {
  amount: number;
  local: {
    amount: number;
    currency: string;
  };
}

interface Party {
  bank: {
    id: string;
    name: string;
    short: string;
  };
  account: {
    name: {
      th?: string;
      en?: string;
    };
    bank?: {
      type: 'BANKAC' | 'TOKEN' | 'DUMMY';
      account: string;
    };
    proxy?: {
      type: 'NATID' | 'MSISDN' | 'EWALLETID' | 'EMAIL' | 'BILLERID';
      account: string;
    };
  };
}

// Error Response
interface ErrorResponse {
  success: false;
  error: {
    code: string;
    message: string;
  };
}

ตัวอย่าง

bash
curl -X POST https://api.easyslip.com/v2/verify/bank \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/slips/slip-12345.jpg",
    "checkDuplicate": true
  }'
javascript
const verifyByUrl = async (url, options = {}) => {
  const response = await fetch('https://api.easyslip.com/v2/verify/bank', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ url, ...options })
  });

  const result = await response.json();

  if (!result.success) {
    throw new Error(result.error.message);
  }

  return result.data;
};

// การใช้งาน
const slip = await verifyByUrl('https://example.com/slips/slip-12345.jpg', {
  checkDuplicate: true,
  matchAmount: 1500.00
});

console.log('จำนวนเงิน:', slip.rawSlip.amount.amount);
console.log('จำนวนเงินตรงกัน:', slip.isAmountMatched);
php
function verifyByUrl(string $url, array $options = []): array
{
    $apiKey = getenv('EASYSLIP_API_KEY');
    $data = array_merge(['url' => $url], $options);

    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => 'https://api.easyslip.com/v2/verify/bank',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_HTTPHEADER => [
            'Authorization: Bearer ' . $apiKey,
            'Content-Type: application/json'
        ],
        CURLOPT_POSTFIELDS => json_encode($data)
    ]);

    $response = curl_exec($ch);
    curl_close($ch);

    $result = json_decode($response, true);

    if (!$result['success']) {
        throw new Exception($result['error']['message']);
    }

    return $result['data'];
}

// การใช้งาน
$slip = verifyByUrl('https://example.com/slips/slip-12345.jpg', [
    'checkDuplicate' => true
]);

echo "จำนวนเงิน: " . $slip['rawSlip']['amount']['amount'];
python
import requests
import os

def verify_by_url(url: str, **options) -> dict:
    response = requests.post(
        'https://api.easyslip.com/v2/verify/bank',
        headers={
            'Authorization': f'Bearer {os.environ["EASYSLIP_API_KEY"]}',
            'Content-Type': 'application/json'
        },
        json={'url': url, **options}
    )

    result = response.json()

    if not result['success']:
        raise Exception(result['error']['message'])

    return result['data']

# การใช้งาน
slip = verify_by_url(
    'https://example.com/slips/slip-12345.jpg',
    checkDuplicate=True
)

print(f"จำนวนเงิน: {slip['rawSlip']['amount']['amount']}")

Response

สำเร็จ (200)

json
{
  "success": true,
  "data": {
    "isDuplicate": false,
    "rawSlip": {
      "payload": "00000000000000000000000000000000000000000000000",
      "transRef": "68370160657749I376388B35",
      "date": "2024-01-15T14:30:00+07:00",
      "amount": {
        "amount": 1500.00
      },
      "sender": {
        "bank": { "id": "004", "name": "กสิกรไทย", "short": "KBANK" },
        "account": { "name": { "th": "นาย ผู้โอน ทดสอบ" } }
      },
      "receiver": {
        "bank": { "id": "014", "name": "ไทยพาณิชย์", "short": "SCB" },
        "account": { "name": { "th": "นาย รับเงิน ทดสอบ" } }
      }
    }
  },
  "message": "Bank slip verified successfully"
}

Error Responses

Protocol URL ไม่อนุญาต (400)

json
{
  "success": false,
  "error": {
    "code": "URL_PROTOCOL_NOT_ALLOWED",
    "message": "Only HTTP and HTTPS protocols are allowed"
  }
}

IP Range ไม่ถูกต้อง (400)

json
{
  "success": false,
  "error": {
    "code": "URL_INVALID_IP_RANGE",
    "message": "URL points to a restricted IP range"
  }
}

เข้าถึง URL ไม่ได้ (400)

json
{
  "success": false,
  "error": {
    "code": "IMAGE_URL_UNREACHABLE",
    "message": "Unable to access the image URL"
  }
}

ประเภทรูปภาพไม่ถูกต้อง (400)

json
{
  "success": false,
  "error": {
    "code": "INVALID_IMAGE_TYPE",
    "message": "URL does not point to a valid image"
  }
}

รูปภาพใหญ่เกินไป (400)

json
{
  "success": false,
  "error": {
    "code": "IMAGE_SIZE_TOO_LARGE",
    "message": "Image size exceeds 4MB limit"
  }
}

หมายเหตุ

  • ใช้ HTTPS URL เพื่อความปลอดภัย
  • URL ต้องเข้าถึงได้สาธารณะ
  • Server ควรส่ง Content-Type ที่ถูกต้อง
  • API มี timeout 10 วินาทีสำหรับดึง URL
  • โฮสต์รูปบน CDN เพื่อความเสถียร

Bank Slip Verification API for Thai Banking