0.0
The project is in a healthy, maintained state
thai_qr_pay is a Ruby gem providing: - ASCII-numeric TLV parsing and encoding - EMVCo CRC-16/IBM-SDLC checksum computation and validation - Generators for PromptPay AnyID, PromptPay Bill Payment, TrueMoney, etc. - Validators for slip-verify and TrueMoney slip verify payloads - BOT barcode → EMVCo QR Tag-30 conversion
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

~> 13.0
~> 3.0
 Project Readme

Thai QR Pay / ไทยคิวอาร์เพย์

A Ruby toolkit for Thailand’s EMVCo‐QR payments—PromptPay (AnyID & Bill Payment), TrueMoney, slip-verify, and BOT-barcode-to-QR conversion.
It provides:

  • ASCII-numeric TLV parsing & encoding
  • EMVCo CRC-16/XMODEM checksum computation & validation
  • PromptPay payload generators (AnyID, Bill Payment)
  • BOT barcode ↔ EMVCo QR Tag-30 conversion
  • Slip-verify & TrueMoney slip-verify validators

Ruby Gem สำหรับการชำระเงินผ่าน QR ตามมาตรฐาน EMVCo ของประเทศไทย รองรับ PromptPay (AnyID & Bill Payment), TrueMoney, slip-verify และการแปลง BOT barcode เป็น EMVCo QR
ฟีเจอร์:

  • การแยกวิเคราะห์ (parse) และสร้าง (encode) TLV แบบตัวเลข ASCII
  • คำนวณและตรวจสอบค่า CRC-16/XMODEM ตามสเปค EMVCo
  • สร้าง Payload สำหรับ PromptPay AnyID และ Bill Payment
  • แปลง BOT barcode ↔ EMVCo QR Tag-30
  • ตรวจสอบความถูกต้องของ Slip-verify และ TrueMoney slip-verify

Installation / การติดตั้ง

gem install thai_qr_pay

Usage / การใช้งาน

require 'thai_qr_pay'

1. Parsing a QR payload / วิเคราะห์ QR payload

qr_string = '000201010212...6304ABCD'
parser    = ThaiQrPay::Parser.new(qr_string, strict: true)

puts parser.get_tag_value('00')        # => '01'
puts parser.get_tag_value('29', '01')  # nested sub-tag

2. Generating PromptPay AnyID / สร้าง PromptPay AnyID

payload = ThaiQrPay::Generate::Promptpay::AnyID.payload(
  type:   'MSISDN',
  target: '0812345678',
  amount: 100.0
)
# => "00020101021229...6304XXXX"

3. Generating PromptPay Bill Payment / สร้าง PromptPay Bill Payment

payload = ThaiQrPay::Generate::Promptpay::BillPayment.payload(
  biller_id: '1234567890123',
  ref1:      'INV001',
  amount:    250.50
)

4. Converting BOT Barcode → QR Tag 30 / แปลง BOT Barcode เป็น QR Tag 30

raw    = "|1234567890123\rINV001\r\r012345"
bot    = ThaiQrPay::BOTBarcode.from_string(raw)
qr_tag = bot.to_qr_tag30

5. Validating Slip Verify / ตรวจสอบ Slip-verify

result = ThaiQrPay::Validate::SlipVerify.call(qr_string)
if result
  puts result[:sending_bank]
  puts result[:trans_ref]
else
  puts 'Invalid Slip-verify QR'
end

6. Validating TrueMoney Slip Verify / ตรวจสอบ TrueMoney Slip-verify

tm_res = ThaiQrPay::Validate::TrueMoneySlipVerify.call(qr_string)
if tm_res
  puts tm_res[:event_type]
  puts tm_res[:transaction_id]
  puts tm_res[:date]
else
  puts 'Invalid TrueMoney Slip-verify QR'
end

7. Generating Slip-Verify QR / สร้าง QR สำหรับ Slip-verify

payload = ThaiQrPay::Generate::SlipVerify.payload(
  sending_bank: 'KBank',
  trans_ref:    'REF12345'
)
# => "0004...5102TH...9104XXXX"

8. Generating TrueMoney Payment QR / สร้าง QR สำหรับ TrueMoney

payload = ThaiQrPay::Generate::TrueMoney.payload(
  mobile_no: '0812345678',
  amount:    150.0,
  message:   'สวัสดี'
)
# => "00020101...2920A000000677010111031514000081234567853037645802TH5406150.008112...6304XXXX"

9. Generating TrueMoney Slip-Verify QR / สร้าง QR สำหรับ TrueMoney Slip-verify

payload = ThaiQrPay::Generate::TrueMoneySlipVerify.payload(
  event_type:     'PAYMENT',
  transaction_id: 'TX123456',
  date:           '20250615'
)
# => "0005...000101010402PAYMENT0308TX1234560408202506159104XXXX"

License

© 2025 Chayut Orapinpatipat Released under the MIT License. See LICENSE.txt for details.