Development

PromptPay API คืออะไร? คู่มือเชื่อม QR Payment Laravel Next.js สำหรับ SME ไทย 2026

คู่มือฉบับสมบูรณ์สำหรับเชื่อมต่อ PromptPay API สร้าง QR Payment ใน Laravel + Next.js พร้อม Webhook Security, Reconciliation และ Best Practice สำหรับ SME ไทย 2026

AF
ADS FIT Team
·7 นาที
Share:

# PromptPay API คืออะไร? คู่มือเชื่อม QR Payment Laravel + Next.js สำหรับ SME ไทย 2026

ในยุคที่คนไทยใช้ QR Payment ในชีวิตประจำวันถึงกว่า 80% ของธุรกรรมรายย่อย PromptPay ได้กลายเป็นโครงสร้างพื้นฐานทางการเงินที่ไม่มีร้านค้าหรือเจ้าของธุรกิจออนไลน์รายไหนปฏิเสธได้ การฝัง QR Payment ลงบนหน้าจอชำระเงินช่วยลดต้นทุนค่าธรรมเนียม Credit Card 2-3% ให้เหลือเพียง 0% สำหรับธุรกรรมต่ำกว่า 2,000 บาท และลด Cart Abandonment ได้สูงสุด 15-20%

แต่เจ้าของธุรกิจ SME จำนวนมากยังเข้าใจผิดว่า PromptPay ใช้ได้แค่ใน Mobile Banking App เท่านั้น ความจริงคือธนาคารทุกแห่งในไทยเปิด Open API ให้นักพัฒนาเชื่อมต่อ PromptPay เข้ากับระบบของตัวเองได้แล้ว ตั้งแต่ปี 2024-2025 เป็นต้นมา ทำให้สตาร์ทอัพและ SME สามารถสร้าง Checkout Experience แบบ End-to-End ได้โดยไม่ต้องพึ่ง Payment Gateway ที่มีค่าธรรมเนียมสูง

บทความนี้จะอธิบายตั้งแต่แนวคิดของ PromptPay พื้นฐาน, สถาปัตยกรรมการเชื่อม API, ตัวอย่างโค้ด Laravel + Next.js และวิธีจัดการ Webhook + Reconciliation อย่างปลอดภัยสำหรับธุรกิจ SME ไทยในปี 2026

PromptPay พื้นฐานและประเภทการเชื่อมต่อ

PromptPay เป็นระบบโอนเงินแบบ Real-time พัฒนาโดย ITMX ภายใต้การกำกับของธนาคารแห่งประเทศไทย (BOT) รองรับการรับชำระเงินผ่าน 3 รูปแบบหลัก ได้แก่ PromptPay ID (เบอร์โทรศัพท์, เลขบัตรประชาชน, เลข e-Wallet), PromptPay Bill Payment (สร้าง Tag 30 พร้อม Reference 1 และ Reference 2 สำหรับ Reconciliation) และ PromptPay QR Code Standard ที่ใช้ EMVCo QR Standard Tag 29

| ประเภท QR | ใช้กับ | จุดเด่น |

|----------|---------|---------|

| Static QR | ลูกค้ากรอกยอดเอง | ทำง่าย ไม่ต้องเชื่อม API |

| Dynamic QR | ระบบ POS / Web สร้างแบบ Realtime | Match ยอดอัตโนมัติ ลดข้อผิดพลาด |

| Bill Payment QR | ค่าน้ำ ค่าไฟ ภาษี SaaS | Reconciliation ผ่าน Reference Number |

ตัวเลือก API Provider สำหรับ SME

