● เปิดรับงานเล็ก · remote / async · เวลาไทย (UTC+7)
ไล่ดูว่าข้อมูลผิดตรงไหน ก่อนลงมือแก้
นักพัฒนา backend / API ระดับต้น รับงานสืบหาสาเหตุบั๊ก เชื่อมต่อ API และสำรวจระบบเดิมก่อนออกแบบใหม่ ผมเขียนสิ่งที่เข้าใจให้คุณตรวจก่อนเสมอ
ลองเล่น:ลายเซ็นของ webhook
ระบบรับเงินต้องเชื่อได้ว่าคำขอมาจากผู้ให้บริการจริง ลองแก้ข้อความทีละนิดแล้วดูว่าทำไมผมตรวจจากไบต์ดิบก่อนอ่านเนื้อหา
1 · ผู้ส่ง: ลายเซ็นของข้อความต้นฉบับ
…
2 · ผู้รับ: ข้อความที่ได้รับ (แก้ได้)
3 · ผู้รับ: คำนวณลายเซ็นจากข้อความที่ได้รับ
…
4 · เปรียบเทียบ (เวลาคงที่)
ไบต์ไม่ตรงกับที่เซ็นไว้ จึงไม่อ่านเนื้อหาเลย
ลองกด "เติมช่องว่าง" หรือ "จัดรูป JSON ใหม่": ความหมายของ JSON ไม่เปลี่ยน แต่ลายเซ็นไม่ตรง เพราะลายเซ็นคิดจากไบต์ ผู้รับจึงต้องตรวจจาก raw body ก่อน parse แล้วค่อยอ่านค่า ระบบของผมทำตามลำดับนี้
ตัวอย่างนี้คำนวณ HMAC-SHA256 ในเบราว์เซอร์ของคุณด้วยคีย์สมมติ demo-secret-key ไม่เกี่ยวกับคีย์จริงของระบบใด
ลองเล่น:webhook มาได้หลายแบบ
เหตุการณ์จริงที่ระบบจ่ายเงินต้องรับมือ: ส่งซ้ำ จ่ายซ้ำสองช่องทาง ยอดไม่ตรง QR หมดอายุก่อนเงินเข้า เลือกเหตุการณ์แล้วดูว่าระบบตัดสินใจอย่างไรทีละขั้น
คำขอที่เข้ามา · POST /beam/webhook
x-beam-signature: ถูกต้อง
body: SUCCEEDED · THB · 15000 สตางค์
ก่อนรับ webhook
- ยอดบิล
- ฿150.00
- payment
- pending
- order
- served
- หมายเหตุ
- —
หลังรับ webhook
กด "ส่ง webhook" เพื่อดูผล
จำลองตามโค้ดจริงใน rice-shop-pos (promptpay.rs · webhook / settle) ไม่ได้เชื่อมต่อ Beam หรือระบบจริง
rice-shop-pos
โปรเจกต์ส่วนตัว: POS แบบ PWA สำหรับร้านข้าวหลายสาขา เปิดโค้ดเป็นสาธารณะ ไม่ใช่งานจากที่ทำงาน และผมไม่อ้างจำนวนผู้ใช้หรือรายได้
- เงิน
- เก็บเป็นสตางค์ (จำนวนเต็ม) ไม่ใช้ทศนิยม
- ประวัติการเงิน
- ออเดอร์และการชำระเงินเป็นแบบเพิ่มต่อท้าย การยกเลิก/คืนเงินเป็นสถานะพร้อมเหตุผล ไม่ลบข้อมูล
- ชำระด้วย PromptPay
- สร้าง QR ผ่าน Beam แล้วรอ webhook ที่ตรวจลายเซ็นจากไบต์ดิบ บิลปิดได้เมื่อ Beam แจ้งสำเร็จด้วยยอดที่ตรงเท่านั้น ไม่มีปุ่มให้พนักงานปิดเอง
- หลายร้าน
- ทุกตารางมี shop_id เจ้าของเข้าผ่าน Cloudflare Access พนักงานใช้ PIN พร้อมการล็อกเมื่อใส่ผิดซ้ำ
- อ่านสลิป
- คิวสลิปให้ตัวอ่านบนพีซีของเจ้าของร้านก่อน ถ้าไม่ว่างจึงใช้ Workers AI สำรอง และมีงานกวาดคิวทุกนาที
- ส่งขึ้นระบบ
- CI รันทุก push และ PR ส่วน deploy ทำเมื่อ push tag ที่อยู่บน main เท่านั้น
- Rust (axum)
- Cloudflare Workers
- D1
- R2
- React PWA
- GitHub Actions
วิธีทำงาน
- เขียนสิ่งที่เข้าใจให้ตรวจก่อนสรุปปัญหา ข้อสมมติ และคำถามที่ยังค้าง ให้คุณยืนยันก่อนลงมือ
- ไล่ edge case ที่เกี่ยวกับเงินและสถานะกดซ้ำ ยกเลิกกลางทาง ข้อมูลมาซ้ำหรือสลับลำดับ
- ใช้ AI เป็นผู้ช่วย ไม่ใช่เจ้าของงานผมใช้ช่วยวิเคราะห์ เทียบทางเลือก และรีวิว แต่ logic และการตรวจความถูกต้องเป็นหน้าที่ของผม
- ส่งมอบเป็นขั้นที่ตรวจรับได้แบ่งงวดจ่าย ถ้าขั้นแรกไม่ผ่านก็ยังไม่ต้องไปต่อ
ผมไม่รับ
- งานระดับ senior หรือเป็นเจ้าของสถาปัตยกรรม production
- DevOps / ดูแลระบบจริงตลอดเวลา
- งาน frontend ที่เน้นดีไซน์ หรือแอปมือถือ native
- งานจริงที่ไม่มีค่าจ้าง
เล่าปัญหาให้ฟังได้เลย
ทำงานประจำอยู่ จึงรับงานแบบ async ช่วงเย็นและวันหยุด ตอบภายใน 1 วันทำการ