ข้ามไปยังเนื้อหาหลัก
LearnGuidesย้ายจาก Stripe
คู่มือ

ย้ายจาก Stripe ไปยัง Blockchain0x สำหรับการเข้าถึง API ที่ขับเคลื่อนโดยเอเจนต์

20 minutes
คำตอบสั้น

อย่าแทนที่ Stripe; ให้ทำงานควบคู่กัน ประตูเดียวจะอยู่หน้าจุดสิ้นสุดที่ได้รับการป้องกันแต่ละจุดด้วยวิธีการรับรองความถูกต้องสองวิธี: การสมัครสมาชิก Stripe ที่ใช้งานอยู่ (สำหรับมนุษย์) มิฉะนั้นอะแดปเตอร์ x402 ด้านรับ (สำหรับเอเจนต์) ซึ่งออกคำท้า 402 และตรวจสอบส่วนหัว X-Payment ในการลองใหม่ ตรรกะของตัวจัดการไม่เปลี่ยนแปลง.

ข้อกำหนดเบื้องต้น

ก่อนที่คุณจะเริ่ม.

  • การรวม Stripe ที่ใช้งานได้พร้อมผลิตภัณฑ์/ราคาอย่างน้อยหนึ่งรายการที่ใช้งานอยู่ (การสมัครสมาชิกหรือแบบครั้งเดียว)
  • โปรไฟล์เอเจนต์ Blockchain0x และคีย์ API (ดูที่ add-payments-to-agent)
  • ชั้นการตรวจสอบ/กลางในกรอบงานเว็บของคุณที่คุณเรียก Stripe เพื่อควบคุมการเข้าถึง
  • กลไกฟีเจอร์แฟล็ก (env var, LaunchDarkly, boolean ง่าย ๆ - อะไรก็ตามที่ช่วยให้คุณเปลี่ยนพฤติกรรมโดยไม่ต้องปรับใช้ใหม่)
  • ความเข้าใจเกี่ยวกับ x402 pattern - ตัวตกแต่งด้านล่างนี้จะทำการนำไปใช้
ขั้นตอนที่ 1 จาก 3

เขียนเกตการตรวจสอบสองขั้นตอน

ประตูคือชิ้นส่วนเดียวของกาว มันตรวจสอบการสมัครสมาชิก Stripe ที่ใช้งานอยู่ก่อน (เส้นทางของมนุษย์); หากไม่มี มันจะส่งคำขอไปยังตัวปรับ x402 ที่ด้านรับ (เส้นทางของตัวแทน) ซึ่งออกความท้าทาย 402 และตรวจสอบหัวข้อ X-Payment เมื่อเอเจนต์ลองใหม่ ตัวอย่าง Node ใช้ createX402Middleware; บริการ Python พูดในสายเดียวกันด้วยมือ.

TypeScript (Express)
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);
}
Python (Flask)
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
ขั้นตอนที่ 2 จาก 3

ใช้กับจุดสิ้นสุด.

ตัวจัดการเองไม่เปลี่ยนแปลง - ตัวตกแต่งจัดการตรรกะการตรวจสอบสิทธิ์/การชำระเงิน จากนั้นส่งต่อไปยังการดำเนินการที่มีอยู่เฉพาะเมื่อการชำระเงินได้รับการชำระเงิน นี่คือสิ่งที่ทำให้การย้ายมีความเสี่ยงต่ำ: เส้นทางของมนุษย์ไม่ได้รับผลกระทบ คุณเพียงแค่เพิ่มเส้นทางทางเลือก.

TypeScript
// 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);
  },
);
Python
@app.get("/api/premium-feature")
@stripe_or_x402("/api/premium-feature")
def premium_feature():
    return run_premium_feature()
ขั้นตอนที่ 3 จาก 3

เปิดใช้งานแบบ 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 การควบคุมการใช้จ่ายปกป้องเอเจนต์ที่คุณดำเนินการ การตรวจสอบความปลอดภัยก่อนเปิดตัวใช้ได้เหมือนกับการรวมรางเดียว

เอกสารอ้างอิงเต็มรูปแบบที่ docs.blockchain0x.com. พื้นผิวผลิตภัณฑ์ที่เกี่ยวข้อง: Payment API. การจัดเฟรมเปรียบเทียบ: เปรียบเทียบ.

ตรวจสอบล่าสุด: 2026-05-15. เผยแพร่ภายใต้ CC BY 4.0.

รักษา Stripe. เพิ่มเอเจนต์.

หนึ่งตัวตกแต่ง สองเส้นทางการชำระเงิน ไม่มีการเลิกใช้สำหรับลูกค้าเดิม เริ่มต้นฟรี