# ตัวตรวจลายเซ็น

> วางเนื้อหาคำขอหรือเนื้อหา Webhook หน้านี้จะคำนวณลายเซ็นทีละขั้นแบบเดียวกับ Cryptomus เทียบแต่ละขั้นกับของคุณ และทำเครื่องหมายจุดแรกที่ต่างกัน ทุกอย่างทำงานในเบราว์เซอร์ของคุณ หน้านี้ส่งคำขอเครือข่ายไม่ได้เลย API key จึงไม่ออกจากคอมพิวเตอร์ของคุณ
>
> HTML: https://blockwallets.io/docs/sign?lang=th · English: https://blockwallets.io/docs/sign.md?lang=en

## ลายเซ็นของคำขอ (คุณเรียก API ของเรา)

1. ข้อความที่ใช้เซ็นคือเนื้อหาคำขอที่คุณส่งจริงทุกไบต์ (รวมช่องว่าง บรรทัดใหม่ และอักขระ escape)
2. base64 ของไบต์ UTF-8 ของข้อความนั้น
3. sign = md5(ขั้นที่ 2 + API key) ส่งในเฮดเดอร์ `sign` ส่วนเฮดเดอร์ `merchant` ใส่ UUID ของ merchant

หากลายเซ็นไม่ถูกต้อง API ตอบ 401 และ `debug.body_base64` ในการตอบกลับคือขั้นที่ 2 ที่คำนวณจากเนื้อหาที่เราได้รับ ใช้เทียบกับของคุณได้ทันที

## ลายเซ็นของ Webhook (เราเรียก URL Webhook ของคุณ)

1. ตัดฟิลด์ `sign` ออก แล้วเข้ารหัสส่วนที่เหลือใหม่แบบ PHP `json_encode`: กะทัดรัด, `/` ถูก escape เป็น `\/`, อักขระที่ไม่ใช่ ASCII คงไว้
2. base64 ของไบต์ UTF-8 จากขั้นที่ 1
3. md5(ขั้นที่ 2 + API key) ต้องเท่ากับ `sign` ใช้ API key ของโหมดเดียวกัน (Live / Test) กับ merchant

## สาเหตุที่พบบ่อย

- ใช้ API key ของอีกโหมด หรือคีย์ที่ถูกเปลี่ยนไปแล้ว
- เฟรมเวิร์ก serialize เนื้อหาใหม่ (จัดรูปแบบ ลำดับคีย์ รูปแบบตัวเลข) ให้ตรวจกับเนื้อหาดิบที่ได้รับ
- ไม่ได้ escape `/` เป็น `\/` ตอนเข้ารหัส Webhook ใหม่

ตัวตรวจทำงานในเบราว์เซอร์ของคุณทั้งหมด และหน้านี้ส่งคำขอเครือข่ายไม่ได้ API key จึงไม่ออกจากคอมพิวเตอร์ของคุณ ตัวอย่างโค้ดตรวจสอบ: https://blockwallets.io/docs/cryptomus?lang=th#verify
