1. 项目定位与用途
Shopa 是一个多租户 B2C 商城 SaaS 支付网关系统,定位为商户网站与 Stripe 支付之间的智能路由层。其核心用途是通过域名绑定关系,将不同商户或业务的支付请求自动分发到指定的 Stripe 账号,从而提供统一的支付入口与聚合管理能力。商户无需直接对接多个 Stripe 账号,只需集成 Shopa 一个 API,系统后台负责账号选择、支付链接生成与回调处理。
Shopa 是一个多租户 B2C 商城支付网关,通过域名路由将支付请求分发至不同 Stripe 账号,实现风险分散与业务隔离。本文详细介绍其安装步骤、使用方式、技术架构及适用场景。
Shopa 是一个基于 Next.js 的多租户 B2C 商城支付网关,通过域名路由将支付请求智能分发至不同 Stripe 账号,实现多账号分流、风险分散与业务隔离,为商户提供统一、安全、可靠的收款入口。
Shopa 是一个多租户 B2C 商城 SaaS 支付网关系统,定位为商户网站与 Stripe 支付之间的智能路由层。其核心用途是通过域名绑定关系,将不同商户或业务的支付请求自动分发到指定的 Stripe 账号,从而提供统一的支付入口与聚合管理能力。商户无需直接对接多个 Stripe 账号,只需集成 Shopa 一个 API,系统后台负责账号选择、支付链接生成与回调处理。
Shopa 主要解决单一 Stripe 账号收款的四类问题:一是风险集中,单账号收款额过大易触发风控导致业务中断;二是缺乏隔离,多种业务混在同一账号不利于财务对账;三是切换成本高,账号异常时需修改商户代码;四是代理管理难,为多个客户收单时难以独立管理。通过多账号分流、业务隔离、快速切换与聚合管理,Shopa 有效分散风险并提升运营灵活性。
根据 README 与文档,Shopa 适用于以下场景:1) Stripe 账号轮转/分流,将订单自动分配到不同账号以降低单账号风控概率;2) 多业务线隔离,不同类型业务走不同 Stripe 账号,账目清晰;3) 容灾备份,主账号异常时快速切到备用账号,商户代码无需改动;4) 代理收单,为多个客户提供支付通道,每个客户分配独立域名和 Stripe 账号。
从仓库提供的脚本与文档可见,安装步骤如下:首先复制 .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 加载示例数据。
使用 Shopa 的完整流程为:管理员在管理后台配置域名与对应 Stripe 账号的绑定关系,并可设置产品、分销商及前端模板;商户按 API 规范推送订单(含商户编码与签名)至 Shopa 网关;网关根据请求域名匹配 Stripe 账号并返回支付链接;用户访问链接完成支付后,Stripe 通过 Webhook 事件通知 Shopa;Shop a 处理事件后,将订单状态与签名回跳至商户指定地址。管理员还可通过 API 手动重发 Webhook 或回调以确保交付。
Shopa 的实现特点包括:基于 Next.js App Router 的全栈架构,API 路由处理后端逻辑;使用 Prisma 抽象数据库,支持 SQLite 与 PostgreSQL 双引擎切换;多租户通过域名路由实现,每个域名可绑定独立 Stripe 账号与前端模板;角色权限控制区分超级管理员与分销商,分销商通过密钥与域名受限访问;安全设计涵盖敏感数据加密、请求签名验证、审计日志记录以及严格的 CSP 安全头配置;支付流程集成涵盖订单创建、Stripe Checkout Session 生成、Webhook 事件处理与回调商户。
Shopa 通过域名路由机制实现账号分配:在管理后台为每个域名绑定一个指定的 Stripe 账号,当商户使用该域名推送订单时,网关自动匹配并使用对应的 Stripe 账号创建支付会话,从而实现请求的分发与轮转。
需要 Node.js 环境、npm 包管理器,并准备数据库(SQLite 或 PostgreSQL)。根据 .env.example 配置环境变量,包括数据库连接字符串、Stripe 密钥、NextAuth 密钥等。随后运行 npm install 和数据库迁移命令即可完成安装。
支付完成后,Stripe 向 Shopa 发送 Webhook 事件,Shop a 处理事件并更新订单状态,随后将订单号、状态及签名通过回调 URL 回跳至商户网站。管理员也可在后台手动重发 Webhook 或回调以确保交付。
是的,Shopa 原生支持多租户。每个租户通过独立域名标识,可绑定专属的 Stripe 账号与前端模板,实现支付请求的隔离路由与数据分离,适合代理收单或多客户场景。
Shopa 实施了多层安全措施:使用 NextAuth 进行身份认证与角色控制;对敏感数据(如密钥)进行加密存储;要求商户推送订单时携带签名并进行验证;记录所有关键操作的审计日志;在 Next.js 配置中设置严格的内容安全策略(CSP)及其他安全响应头。