File manager - Edit - /var/www/order.cmtc.ac.th/user/testqr.php
Back
<?php require_once '../libs/phpqrcode/qrlib.php'; /** * ✅ ฟังก์ชันคำนวณ CRC16-CCITT (XMODEM) */ function crc16_xmodem($string) { $crc = 0xFFFF; for ($i = 0; $i < strlen($string); $i++) { $crc ^= (ord($string[$i]) << 8); for ($j = 0; $j < 8; $j++) { if ($crc & 0x8000) { $crc = (($crc << 1) ^ 0x1021) & 0xFFFF; } else { $crc = ($crc << 1) & 0xFFFF; } } } return $crc & 0xFFFF; } /** * ✅ สร้าง Payload สำหรับ PromptPay Merchant ID * ตามมาตรฐาน EMVCo Thailand Standard */ function generatePromptPayQR($merchant_id, $amount) { $payload = "000201010211"; // fixed header $payload .= "3075"; // merchant template ID (A000000677) $payload .= "0016A0000006770101120115" . $merchant_id; $payload .= "0208194M09940"; // ถุงเงิน Merchant Code $payload .= "5303764"; // currency: THB $payload .= "54" . sprintf("%02d", strlen($amount)) . $amount; // amount $payload .= "5802TH"; // country $payload .= "62070704" . "0000"; // additional data template $payload .= "6304"; // CRC field header // คำนวณ CRC16 $crc = strtoupper(str_pad(dechex(crc16_xmodem($payload)), 4, '0', STR_PAD_LEFT)); return $payload . $crc; } // ---------------------- // ✅ ข้อมูลร้านค้า (ตัวอย่างจริง) // ---------------------- $merchant_id = "0115010753700088"; // Merchant ID จากแอป "ถุงเงิน" $account_name = "เหรียญที่ระลึก-ทำบุญอาคารอเนกประสงค์"; $owner_name = "วิทยาลัยเทคนิคเชียงใหม่"; $amount = isset($_GET['amount']) ? number_format($_GET['amount'], 2, '.', '') : "199.00"; // ✅ สร้าง Payload และ QR Code $payload = generatePromptPayQR($merchant_id, $amount); // ✅ สร้างภาพ QR ชั่วคราว $tempFile = '../libs/phpqrcode/tmp/temp_qr.png'; QRcode::png($payload, $tempFile, QR_ECLEVEL_M, 6, 2); ?> <!DOCTYPE html> <html lang="th"> <head> <meta charset="UTF-8"> <title>ทดสอบ QR พร้อมเพย์ (ถุงเงิน)</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> <style> body { font-family:'Kanit',sans-serif; background:#f9fafb; } .container { max-width:600px; margin-top:60px; } .card { border-radius:15px; box-shadow:0 4px 8px rgba(0,0,0,0.1); } .qr-box { text-align:center; background:#fff; padding:30px; border-radius:15px; } .qr-box img { width:240px; margin:20px auto; } input.form-control { text-align:center; } </style> </head> <body> <div class="container"> <div class="card p-4"> <h3 class="text-center mb-3">📱 ทดสอบ QR พร้อมเพย์ (Merchant ID)</h3> <form method="get" class="text-center mb-3"> <label>ระบุจำนวนเงิน (บาท)</label> <div class="input-group mb-3"> <input type="number" name="amount" class="form-control" step="0.01" min="1" value="<?=$amount?>"> <button class="btn btn-primary" type="submit">สร้าง QR ใหม่</button> </div> </form> <div class="qr-box"> <img src="<?=$tempFile?>" alt="QR PromptPay"> <h5 class="mt-3 text-success">ยอดชำระ: <?=$amount?> บาท</h5> <p><b>ชื่อบัญชี:</b> <?=$account_name?><br> <b>เจ้าของบัญชี:</b> <?=$owner_name?></p> <hr> <div class="text-start"> <p><b>รหัส QR (Raw Payload):</b></p> <textarea class="form-control" rows="4" readonly><?=$payload?></textarea> </div> </div> </div> </div> </body> </html>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.42 |
proxy
|
phpinfo
|
Settings