跳到主要内容
项目档案应用项目

Shopa - 多账号 Stripe 支付网关系统 | 基于 Next.js 的 B2C 商城收款解决方案

Shopa 是一个多租户 B2C 商城支付网关,通过域名路由将支付请求分发至不同 Stripe 账号,实现风险分散与业务隔离。本文详细介绍其安装步骤、使用方式、技术架构及适用场景。

2TypeScriptStar 于 2026年4月1日2026年9月5日 更新

AI 总结

Shopa 是一个基于 Next.js 的多租户 B2C 商城支付网关,通过域名路由将支付请求智能分发至不同 Stripe 账号,实现多账号分流、风险分散与业务隔离,为商户提供统一、安全、可靠的收款入口。

中文项目介绍

Shopa 是一个专为 Stripe 收款设计的支付网关系统,核心功能是通过域名路由将支付请求分发到预先配置的多个 Stripe 账号,从而解决单一账号收款带来的风控风险与业务中断问题。 系统主要解决以下问题:避免单账号收款额过大触发风控、实现不同业务线的账目隔离、在账号异常时快速切换、并为代理场景提供多客户收单管理。商户只需对接一个统一 API,后台自动完成账号路由与支付会话创建。 适用场景包括:Stripe 账号轮转与流量分流、多业务线独立核算、容灾备份与快速切换、以及为多个客户提供代理收单服务。 技术架构上,Shopa 采用 Next.js App Router 构建全栈应用,使用 Prisma ORM 抽象数据库层并支持 SQLite 与 PostgreSQL 切换,通过 NextAuth 实现认证与角色权限控制(超级管理员与分销商),并在安全方面实施请求签名、敏感数据加密、审计日志及严格的内容安全策略(CSP)头部。

详细信息与使用说明

1. 项目定位与用途

Shopa 是一个多租户 B2C 商城 SaaS 支付网关系统,定位为商户网站与 Stripe 支付之间的智能路由层。其核心用途是通过域名绑定关系,将不同商户或业务的支付请求自动分发到指定的 Stripe 账号,从而提供统一的支付入口与聚合管理能力。商户无需直接对接多个 Stripe 账号,只需集成 Shopa 一个 API,系统后台负责账号选择、支付链接生成与回调处理。

2. 解决的问题

Shopa 主要解决单一 Stripe 账号收款的四类问题:一是风险集中,单账号收款额过大易触发风控导致业务中断;二是缺乏隔离,多种业务混在同一账号不利于财务对账;三是切换成本高,账号异常时需修改商户代码;四是代理管理难,为多个客户收单时难以独立管理。通过多账号分流、业务隔离、快速切换与聚合管理,Shopa 有效分散风险并提升运营灵活性。

3. 适用场景

根据 README 与文档,Shopa 适用于以下场景:1) Stripe 账号轮转/分流,将订单自动分配到不同账号以降低单账号风控概率;2) 多业务线隔离,不同类型业务走不同 Stripe 账号,账目清晰;3) 容灾备份,主账号异常时快速切到备用账号,商户代码无需改动;4) 代理收单,为多个客户提供支付通道,每个客户分配独立域名和 Stripe 账号。

4. 安装方式

从仓库提供的脚本与文档可见,安装步骤如下:首先复制 .env.example 为 .env 并填写数据库连接、Stripe 密钥、NextAuth 密钥等必要配置;然后执行 npm install 安装项目依赖;接着运行 npx prisma migrate dev 或 npx prisma db push 初始化数据库结构;最后执行 npm run dev 启动开发服务器,默认监听 3001 端口。此外,可通过 npm run seed:dev 或 npm run seed:products 加载示例数据。

5. 使用方式

使用 Shopa 的完整流程为:管理员在管理后台配置域名与对应 Stripe 账号的绑定关系,并可设置产品、分销商及前端模板;商户按 API 规范推送订单(含商户编码与签名)至 Shopa 网关;网关根据请求域名匹配 Stripe 账号并返回支付链接;用户访问链接完成支付后,Stripe 通过 Webhook 事件通知 Shopa;Shop a 处理事件后,将订单状态与签名回跳至商户指定地址。管理员还可通过 API 手动重发 Webhook 或回调以确保交付。

6. 补充说明与实现特点

Shopa 的实现特点包括:基于 Next.js App Router 的全栈架构,API 路由处理后端逻辑;使用 Prisma 抽象数据库,支持 SQLite 与 PostgreSQL 双引擎切换;多租户通过域名路由实现,每个域名可绑定独立 Stripe 账号与前端模板;角色权限控制区分超级管理员与分销商,分销商通过密钥与域名受限访问;安全设计涵盖敏感数据加密、请求签名验证、审计日志记录以及严格的 CSP 安全头配置;支付流程集成涵盖订单创建、Stripe Checkout Session 生成、Webhook 事件处理与回调商户。

思维导图

Shopa 支付网关
核心功能
多账号分流
域名路由
业务隔离
容灾切换
代理收单
技术架构
Next.js App Router
Prisma ORM
NextAuth 认证
Stripe SDK
Zod 验证
管理模块
域名管理
订单管理
产品管理
分销商管理
审计日志
支付流程
订单推送
路由分配
Stripe 支付
Webhook 回调
结果回跳
部署运维
环境配置
数据库迁移
种子数据
端口监听
安全头配置

常见问题

Shopa 如何实现多个 Stripe 账号的分配?

Shopa 通过域名路由机制实现账号分配:在管理后台为每个域名绑定一个指定的 Stripe 账号,当商户使用该域名推送订单时,网关自动匹配并使用对应的 Stripe 账号创建支付会话,从而实现请求的分发与轮转。

安装 Shopa 需要哪些前置条件?

需要 Node.js 环境、npm 包管理器,并准备数据库(SQLite 或 PostgreSQL)。根据 .env.example 配置环境变量,包括数据库连接字符串、Stripe 密钥、NextAuth 密钥等。随后运行 npm install 和数据库迁移命令即可完成安装。

支付完成后如何通知商户?

支付完成后,Stripe 向 Shopa 发送 Webhook 事件,Shop a 处理事件并更新订单状态,随后将订单号、状态及签名通过回调 URL 回跳至商户网站。管理员也可在后台手动重发 Webhook 或回调以确保交付。

Shopa 是否支持多租户?

是的,Shopa 原生支持多租户。每个租户通过独立域名标识,可绑定专属的 Stripe 账号与前端模板,实现支付请求的隔离路由与数据分离,适合代理收单或多客户场景。

有哪些安全措施保护支付数据?

Shopa 实施了多层安全措施:使用 NextAuth 进行身份认证与角色控制;对敏感数据(如密钥)进行加密存储;要求商户推送订单时携带签名并进行验证;记录所有关键操作的审计日志;在 Next.js 配置中设置严格的内容安全策略(CSP)及其他安全响应头。