สร้าง QR Code
สร้าง QR Code พร้อมเพย์และร้านค้าสำหรับรับชำระเงิน
Endpoint
POST /qr/generateURL เต็ม: https://api.easyslip.com/v1/qr/generate
การยืนยันตัวตน
จำเป็น ดูคู่มือการยืนยันตัวตน
Authorization: Bearer YOUR_API_KEY
Content-Type: application/jsonv1 เท่านั้น
การสร้าง QR Code มีเฉพาะใน API v1
Request
ประเภท QR ที่รองรับ
- PromptPay - QR Code พร้อมเพย์ ด้วยเบอร์โทรศัพท์ เลขบัตรประชาชน E-wallet ID หรือ Biller ID ที่ลงทะเบียนไว้ (Tag 30)
- K-Shop - QR Code ร้านค้า Kasikorn
- Mae Manee - QR Code ร้านค้า Mae Manee
- Tungngern - QR Code ร้านค้า Tungngern
- Bill Payment - รูปแบบเดิมที่ยังรองรับ: QR Code ชำระบิลด้วย Biller ID ได้ QR เดียวกับ PromptPay แบบ
billerId
Type Definitions
// Request
type QRGenerateRequest = PromptPayRequest | KShopRequest | MaeManeeRequest | TungngernRequest | BillPaymentRequest;
interface PromptPayRequest {
type: 'PROMPTPAY';
// ระบุอย่างใดอย่างหนึ่งเท่านั้น: msisdn, natId, eWalletId หรือ billerId
msisdn?: string; // เบอร์โทรศัพท์ (0xxxxxxxxx)
natId?: string; // เลขบัตรประชาชน (13 หลัก)
eWalletId?: string; // E-wallet ID (15 หลัก)
billerId?: string; // Biller ID 15 หลักรวม suffix; ต้องส่งเป็น string เพื่อคงเลขศูนย์ด้านหน้า
ref1?: string; // จำเป็นเมื่อใช้ billerId: ASCII ที่พิมพ์ได้ 1-20 ตัว คงตัวพิมพ์เล็ก/ใหญ่
ref2?: string; // ใช้ได้เฉพาะกับ billerId: รูปแบบเดียวกับ ref1; ไม่ต้องส่งหากไม่ใช้
amount?: number; // จำนวนเงิน (ทศนิยม 2 ตำแหน่ง); กับ billerId 0.01 ถึง 9999999999.99
}
// รูปแบบเดิมที่ยังรองรับ: ได้ QR เดียวกับ PROMPTPAY แบบ billerId
interface BillPaymentRequest {
type: 'BILL_PAYMENT';
billerId: string; // 15 หลักรวม suffix; ต้องส่งเป็น string เพื่อคงเลขศูนย์ด้านหน้า
ref1: string; // ASCII ที่พิมพ์ได้ 1-20 ตัว คงตัวพิมพ์เล็ก/ใหญ่
ref2?: string; // รูปแบบเดียวกับ ref1; ไม่ต้องส่งหากไม่ใช้
amount?: number; // 0.01 ถึง 9999999999.99 ทศนิยมไม่เกิน 2 ตำแหน่ง
}
interface KShopRequest {
type: 'KSHOP';
ref1: string; // Reference 1 (1-20 ตัวอักษร, ตัวพิมพ์ใหญ่)
amount?: number; // จำนวนเงิน (ทศนิยม 2 ตำแหน่ง)
}
interface MaeManeeRequest {
type: 'MAE_MANEE';
ref1: string; // Reference 1 (1-20 ตัวอักษร, ตัวพิมพ์ใหญ่)
amount?: number; // จำนวนเงิน (ทศนิยม 2 ตำแหน่ง)
}
interface TungngernRequest {
type: 'TUNGNGERN';
ref1: string; // Reference 1 (1-20 ตัวอักษร, ตัวพิมพ์ใหญ่)
merchantName?: string; // ชื่อร้านค้า (1-25 ตัวอักษร)
amount?: number; // จำนวนเงิน (ทศนิยม 2 ตำแหน่ง)
}
// Response
interface QRGenerateResponse {
status: 200;
data: QRData;
}
interface QRData {
image: string; // รูป PNG ที่เข้ารหัส Base64
mime: string; // MIME type (image/png)
payload: string; // ข้อมูล QR Code Payload
}
// Error Response
interface ErrorResponse {
status: number;
message: string;
details?: string | Array<{ field: string; message: string }>;
}ตัวอย่าง Request
PromptPay (Biller ID)
ส่ง type เป็น PROMPTPAY พร้อม Biller ID 15 หลักที่ลงทะเบียนกับธนาคารหรือผู้ให้บริการแล้ว เส้นนี้สร้าง QR สำหรับรับชำระเงิน ไม่ได้ออกหรือลงทะเบียน Biller ID ใหม่ และไม่ได้ตรวจสอบว่า ID นั้นเปิดใช้งานอยู่หรือไม่
{
"type": "PROMPTPAY",
"billerId": "010555123456701",
"ref1": "INV20261014001",
"ref2": "CUSTOMER001",
"amount": 125.50
}ตัวอย่าง ID ข้างต้นใช้ประกอบเอกสารเท่านั้น ให้แทนด้วย Biller ID ของคุณ
| ฟิลด์ | จำเป็น | รูปแบบ |
|---|---|---|
type | ใช่ | "PROMPTPAY" |
billerId | ใช่ | string ตัวเลข 15 หลัก รวม suffix ไม่ตัดเลขศูนย์ด้านหน้า |
ref1 | ใช่ | ASCII ที่พิมพ์ได้ 1-20 ตัว ห้ามว่างล้วน |
ref2 | ไม่ | รูปแบบเดียวกับ ref1; ไม่ต้องส่งหากไม่ใช้ |
amount | ไม่ | number บวก ทศนิยมไม่เกิน 2 ตำแหน่ง 0.01 ถึง 9999999999.99 บาท |
ห้ามส่ง msisdn, natId หรือ eWalletId พร้อมกับ billerId (ได้ 400) คงค่าอ้างอิงตามที่ส่งทุกตัวอักษร ไม่เปลี่ยนเป็นตัวพิมพ์ใหญ่ ไม่ตัดช่องว่าง ให้ใช้รูปแบบอ้างอิงที่ธนาคารกำหนดสำหรับ Biller ID ของคุณ หากไม่ส่ง amount ผู้จ่ายระบุจำนวนเงินเองได้ รูปแบบ response (image, mime, payload) เหมือน QR ประเภทเดิม
รูปแบบข้อมูลอ้างอิง มาตรฐาน Thai QR Code ของ ธปท. หน้า 15
Bill Payment (รูปแบบเดิม)
BILL_PAYMENT ยังใช้ได้ด้วยฟิลด์เดียวกัน (billerId, ref1, ref2, amount) และเงื่อนไขเดียวกัน เมื่อส่งข้อมูลเดียวกันจะได้ QR และ payload เหมือนกับ PROMPTPAY แบบ billerId ทุกตัวอักษร ระบบที่เชื่อมต่อใหม่แนะนำให้ใช้ PROMPTPAY
{
"type": "BILL_PAYMENT",
"billerId": "010555123456701",
"ref1": "INV20261014001",
"ref2": "CUSTOMER001",
"amount": 125.50
}PromptPay
{
"type": "PROMPTPAY",
"msisdn": "0812345678",
"amount": 100.00
}พารามิเตอร์:
| พารามิเตอร์ | ประเภท | จำเป็น | คำอธิบาย |
|---|---|---|---|
type | string | ใช่ | "PROMPTPAY" |
msisdn | string | เลือก 1 | เบอร์โทรศัพท์ (0xxxxxxxxx) |
natId | string | เลือก 1 | เลขบัตรประชาชน (13 หลัก) |
eWalletId | string | เลือก 1 | E-wallet ID (15 หลัก) |
billerId | string | เลือก 1 | Biller ID (15 หลักรวม suffix ไม่ตัดเลขศูนย์ด้านหน้า) |
ref1 | string | เมื่อใช้ billerId | Reference 1 (ASCII ที่พิมพ์ได้ 1-20 ตัว คงตัวพิมพ์เล็ก/ใหญ่) จำเป็นเมื่อใช้ billerId |
ref2 | string | ไม่ | Reference 2 ใช้ได้เฉพาะกับ billerId (รูปแบบเดียวกับ ref1) |
amount | number | ไม่ | จำนวนเงิน (ทศนิยม 2 ตำแหน่ง; กับ billerId 0.01 ถึง 9999999999.99) |
TIP
ต้องระบุ 1 อย่างจาก: msisdn, natId, eWalletId หรือ billerId ส่วน ref1 และ ref2 ใช้ได้เฉพาะกับ billerId หากส่งพร้อมตัวระบุอื่นจะได้ 400
K-Shop
{
"type": "KSHOP",
"ref1": "ORDER12345",
"amount": 250.00
}พารามิเตอร์:
| พารามิเตอร์ | ประเภท | จำเป็น | คำอธิบาย |
|---|---|---|---|
type | string | ใช่ | "KSHOP" |
ref1 | string | ใช่ | Reference 1 (1-20 ตัวอักษร, ตัวพิมพ์ใหญ่) |
amount | number | ไม่ | จำนวนเงิน (ทศนิยม 2 ตำแหน่ง) |
Mae Manee
{
"type": "MAE_MANEE",
"ref1": "ORDER12345",
"amount": 500.00
}พารามิเตอร์:
| พารามิเตอร์ | ประเภท | จำเป็น | คำอธิบาย |
|---|---|---|---|
type | string | ใช่ | "MAE_MANEE" |
ref1 | string | ใช่ | Reference 1 (1-20 ตัวอักษร, ตัวพิมพ์ใหญ่) |
amount | number | ไม่ | จำนวนเงิน (ทศนิยม 2 ตำแหน่ง) |
Tungngern
{
"type": "TUNGNGERN",
"ref1": "ORDER12345",
"merchantName": "ร้านของฉัน",
"amount": 750.00
}พารามิเตอร์:
| พารามิเตอร์ | ประเภท | จำเป็น | คำอธิบาย |
|---|---|---|---|
type | string | ใช่ | "TUNGNGERN" |
ref1 | string | ใช่ | Reference 1 (1-20 ตัวอักษร, ตัวพิมพ์ใหญ่) |
merchantName | string | ไม่ | ชื่อร้านค้า (1-25 ตัวอักษร) |
amount | number | ไม่ | จำนวนเงิน (ทศนิยม 2 ตำแหน่ง) |
ตัวอย่าง
curl -X POST https://api.easyslip.com/v1/qr/generate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "PROMPTPAY",
"msisdn": "0812345678",
"amount": 100.00
}'const generateQR = async (config) => {
const response = await fetch('https://api.easyslip.com/v1/qr/generate', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_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);
// สร้าง K-Shop QR
const kshopQR = await generateQR({
type: 'KSHOP',
ref1: 'ORDER12345',
amount: 250.00
});function generateQR(array $config): array
{
$apiKey = getenv('EASYSLIP_API_KEY');
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://api.easyslip.com/v1/qr/generate',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json'
],
CURLOPT_POSTFIELDS => json_encode($config)
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
if ($result['status'] !== 200) {
throw new Exception($result['message']);
}
return $result['data'];
}
// สร้าง PromptPay QR
$qr = generateQR([
'type' => 'PROMPTPAY',
'msisdn' => '0812345678',
'amount' => 100.00
]);
// บันทึกเป็นไฟล์
$imageData = base64_decode($qr['image']);
file_put_contents('qr-code.png', $imageData);
// หรือแสดงในหน้าเว็บ
echo '<img src="data:' . $qr['mime'] . ';base64,' . $qr['image'] . '">';import requests
import base64
import os
def generate_qr(config: dict) -> dict:
response = requests.post(
'https://api.easyslip.com/v1/qr/generate',
headers={
'Authorization': f'Bearer {os.environ["EASYSLIP_API_KEY"]}',
'Content-Type': 'application/json'
},
json=config
)
result = response.json()
if result['status'] != 200:
raise Exception(result['message'])
return result['data']
# สร้าง PromptPay QR
qr = generate_qr({
'type': 'PROMPTPAY',
'msisdn': '0812345678',
'amount': 100.00
})
# บันทึกเป็นไฟล์
image_data = base64.b64decode(qr['image'])
with open('qr-code.png', 'wb') as f:
f.write(image_data)
print(f"Payload: {qr['payload']}")Response
สำเร็จ (200)
{
"status": 200,
"data": {
"image": "iVBORw0KGgoAAAANSUhEUgAA...",
"mime": "image/png",
"payload": "00020101021230..."
}
}ฟิลด์ใน Response
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
image | string | รูป PNG ที่เข้ารหัส Base64 |
mime | string | MIME type (image/png) |
payload | string | ข้อมูล QR Code Payload |
Error Responses
Request ไม่ถูกต้อง (400)
{
"status": 400,
"message": "invalid_request",
"details": [
{ "field": "ref1", "message": "Required" }
]
}PROMPTPAY ที่ใช้ msisdn, natId หรือ eWalletId จะได้ details เป็นข้อความเดียว:
{
"status": 400,
"message": "invalid_request",
"details": "ref1 and ref2 are only allowed with billerId"
}ไม่ได้รับอนุญาต (401)
{
"status": 401,
"message": "unauthorized"
}หมายเหตุ
- การสร้าง QR Code ไม่หักโควต้าการตรวจสอบ
- QR Code ที่สร้างใช้ได้ตลอดไป
- จำนวนเงินเป็น Optional - ลูกค้าสามารถกรอกจำนวนเงินเองเมื่อจ่าย
- ref1 ของ KSHOP, MAE_MANEE และ TUNGNGERN รับตัวอักษรและตัวเลข และเปลี่ยนเป็นตัวพิมพ์ใหญ่ ส่วนค่าอ้างอิงของ Biller ID (
PROMPTPAYแบบbillerIdและBILL_PAYMENT) คงตัวพิมพ์เล็ก/ใหญ่และรับ ASCII ที่พิมพ์ได้