Skip to content

ตัวอย่าง JavaScript

ตัวอย่างโค้ด JavaScript และ TypeScript สำหรับใช้งาน EasySlip API

การติดตั้ง

bash
# Node.js
npm install node-fetch form-data

# หรือใช้ fetch API ในตัวของ Node.js 18+

ตัวอย่างพื้นฐาน

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

javascript
const verifySlip = async (payload) => {
  const response = await fetch('https://developer.easyslip.com/api/v1/verify', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.EASYSLIP_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ payload })
  });

  const result = await response.json();

  if (result.status !== 200) {
    throw new Error(result.message);
  }

  return result.data;
};

// การใช้งาน
const slip = await verifySlip('00020101021230...');
console.log('จำนวนเงิน:', slip.amount.amount);
console.log('ผู้โอน:', slip.sender.displayName);
console.log('ผู้รับ:', slip.receiver.displayName);

ตรวจสอบด้วยรูปภาพ (Node.js)

javascript
import fs from 'fs';
import FormData from 'form-data';
import fetch from 'node-fetch';

const verifySlipImage = async (filePath) => {
  const formData = new FormData();
  formData.append('file', fs.createReadStream(filePath));
  formData.append('checkDuplicate', 'true');

  const response = await fetch('https://developer.easyslip.com/api/v1/verify', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.EASYSLIP_API_KEY}`,
      ...formData.getHeaders()
    },
    body: formData
  });

  const result = await response.json();

  if (result.status !== 200) {
    throw new Error(result.message);
  }

  return result.data;
};

// การใช้งาน
const slip = await verifySlipImage('./slip.jpg');
console.log('จำนวนเงิน:', slip.amount.amount);

ตรวจสอบด้วยรูปภาพ (Browser)

javascript
const verifySlipBrowser = async (file) => {
  const formData = new FormData();
  formData.append('file', file);
  formData.append('checkDuplicate', 'true');

  const response = await fetch('https://developer.easyslip.com/api/v1/verify', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY'
    },
    body: formData
  });

  const result = await response.json();

  if (result.status !== 200) {
    throw new Error(result.message);
  }

  return result.data;
};

// การใช้งานกับ file input
const fileInput = document.getElementById('slipFile');
fileInput.addEventListener('change', async (e) => {
  const file = e.target.files[0];
  try {
    const slip = await verifySlipBrowser(file);
    console.log('ตรวจสอบสำเร็จ:', slip);
  } catch (error) {
    console.error('เกิดข้อผิดพลาด:', error.message);
  }
});

TypeScript

Type Definitions

typescript
interface SlipAmount {
  amount: number;
  local: {
    amount: number;
    currency: string;
  };
}

interface SlipParty {
  displayName: string;
  name: string;
  proxy: {
    type: string;
    value: string;
  };
  account: {
    type: string;
    value: string;
  };
}

interface SlipData {
  payload: string;
  transRef: string;
  date: string;
  countryCode: string;
  amount: SlipAmount;
  fee: number;
  ref1: string;
  ref2: string;
  ref3: string;
  sender: SlipParty;
  receiver: SlipParty;
}

interface ApiResponse<T> {
  status: number;
  message?: string;
  data?: T;
}

ใช้งานกับ TypeScript

typescript
const verifySlip = async (payload: string): Promise<SlipData> => {
  const response = await fetch('https://developer.easyslip.com/api/v1/verify', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.EASYSLIP_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ payload })
  });

  const result: ApiResponse<SlipData> = await response.json();

  if (result.status !== 200 || !result.data) {
    throw new Error(result.message || 'Unknown error');
  }

  return result.data;
};

API v2

ตรวจสอบสลิปธนาคาร (v2)

javascript
const verifySlipV2 = async (payload, options = {}) => {
  const response = await fetch('https://api.easyslip.com/v2/verify/bank', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.EASYSLIP_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      payload,
      ...options
    })
  });

  const result = await response.json();

  if (result.status !== 200) {
    throw new Error(result.message);
  }

  return result.data;
};

// การใช้งานกับ account matching
const slip = await verifySlipV2('00020101021230...', {
  receiverAccount: '1234567890',
  amount: 1000.00
});

if (slip.receiver.account.match) {
  console.log('บัญชีผู้รับตรงกัน!');
}

if (slip.amount.match) {
  console.log('จำนวนเงินตรงกัน!');
}

ข้อมูลบัญชี (v2)

javascript
const getAccountInfo = async () => {
  const response = await fetch('https://api.easyslip.com/v2/info', {
    headers: {
      'Authorization': `Bearer ${process.env.EASYSLIP_API_KEY}`
    }
  });

  const result = await response.json();

  if (result.status !== 200) {
    throw new Error(result.message);
  }

  return result.data;
};

const info = await getAccountInfo();
console.log('โควต้าคงเหลือ:', info.quota.remaining);

สร้าง QR Code (v1)

javascript
const generateQR = async (config) => {
  const response = await fetch('https://developer.easyslip.com/api/v1/qr/generate', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.EASYSLIP_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(config)
  });

  const result = await response.json();

  if (result.status !== 200) {
    throw new Error(result.message);
  }

  return result.data;
};

// สร้าง PromptPay QR
const promptPayQR = await generateQR({
  type: 'PROMPTPAY',
  msisdn: '0812345678',
  amount: 100.00
});

// แสดง QR Code
const img = document.createElement('img');
img.src = `data:${promptPayQR.mime};base64,${promptPayQR.image}`;
document.body.appendChild(img);

EasySlip Client Class

javascript
class EasySlipClient {
  constructor(apiKey, version = 'v1') {
    this.apiKey = apiKey;
    this.baseUrl = `https://developer.easyslip.com/api/${version}`;
  }

  async request(endpoint, options = {}) {
    const response = await fetch(`${this.baseUrl}${endpoint}`, {
      ...options,
      headers: {
        'Authorization': `Bearer ${this.apiKey}`,
        ...options.headers
      }
    });

    const result = await response.json();

    if (result.status !== 200) {
      const error = new Error(result.message);
      error.status = result.status;
      error.data = result.data;
      throw error;
    }

    return result.data;
  }

  async verifyByPayload(payload, checkDuplicate = false) {
    return this.request('/verify', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ payload, checkDuplicate })
    });
  }

  async verifyByImage(file, checkDuplicate = false) {
    const formData = new FormData();
    formData.append('file', file);
    formData.append('checkDuplicate', String(checkDuplicate));

    return this.request('/verify', {
      method: 'POST',
      body: formData
    });
  }

  async verifyByUrl(url, checkDuplicate = false) {
    return this.request('/verify', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ url, checkDuplicate })
    });
  }

  async verifyByBase64(image, checkDuplicate = false) {
    return this.request('/verify', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ image, checkDuplicate })
    });
  }

  async generateQR(config) {
    return this.request('/qr/generate', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(config)
    });
  }

  async getAccountInfo() {
    return this.request('/me');
  }
}

// การใช้งาน
const client = new EasySlipClient(process.env.EASYSLIP_API_KEY);

const slip = await client.verifyByPayload('00020101021230...');
console.log('จำนวนเงิน:', slip.amount.amount);

const qr = await client.generateQR({
  type: 'PROMPTPAY',
  msisdn: '0812345678',
  amount: 500
});
console.log('QR สร้างสำเร็จ');

จัดการ Error

javascript
const verifyWithErrorHandling = async (payload) => {
  try {
    const slip = await verifySlip(payload);
    return { success: true, data: slip };
  } catch (error) {
    switch (error.message) {
      case 'invalid_payload':
        return { success: false, error: 'Payload ไม่ถูกต้อง' };
      case 'slip_not_found':
        return { success: false, error: 'ไม่พบสลิป' };
      case 'quota_exceeded':
        return { success: false, error: 'โควต้าหมด' };
      case 'duplicate_slip':
        return { success: false, error: 'สลิปซ้ำ', data: error.data };
      case 'unauthorized':
        return { success: false, error: 'API Key ไม่ถูกต้อง' };
      default:
        return { success: false, error: error.message };
    }
  }
};

ที่เกี่ยวข้อง

Bank Slip Verification API for Thai Banking