ตัวอย่าง 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 };
}
}
};