Zahlung akzeptieren
Zahlungen sicher akzeptieren mit Ihrer MCP-App.
Sie können Zahlungen außerhalb Ihrer App mit einer vorgefertigten, von Stripe gehosteten Checkout-Seite einziehen. Dieser Leitfaden zeigt, wie:
- Definieren von Model Context Protocol (MCP)-Tools, um Produkte anzuzeigen und Kundinnen und Kunden die Auswahl der zu kaufenden Posten zu ermöglichen
- Zahlungen mit einer vorgefertigten, von Stripe gehosteten Checkout-Seite einziehen
- Überwachen Sie nach erfolgreicher Zahlung die Webhooks
Stripe einrichten
Um Stripe einzurichten, fügen Sie Ihrem Backend die Stripe-API hinzu.
Produkte und Preise erstellen
In diesem Beispiel können Sie eine Gruppe von Produkten in der MCP-App anzeigen. Erfahren Sie, wie man Produkte und Preise im Dashboard oder mit der Stripe-CLI erstellt.
Registrieren Sie ein Checkout MCP-Tool
Registrieren Sie ein MCP-Tool, das eine Checkout-Session für einen Satz an Preisen erstellt. Sie rufen dieses Tool in einem späteren Schritt über die MCP-App auf.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { registerAppTool, registerAppResource, RESOURCE_MIME_TYPE, } from "@modelcontextprotocol/ext-apps/server"; import { readFileSync } from "node:fs"; import Stripe from "stripe"; import { z } from "zod"; const stripe = new Stripe() const server = new McpServer({ name: "my-mcp-server", version: "1.0.0" }); const resourceUri = "ui://list-products.html"; async function createCheckoutSession(priceIds) { const lineItems = priceIds.map((price) => ({ price, quantity: 1 })); const session = await stripe.checkout.sessions.create({ mode: "payment", line_items: lineItems, success_url: "https://example.com/checkout/success", }); return session; } // Register the tool that creates a checkout session server.registerTool( "buy-products", { title: "Buy products", description: "Create a checkout page link for purchasing the selected products", inputSchema: { priceIds: z.array(z.string()) }, }, async ({ priceIds }) => { const session = await createCheckoutSession(priceIds); return { content: [ { type: "text", text: `[Complete your purchase here](${session.url})`, }, ], structuredContent: { checkoutSessionId: session.id, checkoutSessionUrl: session.url, }, }; } );"sk_test_BQokikJOvBiI2HlWgH4olfQ2"
Registrieren Sie ein Tool für die Nutzeroberfläche und eine Ressource
Richten Sie die Nutzeroberfläche für Ihre MCP-App ein, indem Sie ein MCP-Tool und eine Ressource registrieren. Diese Nutzeroberfläche:
- Eine Produktliste wird angezeigt
- Ermöglicht der Kundin/dem Kunden die Auswahl der zu kaufenden Produkte
- Weiterleitung an Stripe Checkout, um die Zahlung abzuschließen
Registrieren Sie ein MCP-Tool zum Auflisten von Produkten
Erstellen Sie ein MCP-Tool zum Auflisten von Produkten. Dessen Rückruf gibt die Preis-IDs der Produkte zurück, die Sie in der Nutzeroberfläche anzeigen möchten.
registerAppTool( server, "list-products", { title: "List products", description: "List the products available for purchase", _meta: { ui: { resourceUri } }, }, async () => { const suggestedProducts = [ // The price IDs from the earlier step { priceId:, name: "Test product 1" }, { priceId:"{{PRICE_ID}}", name: "Test product 2" }, ]; return { structuredContent: { products: suggestedProducts }, content: [], }; } );"{{PRICE_ID}}"
Registrieren Sie eine UI-Ressource zum Auflisten von Produkten
Erstellen Sie eine MCP-Ressource für das Produktlisten-Widget. Sie definiert die Nutzeroberfläche, die die Produkte anzeigt.
// Register the resource that serves the bundled HTML registerAppResource( server, "list-products-widget", resourceUri, { mimeType: RESOURCE_MIME_TYPE }, async () => { const html = readFileSync("dist/ui/list-products.html", "utf8"); return { contents: [ { uri: resourceUri, mimeType: RESOURCE_MIME_TYPE, text: html, }, ], }; } );
In diesem Beispiel wird eine minimale Transaktionsgebühr verwendet. In einer Produktions-App können Sie ein Framework wie React verwenden. Weitere Beispiele finden Sie in der Dokumentation für MCP-Apps.
<div id="root"></div> <script type="module" src="/ui/mcp-app.js"></script>
import { App } from "@modelcontextprotocol/ext-apps"; const app = new App({ name: "ProductList", version: "1.0.0" }); // Establish communication with the host await app.connect(); /** * UI markup and event handlers */ const renderProduct = (product) => { return ` <label> <input type="checkbox" name="cart[]" value="${product.priceId}"> ${product.name} </label> `; }; const handleSubmit = async (event) => { // We'll fill this in next } const renderApp = (products) => { const root = document.querySelector("#root"); root.innerHTML = ` <h1>Select products to purchase</h1> <form id="product-form"> ${products.map(renderProduct).join("")} <button type="submit">Buy</button> </form> `; document .querySelector("#product-form") ?.addEventListener("submit", handleSubmit); }; /** * Render the list of products from the tool's structuredContent */ app.ontoolresult = (params) => { const { products } = params.structuredContent ?? {}; if (products) { renderApp(products); } };
Weiterleiten zu Checkout
Wenn die Kundin/der Kunde in der MCP-App auf Kaufen klickt:
- Rufen Sie das von Ihnen erstellte Tool auf, das ein Produkt kauft, um eine Checkout-Sitzung-URL zu erstellen.
- Öffnen Sie die URL der Checkout-Session.
Aktualisieren Sie die HandleSubmit-Funktion:
const handleSubmit = async (event) => { event.preventDefault(); const formData = new FormData(event.target); const priceIds = Array.from(formData.values()); // Call the buy-products tool to create a Checkout Session const { structuredContent } = await app.callServerTool({ name: "buy-products", arguments: { priceIds }, }); if (typeof structuredContent?.checkoutSessionUrl === "string") { await app.openLink({ url: structuredContent.checkoutSessionUrl }); } };
Bearbeiten Sie erfolgreiche Aufträge
Sie können erfolgreiche Bestellungen verarbeiten, indem Sie checkout. (und checkout. bei verzögerten Methoden) überwachen und eine gleichwertige Ausführung aufrufen, die die Checkout-Sitzung abruft (line_ erweitern), den payment_status verifiziert und die Posten ausführt.
Verwenden Sie eine success_-Landing Page, um die Ausführung unmittelbar nach der Weiterleitung auszulösen. Verlassen Sie sich jedoch auf Webhooks, um sicherzustellen, dass jede Zahlung ausgeführt wird.
Anschließend können Sie lokal mit der Stripe-CLI testen und Ihren Webhook-Endpoint bereitstellen.
Erfahren Sie mehr darüber, wie Sie mit der Checkout Sessions API erhaltene Zahlungen abwickeln.