API ที่เข้ากันได้กับ Coinbase Commerce

เปิดใน ChatGPTเปิดใน Claude

endpoint ของ charge เฮดเดอร์ X-CC-Api-Key อ็อบเจกต์ charge และ webhook ที่เซ็นด้วย X-CC-Webhook-Signature เป็นไปตามเอกสารของ Coinbase Commerce SDK ทางการจึงใช้ได้หลังเปลี่ยนเพียงบรรทัดเดียว Coinbase Commerce หยุดให้บริการร้านค้านอกสหรัฐอเมริกาและสิงคโปร์ตั้งแต่ 2026-03-31 ย้ายมาจากที่อื่น? ดูภาพรวมการย้าย

ภายในเป็นใบแจ้งหนี้ blockwallets ปกติ: ที่อยู่รับเงินเป็นของคุณ หน้าชำระเงินคือหน้าชำระเงินที่เราโฮสต์ และการชำระจะนับก็ต่อเมื่อยืนยันบนเชนแล้วและตรวจไขว้กับโหนดที่สอง ต่อไปนี้: สามขั้นตอน จากนั้นสิ่งที่แต่ละ API รองรับและต่างจากต้นฉบับอย่างไร พารามิเตอร์ที่เราไม่ได้ทำจะตอบข้อผิดพลาด ไม่ถูกเมินไปเงียบ ๆ

สามขั้นตอน

  1. สมัครบัญชีร้านค้า (ขอใช้งานที่หน้าแรก) และเพิ่มโดเมนของคุณที่ “โดเมนเว็บไซต์” ใน “นักพัฒนา › การเชื่อมต่อและคีย์” ของแดชบอร์ด URL callback (ipn_callback_url) และ URL เปลี่ยนเส้นทาง (success_url / cancel_url / redirect_url) ต้องอยู่ในโดเมนเหล่านั้นหรือโดเมนของ URL callback ของคุณ คีย์ที่รั่วไหลจึงชี้ Webhook ไปที่อื่นไม่ได้
  2. สร้างข้อมูลรับรองที่เข้ากันได้ในแดชบอร์ดร้านค้าที่ “นักพัฒนา › การเชื่อมต่อและคีย์” ชุดใช้งานจริงและชุดทดสอบอย่างละชุด: NOWPayments ได้ API key + IPN secret ส่ง Coinbase Commerce ได้ API key + webhook shared secret แสดงเพียงครั้งเดียว เราเก็บเฉพาะค่าแฮช / ข้อความเข้ารหัส
  3. ชี้โค้ดของคุณไปที่ base URL ด้านล่างและใช้คีย์ใหม่ รันบนเทสต์เน็ตด้วยข้อมูลรับรองทดสอบก่อน แล้วค่อยสลับเป็นใช้งานจริง
ก่อนหลังเฮดเดอร์การยืนยันตัวตนลายเซ็น Webhook
https://api.commerce.coinbase.comhttps://blockwallets.io/coinbase/X-CC-Api-KeyX-CC-Webhook-Signature (HMAC-SHA256)

Coinbase Commerce

SDK ทางการทุกตัวรับ base URL: เปลี่ยนบรรทัดเดียว (ระวัง / ท้ายสุด):

SDK
// Node(coinbase-commerce-node)
const { Client } = require("coinbase-commerce-node");
- Client.init(process.env.COINBASE_COMMERCE_API_KEY);
+ Client.init(process.env.COINBASE_COMMERCE_API_KEY, "https://blockwallets.io/coinbase/");

# Python(coinbase-commerce)
- client = Client(api_key=API_KEY)
+ client = Client(api_key=API_KEY, base_api_uri="https://blockwallets.io/coinbase/")

// PHP(coinbase/coinbase-commerce)
- ApiClient::init($apiKey);
+ ApiClient::init($apiKey, 'https://blockwallets.io/coinbase/');
curl
curl -X POST https://blockwallets.io/coinbase/charges \
  -H "X-CC-Api-Key: $COINBASE_COMMERCE_API_KEY" -H "X-CC-Version: 2018-03-22" \
  -H "content-type: application/json" \
  -d '{"name":"Order #12345","description":"Pro plan","pricing_type":"fixed_price",
       "local_price":{"amount":"100.00","currency":"USD"},
       "redirect_url":"https://shop.example/success","cancel_url":"https://shop.example/cancel",
       "metadata":{"order_id":"12345"}}'
