Skip to content

สร้าง QR Code ​

สร้าง QR Code พร้อมเพย์และร้านค้าสำหรับรับชำระเงิน

Endpoint ​

http
POST /qr/generate

URL เต็ม: https://api.easyslip.com/v1/qr/generate

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

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

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

v1 เท่านั้น

การสร้าง 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 ​

typescript
// 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 นั้นเปิดใช้งานอยู่หรือไม่

json
{
  "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

json
{
  "type": "BILL_PAYMENT",
  "billerId": "010555123456701",
  "ref1": "INV20261014001",
  "ref2": "CUSTOMER001",
  "amount": 125.50
}

PromptPay ​

json
{
  "type": "PROMPTPAY",
  "msisdn": "0812345678",
  "amount": 100.00
}

พารามิเตอร์:

พารามิเตอร์ประเภทจำเป็นคำอธิบาย
typestringใช่"PROMPTPAY"
msisdnstringเลือก 1เบอร์โทรศัพท์ (0xxxxxxxxx)
natIdstringเลือก 1เลขบัตรประชาชน (13 หลัก)
eWalletIdstringเลือก 1E-wallet ID (15 หลัก)
billerIdstringเลือก 1Biller ID (15 หลักรวม suffix ไม่ตัดเลขศูนย์ด้านหน้า)
ref1stringเมื่อใช้ billerIdReference 1 (ASCII ที่พิมพ์ได้ 1-20 ตัว คงตัวพิมพ์เล็ก/ใหญ่) จำเป็นเมื่อใช้ billerId
ref2stringไม่Reference 2 ใช้ได้เฉพาะกับ billerId (รูปแบบเดียวกับ ref1)
amountnumberไม่จำนวนเงิน (ทศนิยม 2 ตำแหน่ง; กับ billerId 0.01 ถึง 9999999999.99)

TIP

ต้องระบุ 1 อย่างจาก: msisdn, natId, eWalletId หรือ billerId ส่วน ref1 และ ref2 ใช้ได้เฉพาะกับ billerId หากส่งพร้อมตัวระบุอื่นจะได้ 400

K-Shop ​

json
{
  "type": "KSHOP",
  "ref1": "ORDER12345",
  "amount": 250.00
}

พารามิเตอร์:

พารามิเตอร์ประเภทจำเป็นคำอธิบาย
typestringใช่"KSHOP"
ref1stringใช่Reference 1 (1-20 ตัวอักษร, ตัวพิมพ์ใหญ่)
amountnumberไม่จำนวนเงิน (ทศนิยม 2 ตำแหน่ง)

Mae Manee ​

json
{
  "type": "MAE_MANEE",
  "ref1": "ORDER12345",
  "amount": 500.00
}

พารามิเตอร์:

พารามิเตอร์ประเภทจำเป็นคำอธิบาย
typestringใช่"MAE_MANEE"
ref1stringใช่Reference 1 (1-20 ตัวอักษร, ตัวพิมพ์ใหญ่)
amountnumberไม่จำนวนเงิน (ทศนิยม 2 ตำแหน่ง)

Tungngern ​

json
{
  "type": "TUNGNGERN",
  "ref1": "ORDER12345",
  "merchantName": "ร้านของฉัน",
  "amount": 750.00
}

พารามิเตอร์:

พารามิเตอร์ประเภทจำเป็นคำอธิบาย
typestringใช่"TUNGNGERN"
ref1stringใช่Reference 1 (1-20 ตัวอักษร, ตัวพิมพ์ใหญ่)
merchantNamestringไม่ชื่อร้านค้า (1-25 ตัวอักษร)
amountnumberไม่จำนวนเงิน (ทศนิยม 2 ตำแหน่ง)

ตัวอย่าง ​

bash
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
  }'
javascript
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
});
php
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'] . '">';
python
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) ​

json
{
  "status": 200,
  "data": {
    "image": "iVBORw0KGgoAAAANSUhEUgAA...",
    "mime": "image/png",
    "payload": "00020101021230..."
  }
}

ฟิลด์ใน Response ​

ฟิลด์ประเภทคำอธิบาย
imagestringรูป PNG ที่เข้ารหัส Base64
mimestringMIME type (image/png)
payloadstringข้อมูล QR Code Payload

Error Responses ​

Request ไม่ถูกต้อง (400) ​

json
{
  "status": 400,
  "message": "invalid_request",
  "details": [
    { "field": "ref1", "message": "Required" }
  ]
}

PROMPTPAY ที่ใช้ msisdn, natId หรือ eWalletId จะได้ details เป็นข้อความเดียว:

json
{
  "status": 400,
  "message": "invalid_request",
  "details": "ref1 and ref2 are only allowed with billerId"
}

ไม่ได้รับอนุญาต (401) ​

json
{
  "status": 401,
  "message": "unauthorized"
}

หมายเหตุ ​

  • การสร้าง QR Code ไม่หักโควต้าการตรวจสอบ
  • QR Code ที่สร้างใช้ได้ตลอดไป
  • จำนวนเงินเป็น Optional - ลูกค้าสามารถกรอกจำนวนเงินเองเมื่อจ่าย
  • ref1 ของ KSHOP, MAE_MANEE และ TUNGNGERN รับตัวอักษรและตัวเลข และเปลี่ยนเป็นตัวพิมพ์ใหญ่ ส่วนค่าอ้างอิงของ Biller ID (PROMPTPAY แบบ billerId และ BILL_PAYMENT) คงตัวพิมพ์เล็ก/ใหญ่และรับ ASCII ที่พิมพ์ได้

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

Bank Slip Verification API for Thai Banking