ธุรกิจ SME ไม่จำเป็นต้องสมัครเป็น Payment Gateway โดยตรง สามารถเลือกใช้ API จากผู้ให้บริการ 3 กลุ่มหลัก ได้แก่:

  • **ธนาคารโดยตรง**: SCB Easy API, KBank K-API, Bangkok Bank Bualuang iBanking API, Krungsri KMA API ค่าธรรมเนียม 0% สำหรับ SME ที่มีบัญชีธุรกิจและผ่าน KYC แล้ว
  • **Payment Aggregator**: Omise, 2C2P, Stripe Thailand, Beam Checkout มีค่าธรรมเนียม 0.6-1.2% แต่ได้ Dashboard และ Reconciliation พร้อมใช้
  • **Open Source / DIY**: ใช้ PHP Library `dpays/promptpay-qr` หรือ Node.js Library `promptpay-qr` สร้าง QR เอง แล้ว Verify ผ่าน Bank Statement API
  • สำหรับสตาร์ทอัพและ SME ที่ต้องการลดต้นทุน แนะนำให้ใช้ Bank Direct API แต่ถ้าทีมมีน้อยกว่า 3 คน Aggregator เหล่านี้คุ้มกว่า เพราะรวม PCI-DSS, Reconciliation Dashboard และ Customer Support ในแพ็กเกจเดียว

    วิธีเชื่อมต่อ PromptPay API ใน Laravel

    ขั้นตอนการ Integrate PromptPay กับ Laravel Backend แบ่งออกเป็น 4 ขั้นตอนหลัก ดังนี้:

    Step 1: ติดตั้ง Library

    ```bash

    composer require dpays/promptpay-qr

    ```

    Step 2: สร้าง Service สำหรับสร้าง QR

    ```php

    namespace App\Services;

    use Dpays\PromptpayQr\Generator;

    class PromptPayService {

    public function generateQR(string $orderId, float $amount): string {

    $payload = Generator::generate(

    id: env('PROMPTPAY_ID'),

    amount: $amount,

    ref1: $orderId

    );

    return Generator::toBase64Image($payload);

    }

    }

    ```

    Step 3: สร้าง Endpoint สำหรับ Frontend

    ```php

    Route::post('/api/checkout/qr', function(Request $r) {

    $qr = app(PromptPayService::class)->generateQR(

    $r->order_id, $r->amount

    );

    return response()->json(['qr' => $qr]);

    });

    ```

    Step 4: รับ Webhook จากธนาคาร

    ธนาคารจะส่ง Notification กลับมาที่ Endpoint ที่กำหนดเมื่อมีการชำระเงินเข้า — ต้องตรวจสอบ Signature ทุกครั้งเพื่อป้องกันการปลอมแปลง และต้องทำ Idempotency เพื่อกัน Webhook ส่งซ้ำ

    วิธีแสดง QR ใน Next.js Frontend

    หลังจากที่ Backend ส่ง QR Image กลับมา ฝั่ง Frontend ต้อง Fetch QR Image พร้อม Polling Status ทุก 3 วินาที หาก Status เปลี่ยนเป็น `paid` ให้ Redirect ไปหน้า Success และหาก Timeout 15 นาทีให้ยกเลิก Order อัตโนมัติ

    ตัวอย่าง Hook สำหรับ Polling Order Status:

    ```tsx

    useEffect(() => {

    const interval = setInterval(async () => {

    const res = await fetch(`/api/order/${orderId}/status`);

    const { status } = await res.json();

    if (status === 'paid') {

    clearInterval(interval);

    router.push('/success');

    }

    }, 3000);

    return () => clearInterval(interval);

    }, [orderId]);

    ```

    ในระบบโปรดักชั่นแนะนำให้เปลี่ยนจาก Polling เป็น Server-Sent Events (SSE) หรือ WebSocket เพื่อลด Latency และจำนวน Request ที่กระทบ Database

    Reconciliation, Webhook Security และ Best Practice

    ข้อผิดพลาดที่พบบ่อยที่สุดในการเชื่อม PromptPay API ในโปรดักชั่น คือไม่ได้ทำ Idempotency กับ Webhook ทำให้เมื่อธนาคารส่งซ้ำ ระบบบันทึกออเดอร์ซ้ำ 2-3 ครั้ง วิธีแก้คือใช้ Database Transaction + Unique Constraint บน `transaction_id` ของธนาคาร

    | ความเสี่ยง | วิธีป้องกัน |

    |-----------|-------------|

    | Webhook ปลอม | ตรวจสอบ HMAC Signature + IP Whitelist |

    | ธุรกรรมซ้ำ | Idempotency Key + DB Unique Index |

    | Replay Attack | ตรวจสอบ Timestamp + Nonce |

    | ลูกค้าโอนผิดยอด | ใช้ Dynamic QR ที่ Lock Amount |

    | ลืม Reconciliation รายวัน | Cron Job เทียบ Bank Statement |

    แนะนำให้รัน Reconciliation Job ทุกเที่ยงคืน เพื่อเปรียบเทียบยอด Order Status `paid` กับ Bank Statement API ของวันก่อน และ Flag รายการที่ไม่ตรงให้ Admin ตรวจสอบ ป้องกันปัญหา "เงินเข้าแต่ออเดอร์ไม่อัปเดต" ซึ่งเป็นสาเหตุหลักของ Customer Complaint ในธุรกิจอีคอมเมิร์ซไทย

    เปรียบเทียบ Bank API กับ Payment Aggregator

    | หัวข้อ | Bank Direct (SCB / KBank) | Aggregator (Omise / 2C2P) |

    |--------|--------------------------|--------------------------|

    | ค่าธรรมเนียม | 0% (เฉพาะ PromptPay) | 0.6-1.2% |

    | ระยะเวลา Onboard | 4-8 สัปดาห์ | 3-7 วัน |

    | Dashboard | ต้องสร้างเอง | พร้อมใช้ |

    | Multi-channel (Card+QR) | ต้องเชื่อมหลายระบบ | One Integration |

    | PCI-DSS | ต้องดูแลเอง | Aggregator ดูแลให้ |

    | ความเหมาะกับ SME | ขนาดกลาง-ใหญ่ | สตาร์ทอัพ-SME ขนาดเล็ก |

    สรุปและ Call to Action

    PromptPay API เป็นโครงสร้างพื้นฐานทางการเงินที่จำเป็นสำหรับธุรกิจไทยทุกขนาด การเชื่อมต่อด้วย Laravel + Next.js สามารถทำได้ภายใน 1-2 สัปดาห์ ลดต้นทุนค่าธรรมเนียมและสร้างประสบการณ์การชำระเงินที่ราบรื่น หากธุรกิจของคุณยังไม่มี QR Payment ในเว็บไซต์ ตอนนี้คือเวลาที่ดีที่สุดที่จะเริ่มต้น เพราะคู่แข่งของคุณกำลังลด Cart Abandonment ลงทุกวัน

    Key Takeaways:

  • เลือก Bank Direct API หากมีทีม Dev ภายในและธุรกิจขนาดกลางขึ้นไป
  • เลือก Aggregator (Omise / 2C2P / Beam) หากต้องการเริ่มต้นเร็วและลดภาระ Compliance
  • ใส่ Idempotency, Signature Verification และ Reconciliation ตั้งแต่วันแรก
  • ทดสอบ Sandbox ของธนาคารก่อนขึ้น Production ทุกครั้ง อย่าลืม Test Edge Case เช่น Network Timeout, Webhook Retry และ Refund Flow
  • 📞 ปรึกษาทีม ADS FIT สำหรับการวางระบบ Payment Integration ที่ปลอดภัยและขยายตัวได้ — [adsfit.co.th/contact](https://adsfit.co.th/contact)

    อ่านบทความที่เกี่ยวข้อง: [Better Auth คืออะไร?](/blog/better-auth-typescript-authentication-framework-nextjs-laravel-guide-sme-thailand-2026), [PCI DSS v4.0.1 Compliance](/blog/pci-dss-v4-payment-card-industry-compliance-guide-sme-thailand-2026)

    Tags

    #PromptPay#QR Payment#Laravel#Next.js#Payment Gateway#SME

    สนใจโซลูชันนี้?

    ปรึกษาทีม ADS FIT ฟรี เราพร้อมออกแบบระบบที่ฟิตกับธุรกิจของคุณ

    ติดต่อเรา →

    บทความที่เกี่ยวข้อง