# การจับคู่การชำระเงินและยอดเงินไม่ตรงกัน

ส่วนนี้อธิบายกฎที่บริการใช้จับคู่ธุรกรรม on-chain ขาเข้ากับใบแจ้งหนี้ที่ออกไว้ สิ่งที่เกิดขึ้นเมื่อจำนวนเงินต่างกัน และสิ่งที่ร้านค้าทำได้ในกรณีนั้น

สถานะของใบแจ้งหนี้ กำหนดเวลา และการเปลี่ยนสถานะอธิบายไว้ใน[วงจรชีวิตของใบแจ้งหนี้](./invoice-lifecycle.md)

## กฎการจับคู่จำนวนเงิน

ตอนสร้างใบแจ้งหนี้ บริการแปลงจำนวนเงินเฟียตเป็นคริปโตและล็อกจำนวนที่ได้ไว้สำหรับใบแจ้งหนี้ จำนวนเหล่านี้กลายเป็นตัวระบุของการชำระเงิน: ลูกค้าเห็นบนฟอร์มชำระเงิน และบริการค้นหาธุรกรรมจำนวนตรงตามนั้นแบบ on-chain

**จำนวนเงินที่ชำระต้องตรงกับจำนวนของใบแจ้งหนี้ทุกประการ ไม่มีค่าเผื่อใด ๆ** จำนวนที่ต้องชำระถูกกำหนดด้วยทศนิยม 2 ตำแหน่งสำหรับ Stablecoin อย่าง USDT และ USDC และ 8 ตำแหน่งสำหรับสกุลเงินคริปโตอื่น แล้วนำการชำระเงินขาเข้ามาเทียบอย่างแม่นยำ ความคลาดเคลื่อนใด ๆ — ชำระไม่ครบหรือชำระเกิน ไม่ว่าจะน้อยเพียงใด — หมายความว่าจะไม่มีการจับคู่อัตโนมัติ

**ตัวอย่าง** ใบแจ้งหนี้ 100.00 USD ถูกออกด้วยจำนวนที่ล็อกไว้ 100.12 USDT

| จำนวนเงินชำระขาเข้า | ผลลัพธ์ |
| --- | --- |
| 100.12 USDT | ใบแจ้งหนี้เปลี่ยนเป็นชำระแล้ว (Paid) โดยอัตโนมัติ |
| 100.11 USDT | ไม่มีการจับคู่อัตโนมัติ |
| 100.50 USDT | ไม่มีการจับคู่อัตโนมัติ |

หากมีการออกใบแจ้งหนี้หลายใบด้วยจำนวนเงินเฟียตเท่ากันไปยังที่อยู่เดียวกันในเวลาเดียวกัน บริการจะกำหนดจำนวนคริปโตให้แต่ละใบต่างกันเล็กน้อย ความไม่ซ้ำถูกตรวจสอบทั่วทั้งใบแจ้งหนี้ที่ยังไม่ชำระของคุณบนกระเป๋าเงินนั้น ดังนั้นที่อยู่เดียวจึงใช้ในหลายโปรเจกต์ของคุณได้อย่างปลอดภัย — จำนวนเงินจะไม่ชนกัน

สาเหตุที่พบบ่อยที่สุดของยอดไม่ตรงคือลูกค้าปัดเศษจำนวนเงินด้วยตนเอง หรือค่าธรรมเนียมเครือข่ายถูกหักตอนถอนจากแพลตฟอร์มซื้อขาย เตือนลูกค้าให้โอนตรงตามจำนวนที่แสดงบนฟอร์มชำระเงิน

## สิ่งที่เกิดขึ้นเมื่อยอดเงินไม่ตรงกัน

บริการบันทึกว่าเงินมาถึงแล้ว แต่ไม่ดำเนินการใด ๆ กับใบแจ้งหนี้:

* **ใบแจ้งหนี้ไม่เปลี่ยนสถานะ** ยังคงไม่ถูกชำระจนถึงกำหนดเวลาชำระเงิน ลูกค้ายังปิดใบแจ้งหนี้ด้วยจำนวนที่ถูกต้องได้ตราบที่หน้าต่างค้นหายังเปิดอยู่
* **ไม่มีการส่ง Webhook** การแจ้งเตือนไปยัง Webhook URL จะออกเฉพาะตอนที่ใบแจ้งหนี้เปลี่ยนเป็นชำระแล้วเท่านั้น
* **ไม่มีการติดตามการชำระบางส่วน** บริการไม่รับรู้การชำระไม่ครบ และไม่เก็บยอดคงค้างของใบแจ้งหนี้
* **การชำระเงินไม่ถูกนำมารวมกัน** หากลูกค้าชำระไม่ครบแล้วโอนครั้งที่สองเป็นส่วนต่างที่ขาด การชำระทั้งสองจะไม่ถูกบวกรวม ทั้งคู่ยังคงเป็นการชำระเงินแยกกันที่ไม่ได้จับคู่
* **การชำระเกินไม่ถูกคืนอัตโนมัติ** เงินเข้ากระเป๋าเงินของคุณโดยตรง การคืนส่วนต่างให้ลูกค้าต้องจัดการนอกบริการ

