DuckyPayเอกสาร

เช็กลิสต์ก่อนเปิดใช้จริง

Test กับ live แยกกันอย่างสมบูรณ์ — ทั้ง key, webhook และเชน การเปิดใช้จริงคือการสลับห้าอย่างอย่างตั้งใจ ไม่ใช่การ redeploy

เช็กลิสต์#

  1. ยืนยันกระเป๋ารับเงิน

    กระเป๋ารับเงินบนโปรเจกต์ live ต้องยืนยันด้วยการเซ็นด้วยกระเป๋านั้น เมื่อยืนยันแล้ว จะ เปลี่ยนได้ผ่านขั้นตอนเซ็นเดียวกันเท่านั้น — การถูกขโมย login แดชบอร์ดอย่างเดียวเปลี่ยน ปลายทางเงินไม่ได้

  2. สร้าง live API key

    สร้าง key dp_live_… ในแดชบอร์ด live key แสดงเพียงครั้งเดียว — เก็บ key ลง secret manager ทันที (test key ยังดูซ้ำได้ ตามการออกแบบ)

  3. สลับ chain ID เป็น mainnet

    live key ปฏิเสธเชน testnet ดังนั้นนี่คือการบังคับ ไม่ใช่แค่คำแนะนำ บน Polygon mainnet โทเคนเริ่มต้นคือ USDT ดู เชนและโทเคน ว่าอะไรใช้ได้แล้ว

    โค้ดที่ต้องแก้มีจุดเดียว
    const charge = await duckypay.charges.create({
    -  chainId: 80002,        // Polygon Amoy testnet
    +  chainId: 137,          // Polygon mainnet
       fiat: { currency: 'USD', amount: '25' },
       paymentMode: 'both',
       reference: order.id,
    });
  4. ลงทะเบียน webhook endpoint แบบ live

    webhook endpoint แยกตามโหมด: invoice บน testnet ส่งไป test endpoint เท่านั้น invoice บน mainnet ส่งไป live เท่านั้น ลงทะเบียน URL โปรดักชันของคุณเป็น endpoint แบบ live และยืนยันลายเซ็นด้วย secret ของมันเอง — ดู Webhooks

  5. ลองจ่ายเงินจริงหนึ่งครั้งเล็ก ๆ

    ก่อนประกาศอะไร ลองรัน charge จริงครบวงจร: สร้าง → จ่าย → รับ webhook invoice.paid → ยืนยันว่าเงินเข้ากระเป๋ารับเงินของคุณบน block explorer ขั้นสุดท้ายนี้คือหัวใจของ non-custodial: คุณตรวจสอบทุกการชำระเงินได้ด้วยตัวเอง

Test กับ live แยกกันคนละโลก#

โหมด testโหมด live
คำนำหน้า API keydp_test_dp_live_
เชนที่อนุญาตtestnet เท่านั้น (Amoy)mainnet เท่านั้น
การส่ง webhooktest endpoint เท่านั้นlive endpoint เท่านั้น
การมองเห็น keyดูซ้ำได้ในแดชบอร์ดแสดงครั้งเดียวตอนสร้าง

หมายเหตุความปลอดภัย#

  • เก็บ API key ไว้ฝั่งเซิร์ฟเวอร์ อย่าใส่ key ในโค้ดฝั่งหน้าเว็บ — เบราว์เซอร์ต้องการแค่ checkoutUrl / invoiceId
  • ยืนยันลายเซ็น webhook เสมอ ทำตามคำสั่งซื้อจาก event invoice.paid ที่ยืนยันแล้ว ไม่ใช่จาก redirect หรือ callback ฝั่ง client
  • callback ฝั่ง client คือ UX ไม่ใช่ความจริง ใช้ onSuccess ใน @duckypay/react เป็นสัญญาณอัปเดต UI; webhook (หรือ event บนเชน) คือแหล่งความจริงสำหรับการส่งมอบสินค้า