# → 201 {"data": {"id": "…", "code": "7C7V5ECK", "hosted_url": "https://blockwallets.io/pay/inv_…", "timeline": [{"status": "NEW", …}], …}}

Endpoint ที่รองรับ

Endpointหมายเหตุ
POST /chargesสร้าง charge hosted_url คือหน้าชำระเงินที่เราโฮสต์ มีอายุ 1 ชั่วโมง
GET /charges/:code_or_idค้นด้วยรหัส 8 ตัวอักษรหรือ id
GET /chargesรายการ: limit (≤100) / starting_after / ending_before / order พร้อมอ็อบเจกต์ pagination เดียวกัน
POST /charges/:code_or_id/cancelยกเลิก charge ที่ยังไม่พบการชำระ

ไม่มี: /charges/:code/resolve (400 ให้จัดการ charge ที่จ่ายขาดในแดชบอร์ด), /checkouts, /events, /invoices (404)

Webhook

Webhook ของ Coinbase ระดับบัญชี ของเราก็เช่นกัน: ส่งไปที่ URL callback ที่ตั้งในแดชบอร์ดของคุณ (charge ที่สร้างด้วยข้อมูลรับรองทดสอบจะส่งไป URL callback ทดสอบ) เนื้อหาเป็นรูปแบบของ Coinbase {id, scheduled_for, attempt_number, event: {id, type, api_version, created_at, data}} โดย charge เต็มอยู่ใน data และ X-CC-Webhook-Signature = HMAC-SHA256(shared secret, เนื้อหาดิบ) ดังนั้น Webhook.verifyEventBody ของ SDK ใช้ได้ทันที เมื่อลองใหม่ event.id เท่าเดิมและ attempt_number เพิ่มขึ้น: กรองซ้ำด้วย event.id

Node.js
import crypto from "node:crypto";

// Same as the SDK's Webhook.verifySigHeader: HMAC-SHA256(shared secret, raw body)
function verifyWebhook(rawBody, sig, sharedSecret) {
  const hmac = crypto.createHmac("sha256", sharedSecret).update(rawBody, "utf8").digest("hex");
  return crypto.timingSafeEqual(Buffer.from(hmac), Buffer.from(sig || ""));
}
// verifyWebhook(rawBody, req.headers["x-cc-webhook-signature"], process.env.COINBASE_WEBHOOK_SECRET)
// or with the official SDK:Webhook.verifyEventBody(rawBody, signature, sharedSecret)
เหตุการณ์เมื่อรายการล่าสุดใน timeline
charge:confirmedชำระแล้ว (ยืนยันบนเชนและตรวจไขว้แล้ว รวมจ่ายเกิน)COMPLETED
charge:failedหมดอายุโดยไม่มีการชำระ / คุณยกเลิก / หมดอายุแบบจ่ายขาดEXPIRED / CANCELED / UNRESOLVED (context UNDERPAID)

เมื่อค้นสถานะ คุณจะเห็น NEW (รอการชำระ) และ PENDING (พบการชำระบนเชน กำลังยืนยัน) ด้วย ให้ดำเนินการเมื่อได้รับ charge:confirmed: เราไม่ส่ง charge:created, charge:pending, charge:delayed หรือ charge:resolved

ข้อแตกต่างจาก Coinbase Commerce

โหมดทดสอบ

charge และการชำระที่สร้างด้วยข้อมูลรับรองทดสอบรันบนเทสต์เน็ตของแต่ละเชน และ Webhook ของมันเซ็นด้วย IPN secret / shared secret ของชุดทดสอบ แยกจากใช้งานจริงโดยสิ้นเชิง: คีย์ทดสอบมองไม่เห็นการชำระจริง

ส่วนที่เหลือทั้งหมด (หน้าชำระเงิน การยืนยัน เครือข่ายและยอดขั้นต่ำ การคืนเงิน) ทำงานเหมือนในเอกสารหลัก