PromptPay
QR PromptPay - Read, Write & Validate (EMVCo)
Install / Use
/learn @saladpuk/PromptPayREADME
Prompt Pay (EMVCo)
ติดตั้ง
อยากเอาไปใช้ก็ติดตั้งผ่าน nuget ได้เลย หรือจะใช้ .NET CLI ก็ได้เช่นกันขอรับ
dotnet add package Saladpuk.PromptPay
ใครอยากเอาไปปู้ยี้ปู้ยำอะไรก็ตามสบาย ถ้าทำแล้วดีหรือเจอจุดผิดก็ฝาก
pull-requestเข้ามาด้วยจะเป็นประคุณมาก โค้ดตัวนี้ใช้ .NET Standard 2.0 นะจ๊ะ
มีคำอธิบายเป็นภาษาไทย เพื่อให้นักพัฒนาชาวไทยสามารถเข้าถึงได้ง่าย

การใช้งาน
QR ตามมาตรฐานของ EMVCo ได้แบ่งไว้ 2 ลักษณะการใช้งานคือ
- Static QR เป็น QR ประเภทใช้จ่ายเงินได้หลายครั้ง (ใช้ซ้ำได้)
- Dynamic QR เป็น QR ประเภทจ่ายเงินได้เพียงครั้งเดียวแล้วทิ้ง (ใช้ซ้ำไม่ได้)
สำหรับโค้ดในการสร้าง QR แต่ละรูปแบบก็ตามด้านล่างนี่แหละ
// Static QR
IPromptPayBuilder builder = PPay.StaticQR;
// Dynamic QR
IPromptPayBuilder builder = PPay.DynamicQR;
ตัวโค้ดที่เขียนไว้ได้เพิ่มความสามารถในการ ถอดความหมาย ของ EMVCo และ PromptPay เอาไว้ด้วย โดยสามารถเรียกใช้งานตามด้านล่าง
// ตัวอ่าน QR ตามมาตรฐาน EMVCo และ PromptPay
IPromptPayQrReader reader = PPay.Reader;
การสร้าง QR
1.สร้าง QR โอนเงินสำหรับบุคคลทั่วไป (Credit Transfer - Tag 29)
เป็นการโอนเงินระหว่างประชาชนทั่วไปไม่เกี่ยวกับธุรกิจหรือบริษัทใดๆ โดยการสร้าง QR ประเภทนี้ จะต้องเรียกใช้ผ่านเมธอด CreateCreditTransferQrCode() ตามโค้ดด้านล่างนี้
// สร้าง QR โอนเงินสำหรับบุคคลทั่วไป
string qr = PPay.StaticQR.CreateCreditTransferQrCode();
การระบุผู้รับเงิน
ตามมาตรฐานของธนาคารแห่งประเทศไทย เราสามารถระบุผู้รับเงินได้ 4 วิธีคือ เบอร์มือถือ, เลขประจำตัวประชาชน, เลขบัญชีธนาคาร และ e-wallet ตามโค้ดตัวอย่างด้านล่างนี้
- ระบุผู้รับเงินด้วย
เบอร์มือถือ
// โอนเงินพร้อมเพย์ไปที่ เบอร์มือถือ 091-418-5401 (จำนวนเงินที่จะโอนผู้ใช้ต้องกรอกเอง)
string qr = PPay.StaticQR.MobileNumber("0914185401").CreateCreditTransferQrCode();
- ระบุผู้รับเงินด้วย
เลขประจำตัวประชาชน
// โอนเงินพร้อมเพย์ไปที่ เลขประจำตัวประชาชน 0-0000-00000-00-0 (จำนวนเงินที่จะโอนผู้ใช้ต้องกรอกเอง)
string qr = PPay.StaticQR.NationalId("0000000000000").CreateCreditTransferQrCode();
- ระบุผู้รับเงินด้วย
เลขบัญชีธนาคาร
// โอนเงินพร้อมเพย์ไปที่ เลขบัญชีธนาคาร 0000000000 (จำนวนเงินที่จะโอนผู้ใช้ต้องกรอกเอง)
string qr = PPay.StaticQR.BankAccount("000000000000000").CreateCreditTransferQrCode();
- ระบุผู้รับเงินด้วย
e-wallet
// โอนเงินพร้อมเพย์ไปที่ e-Wallet Id 000000000000000 (จำนวนเงินที่จะโอนผู้ใช้ต้องกรอกเอง)
string qr = PPay.StaticQR.EWallet("000000000000000").CreateCreditTransferQrCode();
การกำหนดจำนวนเงินที่ต้องจ่าย
เราสามารถสร้าง QR ที่มีการกำหนดเงินที่ต้องจ่ายเป็นค่าตายตัวได้เลย โดยการเรียกใช้เมธอด Amount() ตามโค้ดตัวอย่างด้านล่าง
// โอนเงินพร้อมเพย์ไปที่ เบอร์มือถือ 091-418-5401 จำนวน 50 บาท
string qr = PPay.StaticQR.MobileNumber("0914185401").Amount(50).CreateCreditTransferQrCode();
// โอนเงินพร้อมเพย์ไปที่ เลขประจำตัวประชาชน 0-0000-00000-00-0 จำนวน 50 บาท
string qr = PPay.StaticQR.NationalId("0000000000000").Amount(50).CreateCreditTransferQrCode();
// โอนเงินพร้อมเพย์ไปที่ เลขบัญชีธนาคาร 0000000000 จำนวน 50 บาท
string qr = PPay.StaticQR.BankAccount("000000000000000").Amount(50).CreateCreditTransferQrCode();
// โอนเงินพร้อมเพย์ไปที่ e-Wallet Id 000000000000000 จำนวน 50 บาท
string qr = PPay.StaticQR.EWallet("000000000000000").Amount(50).CreateCreditTransferQrCode();
สำหรับคนที่อยากสร้าง QR โดยไม่ต้องรู้เรื่องอะไรเลยก็สามารถเรียกใช้งานแบบนี้ได้
// โอนเงินพร้อมเพย์ไปที่ เลขประจำตัวประชาชน 0-0000-00000-00-0
string qr = PPay.StaticQR
.CreateCreditTransferQrCode(new CreditTransfer
{
NationalIdOrTaxId = "0000000000000"
});
Console.WriteLine($"Credit Transfer (PID): {creditTransferQR2}");
เพิ่มเติม
กรณีที่เป็น QR ประเภท ร้านเป็นผู้แสดง QR ให้ลูกค้าสแกน สามารถกำหนดโดยเรียกใช้เมธอด MerchantPresentedQR()
string qr = PPay.StaticQR.MerchantPresentedQR().CreateCreditTransferQrCode();
กรณีที่เป็น QR ประเภท ลูกค้าเป็นผู้แสดง QR Code ให้ร้านค้าสแกน สามารถกำหนดโดยเรียกใช้เมธอด CustomerPresentedQR()
string qr = PPay.StaticQR.CustomerPresentedQR().CreateCreditTransferQrCode();
2.สร้าง QR สำหรับธุรกิจ (Bill Payment - Tag 30)
เป็นการสร้าง QR สำหรับเรียกเก็บเงินจาก ร้านค้า/บริษัท โดยการสร้าง QR ประเภทนี้ จะต้องเรียกใช้ผ่านเมธอด CreateBillPaymentQrCode() ตามโค้ดด้านล่างนี้
// สร้าง QR สำหรับธุรกิจ
string qr = PPay.StaticQR.CreateBillPaymentQrCode();
การระบุผู้รับเงิน
ตามมาตรฐานของธนาคารแห่งประเทศไทย ตัว QR ประเภทนี้สามารถกำหนดผู้รับเงินได้ 2 วิธีคือ รหัสประจำตัวประชาชน หรือ เลขประจำตัวผู้เสียภาษี ตามด้วยรหัสร้านสาขา (suffix) ต่อท้าย 2 ตัว และรหัสอ้างอิงเพื่อเอาไว้ยืนยันกับธนาคารกรณีมีปัญหา ตามโค้ดตัวอย่างด้านล่างนี้
- ระบุผู้รับเงินด้วย
รหัสประจำตัวประชาชน
// จ่ายเงินพร้อมเพย์ไปที่ รหัสประชาชน 0-0000-00000-00-0 รหัสร้านสาขา 99 (2 หลัก)
// รหัสอ้างอิง 1: 1234, รหัสอ้างอิง 2: 5678
string qr = PPay.StaticQR
.NationalId("0000000000000")
.BillerSuffix("99")
.BillRef1("1234")
.BillRef2("5678")
.CreateBillPaymentQrCode();
- ระบุผู้รับเงินด้วย
เลขประจำตัวผู้เสียภาษี
// จ่ายเงินพร้อมเพย์ไปที่ เลขประจำตัวผู้เสียภาษี 0-0000-00000-00-0 รหัสร้านสาขา 99 (2 หลัก)
// รหัสอ้างอิง 1: 1234, รหัสอ้างอิง 2: 5678 (จำนวนเงินที่จะโอนผู้ใช้ต้องกรอกเอง)
string qr = PPay.StaticQR
.TaxId("000000000000099")
.BillerSuffix("99")
.BillRef1("1234")
.BillRef2("5678")
.CreateBillPaymentQrCode();
การกำหนดจำนวนเงินที่ต้องจ่าย
เราสามารถสร้าง QR ที่มีการกำหนดเงินที่ต้องจ่ายเป็นค่าตายตัวได้เลย โดยการเรียกใช้เมธอด Amount() ตามโค้ดตัวอย่างด้านล่าง
// จ่ายเงินพร้อมเพย์ไปที่ เลขประจำตัวผู้เสียภาษี 0-0000-00000-00-0 รหัสร้านสาขา 99 (2 หลัก)
// รหัสอ้างอิง 1: 1234, รหัสอ้างอิง 2: 5678 จำนวน 50 บาท
string qr = PPay.StaticQR
.TaxId("000000000000099")
.BillerSuffix("99")
.BillRef1("1234")
.BillRef2("5678")
.Amount(50)
.CreateBillPaymentQrCode();
สำหรับคนที่อยากสร้าง QR โดยไม่ต้องรู้เรื่องอะไรเลยก็สามารถเรียกใช้งานแบบนี้ได้
// จ่ายเงินพร้อมเพย์ไปที่ เลขประจำตัวผู้เสียภาษี 0-0000-00000-00-0 รหัสร้านสาขา 99 (2 หลัก)
// รหัสอ้างอิง 1: 1234, รหัสอ้างอิง 2: 5678 (จำนวนเงินที่จะโอนผู้ใช้ต้องกรอกเอง)
string qr = PPay.DynamicQR
.CreateBillPaymentQrCode(new BillPayment
{
BillerId = "000000000000099",
Suffix = "02",
Reference1 = "1234",
Reference2 = "5678",
});
เพิ่มเติม
กรณีที่เป็น QR ประเภท ใช้ภายในประเทศ สามารถกำหนดโดยเรียกใช้เมธอด DomesticMerchant()
string qr = PPay.StaticQR.DomesticMerchant().CreateBillPaymentQrCode();
กรณีที่เป็น QR ประเภท ใช้ข้ามประเทศ สามารถกำหนดโดยเรียกใช้เมธอด CrossBorderMerchant()
string qr = PPay.StaticQR.CrossBorderMerchant().CreateBillPaymentQrCode();
ตัวถอดความหมาย QR
ในกรณีที่เราได้รับ QR code ที่เป็นข้อความยาวๆเข้ามา แล้วเราต้องการรู้ความหมายของมัน เราสามารถเรียกใช้งานตัว QR Reader ได้ด้วยคำสั่งด้านล่างนี้ (คำสั่งนี้รอบรับมาตรฐาน EMVCo และ PromptPay)
// QR โอนเงินพร้อมเพย์ไปยังเบอร์โทร 0914185401 จำนวนเงิน 50 บาท
string qr = "00020101021229370016A000000677010111011300669141854015303764540550.005802TH630401F8";
IPromptPayQrInfo model = PPay.Reader.ReadQrPromptPay(qr);
ผลลัพท์
{
"Reusable": false,
"Currency": "THB",
"CreditTransfer": {
"AID": "A000000677010111",
"MobileNumber": "66914185401",
"NationalIdOrTaxId": null,
"EWalletId": null,
"BankAccount": null,
"OTA": null,
"CustomerPresentedQR": false
},
"BillPayment": null,
"Segments": [
{
"RawValue": "000201",
"Id": "00",
"Length": "02",
"Value": "01",
"IdByConvention": 0
},
{
"RawValue": "010212",
"Id": "01",
"Length": "02",
"Value": "12",
"IdByConvention": 1
},
{
"RawValue": "29370016A00000067701011101130066914185401",
"Id": "29",
"Length": "37",
"Value": "0016A00000067701011101130066914185401",
"IdByConvention": 2
},
{
"RawValue": "5303764",
"Id": "53",
"Length": "03",
"Value": "764",
"IdByConvention": 53
},
{
"RawValue": "540550.00",
"Id": "54",
"Length": "05",
"Value": "50.00",
"IdByConvention": 54
},
{
"RawValue": "5802TH",
"Id": "58",
"Length": "02",
"Value": "TH",
"IdByConvention": 58
},
{
"RawValue": "630401F8",
"Id": "63",
"Length": "04",
"Value": "01F8",
"IdByConvention": 63
}
],
"PayloadFormatIndicator": "01",
"PointOfInitiationMethod": "12",
"MerchantAccountInformation": "0016A00000067701011101130066914185401",
"MerchantCategoryCode": null,
"TransactionCurrency": "764",
"TransactionAmount": "50.00",
"TipOrConvenienceIndicator": null,
"ValueOfConvenienceFeeFixed": null,
"ValueOfConvenienceFeePercentage": null,
"CountryCode": "TH",
"MerchantName": null,
"MerchantCity": null,
"PostalCode": null,
"AdditionalData": null,
"CRC": "01F8",
"MerchantInformationLanguageTemplate": null,
"RFU": null
}
อ้างอิง
ตัวช่วยในการ อ่าน และ สร้าง QR Prompt Pay ตามมาตรฐานของธนาคารแห่งประเทศไทย BOT (Bank of Thailand) โดยอ้างอิงจากเอกสารสำคัญ 3 ตัวด้านล่างนี้
Progress
|Feature|สถานะ|หมายเหตุ| |--|--|--| |สร้าง Bill Payment|ใช้งานได้|เทสเคสยังไม่ครอบคลุมพอ| |สร้าง Transfer with PromptPay ID|ใช้งานได้|เทสเคสยังไม่ครอบคลุมพอ + ตัดเบอร์โทรกากๆไปก่อน| |ถอดความหมาย QR|ใช้งานได้|เทสเคสยังไม่ครอบคลุมพอ + ยังถอดไม่ครบทุกฟิลด์| |Validators & Suggestion|ยังไม่ได้ทำ||
Related Skills
node-connect
352.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.1kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
352.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
352.0kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