ในบริการไม่มีสถานะกลางอย่างชำระบางส่วนหรือชำระเกิน

## ร้านค้ารู้ถึงปัญหาได้อย่างไร

หากเปิดการแจ้งเตือนในการตั้งค่าโปรเจกต์ ร้านค้าจะได้รับอีเมลและข้อความจากบอท Telegram สำหรับการชำระเงินขาเข้าทุกครั้ง — ไม่ว่าจะจับคู่กับใบแจ้งหนี้ได้หรือไม่

จึงได้กฎวินิจฉัยง่าย ๆ: หากการแจ้งเตือนการชำระเงินขาเข้ามาถึงแต่ไม่มีการแจ้งเตือนใบแจ้งหนี้ชำระแล้วตามมา แปลว่าการชำระเงินไม่ถูกจับคู่เพราะยอดเงินไม่ตรงกัน และต้องจัดการด้วยตนเอง

กฎนี้ใช้ได้เฉพาะภายในหน้าต่างค้นหา บริการเฝ้าดูกระเป๋าเงินเฉพาะช่วงที่ยังมีใบแจ้งหนี้อย่างน้อยหนึ่งใบที่การค้นหายังทำงานอยู่ หากลูกค้าชำระตอนที่ไม่มีใบแจ้งหนี้แบบนั้นเลย การชำระเงินจะไม่เข้าสู่ระบบเลย — ไม่มีการแจ้งเตือน และไม่มีทางจับคู่ด้วยตนเอง

คุณยังค้นหาการชำระเงินที่ไม่ได้จับคู่ผ่านโปรแกรมได้ด้วย เมธอด `payments/list` คืนการชำระเงินจากกระเป๋าเงินทั้งหมดของคุณ และการชำระเงินที่ไม่ได้จับคู่กับใบแจ้งหนี้จะไม่มีบล็อก `invoice` ในการตอบกลับ เหล่านี้คือตัวเลือกสำหรับการจับคู่ด้วยตนเอง: เทียบจำนวนเงินและเวลากับใบแจ้งหนี้ที่คาดไว้ แล้วเรียก `invoices/bindPayment`

## การจับคู่การชำระเงินด้วยตนเอง

หากคุณแน่ใจว่าการชำระเงินใดตรงกับใบแจ้งหนี้ใด ให้จับคู่ด้วยตนเอง — ในแดชบอร์ดบนหน้าใบแจ้งหนี้หรือในรายการการชำระเงิน หรือผ่าน API ด้วยเมธอด `invoices/bindPayment`

### เงื่อนไขการจับคู่

การจับคู่ทำได้เมื่อเงื่อนไขทั้งหมดเป็นจริงพร้อมกันเท่านั้น:

1. **ใบแจ้งหนี้อยู่ในสถานะยังไม่ชำระ (Unpaid) หรือหมดอายุ (Expired)** ใบที่ยกเลิก (Canceled) และใบที่ชำระแล้วจับคู่ไม่ได้
2. **การชำระเงินยังไม่ถูกจับคู่กับใบแจ้งหนี้อื่น** การชำระเงินหนึ่งรายการผูกได้กับใบแจ้งหนี้เดียวเท่านั้น
3. **การชำระเงินมาถึงกระเป๋าเงินที่เกี่ยวข้องกับใบแจ้งหนี้นี้**
4. **การชำระเงินอยู่ภายในหน้าต่างการชำระที่ใช้ได้** — 24 ชั่วโมงก่อนและ 24 ชั่วโมงหลังการสร้างใบแจ้งหนี้

หน้าต่างนี้กว้างกว่าอายุของใบแจ้งหนี้ ซึ่งเปิดความเป็นไปได้สองทาง: จับคู่การชำระเงินกับใบแจ้งหนี้ที่หมดอายุแล้วก็ได้ และจับคู่ใบแจ้งหนี้กับการชำระเงินที่มาถึงก่อนใบแจ้งหนี้ถูกสร้างก็ได้ แบบหลังมีประโยชน์เมื่อลูกค้าส่งเงินมาเอง แล้วใบแจ้งหนี้ถูกออกหลังจากเงินมาถึง

### สิ่งที่เกิดขึ้นหลังการจับคู่

* **ใบแจ้งหนี้เปลี่ยนเป็นชำระแล้ว** — เช่นเดียวกับการจับคู่อัตโนมัติ
* **Webhook ถูกส่งเสมอ** การแจ้งเตือนออกทุกครั้งที่มีการเปลี่ยนเป็นชำระแล้ว ไม่ว่าการจับคู่เกิดขึ้นด้วยวิธีใด
* **จำนวนเงินของใบแจ้งหนี้ในสกุล USD ถูกคำนวณใหม่จากการชำระจริง** ฟิลด์ `amountFiatUSD` ถูกเขียนทับด้วยจำนวนที่ได้รับจริง ตามอัตราแลกเปลี่ยน ณ เวลาจับคู่ ส่วนจำนวนดั้งเดิมใน `amountFiat` ไม่เปลี่ยนแปลง
* **ค่าธรรมเนียมถูกคำนวณใหม่จากจำนวนจริง** โดยคิดตามอัตราค่าธรรมเนียมของโปรเจกต์จากจำนวนที่คุณได้รับ
