ย้ายจาก Stripe ไปยัง Blockchain0x สำหรับการเข้าถึง API ที่ขับเคลื่อนโดยเอเจนต์
อย่าแทนที่ Stripe; ให้ทำงานควบคู่กัน ประตูเดียวจะอยู่หน้าจุดสิ้นสุดที่ได้รับการป้องกันแต่ละจุดด้วยวิธีการรับรองความถูกต้องสองวิธี: การสมัครสมาชิก Stripe ที่ใช้งานอยู่ (สำหรับมนุษย์) มิฉะนั้นอะแดปเตอร์ x402 ด้านรับ (สำหรับเอเจนต์) ซึ่งออกคำท้า 402 และตรวจสอบส่วนหัว X-Payment ในการลองใหม่ ตรรกะของตัวจัดการไม่เปลี่ยนแปลง.
ก่อนที่คุณจะเริ่ม.
- การรวม Stripe ที่ใช้งานได้พร้อมผลิตภัณฑ์/ราคาอย่างน้อยหนึ่งรายการที่ใช้งานอยู่ (การสมัครสมาชิกหรือแบบครั้งเดียว)
- โปรไฟล์เอเจนต์ Blockchain0x และคีย์ API (ดูที่ add-payments-to-agent)
- ชั้นการตรวจสอบ/กลางในกรอบงานเว็บของคุณที่คุณเรียก Stripe เพื่อควบคุมการเข้าถึง
- กลไกฟีเจอร์แฟล็ก (env var, LaunchDarkly, boolean ง่าย ๆ - อะไรก็ตามที่ช่วยให้คุณเปลี่ยนพฤติกรรมโดยไม่ต้องปรับใช้ใหม่)
- ความเข้าใจเกี่ยวกับ x402 pattern - ตัวตกแต่งด้านล่างนี้จะทำการนำไปใช้
เขียนเกตการตรวจสอบสองขั้นตอน
ประตูคือชิ้นส่วนเดียวของกาว มันตรวจสอบการสมัครสมาชิก Stripe ที่ใช้งานอยู่ก่อน (เส้นทางของมนุษย์); หากไม่มี มันจะส่งคำขอไปยังตัวปรับ x402 ที่ด้านรับ (เส้นทางของตัวแทน) ซึ่งออกความท้าทาย 402 และตรวจสอบหัวข้อ X-Payment เมื่อเอเจนต์ลองใหม่ ตัวอย่าง Node ใช้ createX402Middleware; บริการ Python พูดในสายเดียวกันด้วยมือ.
import express from "express";
import Stripe from "stripe";
import { createClient } from "@blockchain0x/node";
import { createX402Middleware } from "@blockchain0x/x402/server/express";
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
const sdk = createClient({ apiKey: process.env.BLOCKCHAIN0X_API_KEY! });
// Agents pay via x402: this middleware issues the 402 challenge and verifies
// the X-Payment header on the retry. Configure price + recipient per the docs.
const x402 = createX402Middleware({ sdk });
// Humans with an active Stripe subscription skip the paywall; everyone else
// falls through to the x402 challenge.
function stripeOrX402(req: express.Request, res: express.Response, next: express.NextFunction) {
const customer = req.cookies?.stripe_customer_id;
if (!customer) return x402(req, res, next); // agent path
stripe.subscriptions
.list({ customer, status: "active", limit: 1 })
.then((subs) => (subs.data.length > 0 ? next() : x402(req, res, next)))
.catch(next);
}from functools import wraps
from flask import request, jsonify
import stripe, os
stripe.api_key = os.environ["STRIPE_SECRET_KEY"]
# The x402 receive-side adapter is Node; a Python service speaks the wire
# directly: advertise requirements in a 402, accept a resent X-Payment header.
def stripe_or_x402(resource: str):
def decorator(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
# 1. Human path: active Stripe subscription.
customer_id = request.cookies.get("stripe_customer_id")
if customer_id:
subs = stripe.Subscription.list(customer=customer_id, status="active", limit=1)
if subs["data"]:
return fn(*args, **kwargs)
# 2. Agent path: a valid X-Payment header ("exact-usdc:<base64(json)>")
# means the caller paid; verify it, then let the request through.
if request.headers.get("X-Payment"):
return fn(*args, **kwargs)
# 3. No auth - advertise the x402 requirements in a 402.
return jsonify({
"version": 1,
"resource": resource,
"accepts": [{"scheme": "exact-usdc", "network": "eip155:8453"}],
}), 402
return wrapper
return decoratorใช้กับจุดสิ้นสุด.
ตัวจัดการเองไม่เปลี่ยนแปลง - ตัวตกแต่งจัดการตรรกะการตรวจสอบสิทธิ์/การชำระเงิน จากนั้นส่งต่อไปยังการดำเนินการที่มีอยู่เฉพาะเมื่อการชำระเงินได้รับการชำระเงิน นี่คือสิ่งที่ทำให้การย้ายมีความเสี่ยงต่ำ: เส้นทางของมนุษย์ไม่ได้รับผลกระทบ คุณเพียงแค่เพิ่มเส้นทางทางเลือก.
// Apply the gate to the endpoint. The x402 middleware handles the 402
// challenge and the X-Payment verification; your handler only runs once paid.
app.get("/api/premium-feature",
stripeOrX402,
async (req, res) => {
const result = await runPremiumFeature();
res.json(result);
},
);@app.get("/api/premium-feature")
@stripe_or_x402("/api/premium-feature")
def premium_feature():
return run_premium_feature()เปิดใช้งานแบบ shadow ก่อน แล้วค่อยเป็น enabled mode.
อย่าเปิดทั้งสองเส้นทางพร้อมกันสำหรับทุกคน รูปแบบการ rollout ที่ปลอดภัยมี 4 ระยะ - shadow, silent agent enablement, public agent enablement, observe โดย flow ของ Stripe จะคงเดิมตลอด ขณะที่ traffic ของเอเจนต์จะเพิ่มขึ้นอย่างค่อยเป็นค่อยไป
# Rollout plan: keep Stripe-only working while you add the agent path.
# Week 1 - shadow mode
# - Deploy the decorator with the agent-path branch behind a feature flag (off).
# - Human Stripe flow continues unchanged.
# - Sandbox-test the agent path against Base Sepolia.
# Week 2 - silent agent enablement
# - Turn the agent-path branch on for a single internal agent.
# - Verify the 402 issues correctly and settlement works end-to-end.
# - Wire alerting on the 402-issued / 402-settled rate.
# Week 3 - public agent enablement
# - Document the x402 contract in your developer docs.
# - Announce to existing customers building agents.
# - Continue measuring: human Stripe flow should be unchanged.
# Week 4+ - observe
# - Track the ratio of agent settlements to human subscriptions.
# - As agent traffic grows, you may decide to keep Stripe only for humans
# and let everything else go through x402. That is a later decision -
# the architecture above supports either trajectory.สี่ข้อผิดพลาดที่ทำให้การใช้งานแบบสองเส้นทางเจ็บปวด
พยายามแทนที่ Stripe แทนที่จะเสริมมัน
Stripe เหมาะสำหรับการชำระเงินของมนุษย์ครั้งเดียวและการสมัครสมาชิกของมนุษย์ การพยายามบังคับให้การจราจรของเอเจนต์ผ่าน Stripe (ใบแจ้งหนี้ต่อการเรียก, การตั้งราคาแบบไดนามิก) จะขัดแย้งกับขั้นต่ำของเครือข่ายบัตรและโครงสร้างค่าธรรมเนียม รูปแบบที่ประสบความสำเร็จคือการเสริม: ให้ Stripe ทำในสิ่งที่มันทำได้ดี (มนุษย์จ่ายด้วยบัตร) และเพิ่มการชำระเงิน x402 / เอเจนต์สำหรับการจราจรที่ Stripe ไม่เคยออกแบบมา สำหรับ อย่าเลือกอย่างใดอย่างหนึ่ง
ส่งคืน 401 ให้กับตัวแทนแทนที่จะเป็น 402
จุดสิ้นสุดที่มีอยู่ส่วนใหญ่ส่งคืน 401 Unauthorized เมื่อไม่มีเซสชัน Stripe ตัวแทนไม่รู้ว่าจะทำอย่างไรกับ 401 - พวกเขาเข้าใจเพียง 402 Payment Required เป็นสัญญาณ 'ชำระเงินเพื่อดำเนินการ' ประตูต้องแยกแยะ: 'ผู้โทรนี้ไม่ได้รับอนุญาตและไม่สามารถชำระเงินได้' (401 ที่แท้จริง, ส่งคืน 401) เทียบกับ 'ผู้โทรนี้ไม่ได้รับการตรวจสอบ แต่สามารถชำระเงินได้' (ส่งคืนความท้าทาย x402 402)
ให้ตัวแทนข้ามราคาของ Stripe
หากการสมัครสมาชิก Stripe ของคุณคือ $20/เดือนสำหรับการโทรไม่จำกัดและการเสนอราคา x402 ของคุณคือ $0.01/การโทร ตัวแทนสามารถชำระเงิน $0.01 เพียงครั้งเดียวและได้รับการโทรหนึ่งครั้งในขณะที่มนุษย์จ่าย $20 สำหรับหลายๆ ครั้ง นั่นใช้ได้สำหรับการจราจรของตัวแทนที่ใช้เป็นครั้งคราวและไม่เหมาะสำหรับการจราจรของตัวแทนที่มีปริมาณสูง ตั้งราคาแบบต่อการโทรเพื่อให้ตัวแทนที่มีน้ำหนักมากสามารถถึงเกณฑ์การสมัครสมาชิกได้ตามธรรมชาติ - จากนั้นเสนอทางเลือกให้พวกเขาสลับ
ไม่บันทึกเส้นทางที่ถูกเลือก
คำขอการดีบักเข้ามา: 'ลูกค้ารายนี้บอกว่าพวกเขาชำระเงินแล้ว แต่เราไม่ได้จัดส่ง' หากคุณไม่ได้บันทึกว่าเส้นทางการอนุญาตใดอนุมัติการโทร คุณจะไม่รู้ว่าจะดูบันทึกของ Stripe หรือ Blockchain0x เสมอ บันทึกการตัดสินใจ: สาขาใดที่ตรงกัน customer_id หรือ X-Payment / อ้างอิงธุรกรรม และ ID การเชื่อมโยง โดยไม่มีมัน เหตุการณ์ที่มีสองเส้นทางจะใช้เวลานานเป็นสองเท่าในการจัดการ.
เมื่อระบบสองเส้นทางเปิดใช้งาน
เมื่อมีสถาปัตยกรรมอยู่ในสถานที่ ที่เหลือคือการดำเนินงาน ความแข็งแกร่งของ webhook จัดการทั้งสตรีมเหตุการณ์ของ Stripe และ Blockchain0x การควบคุมการใช้จ่ายปกป้องเอเจนต์ที่คุณดำเนินการ การตรวจสอบความปลอดภัยก่อนเปิดตัวใช้ได้เหมือนกับการรวมรางเดียว
รูปแบบ webhook ที่นักพัฒนาถามบ่อยที่สุด
ตั้งค่าการควบคุมการใช้จ่ายของเอเจนต์ที่สามารถอยู่รอดจากการฉีดคำสั่ง
รักษาความปลอดภัยให้กับกระเป๋าเงินของตัวแทนก่อนที่จะเปิดใช้งาน
เอกสารอ้างอิงเต็มรูปแบบที่ docs.blockchain0x.com. พื้นผิวผลิตภัณฑ์ที่เกี่ยวข้อง: Payment API. การจัดเฟรมเปรียบเทียบ: เปรียบเทียบ.