Typebot.io与支付系统集成:Stripe和PayPal支付处理实现
你还在为聊天机器人接入支付功能而烦恼吗?支付流程复杂、接口文档难懂、测试环境难搭建?本文将带你一站式解决Typebot.io与Stripe、PayPal两大支付系统的集成难题,从配置到代码实现,再到测试部署,全程干货无套路。读完本文,你将能够:
- 掌握Typebot支付模块的核心架构
- 15分钟完成Stripe支付流程对接
- 实现PayPal智能按钮的无缝嵌入
- 解决支付回调处理的常见痛点
- 部署符合PCI合规的支付系统
支付系统集成架构概览
Typebot的支付集成基于微服务架构设计,核心模块位于packages/billing/目录下,通过统一的支付抽象层对接不同支付服务商。系统架构包含三大核心组件:
支付系统架构
- 支付抽象层:定义统一支付接口,位于packages/billing/src/core/PaymentProcessor.ts
- 服务商适配器:分别实现Stripe和PayPal的具体逻辑,对应stripe/和paypal/子目录
- 事件处理系统:处理支付状态变更,代码位于packages/events/src/paymentEvents.ts
官方文档API参考/支付模块提供了完整的接口说明,建议集成前先阅读支付流程概览。
Stripe集成实现(含代码示例)
环境准备
- 在Stripe控制台创建测试账号,获取API密钥(需要
sk_test_开头的秘钥) - 安装Typebot支付依赖包:
bun install @typebot.io/billing
配置实现
在Typebot管理后台的支付设置页面,填入Stripe配置信息:
Stripe配置界面
核心配置代码位于packages/billing/src/stripe/StripeConfig.ts:
export const stripeConfig = defineConfig({
apiKey: process.env.STRIPE_SECRET_KEY,
webhookSecret: process.env.STRIPE_WEBHOOK_SECRET,
paymentIntent: {
defaultCurrency: 'usd',
metadata: { integration_check: 'accept_a_payment' }
}
})
支付流程实现
创建支付意向的核心逻辑在StripeService.ts中实现:
async createPaymentIntent(amount: number, userId: string) {
const paymentIntent = await this.stripe.paymentIntents.create({
amount: amount * 100, // Stripe使用分作为单位
currency: this.config.defaultCurrency,
metadata: {
userId,
typebotId: this.typebotId
}
})
return {
clientSecret: paymentIntent.client_secret,
paymentId: paymentIntent.id
}
}
在聊天机器人中嵌入支付按钮,使用blocks/integrations/StripePaymentBlock.tsx组件:
<StripePaymentBlock
amount={199}
onSuccess={(paymentId) => {
// 支付成功后跳转至感谢页面
setVariable('paymentId', paymentId)
goToBlock('thank-you')
}}
/>
回调处理
Stripe webhook处理端点实现于apps/builder/src/pages/api/webhooks/stripe.ts:
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
const sig = req.headers['stripe-signature'] as string
const event = stripe.webhooks.constructEvent(
req.body,
sig,
process.env.STRIPE_WEBHOOK_SECRET!
)
if (event.type === 'payment_intent.succeeded') {
await handleSuccessfulPayment(event.data.object)
}
res.status(200).json({ received: true })
}
PayPal集成实现
智能按钮集成
PayPal集成采用智能按钮方案,核心代码位于packages/billing/src/paypal/PayPalButton.tsx:
PayPal智能按钮
<PayPalButton
amount={299}
currency="USD"
onApprove={async (data, actions) => {
const order = await actions.order.capture()
setVariable('transactionId', order.id)
triggerEvent('payment_completed')
}}
/>
订单创建逻辑
订单创建服务实现于PayPalService.ts:
async createOrder(amount: number, description: string) {
const response = await this.client.post('/v2/checkout/orders', {
intent: 'CAPTURE',
purchase_units: [{
amount: {
currency_code: 'USD',
value: amount.toFixed(2)
},
description
}]
})
return response.data.id
}
测试与部署指南
测试环境配置
使用Typebot提供的支付测试工具包:
bun run test:payment
测试数据生成器位于packages/playwright/src/testHelpers/payment.ts,支持生成:
- Stripe测试卡号:4242 4242 4242 4242
- PayPal测试账号:buyer@test.typebot.io
生产环境部署
部署指南详见部署文档/支付服务,关键步骤包括:
- 配置HTTPS(必须,支付服务商要求)
- 设置环境变量:
STRIPE_SECRET_KEY=sk_live_xxx
PAYPAL_CLIENT_ID=xxx
PAYPAL_CLIENT_SECRET=xxx
PAYMENT_WEBHOOK_SECRET=xxx
- 部署数据库迁移:
bun run prisma:migrate:deploy
常见问题解决方案
支付状态同步延迟
问题表现:支付成功后,聊天机器人状态未及时更新。
解决方案:实现状态轮询机制,代码参考packages/bot-engine/src/services/paymentStatusChecker.ts
跨域问题处理
在next.config.mjs中配置CORS:
/** @type {import('next').NextConfig} */
const nextConfig = {
async headers() {
return [
{
source: '/api/webhooks/:path*',
headers: [
{ key: 'Access-Control-Allow-Credentials', value: 'true' },
{ key: 'Access-Control-Allow-Origin', value: '*' },
],
},
]
},
}
退款处理流程
退款功能实现于packages/billing/src/core/RefundService.ts,支持全额和部分退款:
async processRefund(paymentId: string, amount?: number) {
const payment = await prisma.payment.findUnique({ where: { id: paymentId } })
if (payment?.provider === 'STRIPE') {
return this.stripeService.refund(payment.providerPaymentId, amount)
} else if (payment?.provider === 'PAYPAL') {
return this.paypalService.refund(payment.providerPaymentId, amount)
}
throw new Error('Payment not found')
}
总结与扩展
通过本文介绍的方法,你已经掌握了Typebot与两大主流支付系统的集成方案。核心要点包括:
- 利用支付抽象层实现多服务商统一接口
- 采用组件化方式嵌入支付UI
- 严格按照安全最佳实践处理支付数据
- 完善测试确保支付流程稳定
进阶学习建议:
- 探索订阅支付实现
- 集成支付分析功能
- 实现多币种支付
完整代码示例和更多集成方案可参考官方示例库,如有疑问可查阅支付集成FAQ或提交issue至GitHub仓库。
提示:生产环境建议启用支付监控,实时跟踪支付成功率和异常情况。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



