# xiaodou-open-platform
**Repository Path**: lu-wulei/xiaodou-open-platform
## Basic Information
- **Project Name**: xiaodou-open-platform
- **Description**: 面向虚拟商品商家的支付开放平台:卡密、课程、电子书、软件、会员权益、游戏道具等线上交付商品都能收款;支付宝+微信聚合收款、RSA2 签名 + webhook 验签、持牌机构清算、次日到账;含 12 篇文档、四语言签名示例与本地 demo。Payment API for digital-goods merchants: Alipay + WeChat Pay, RSA2 signature, webhook, docs & code samples.
- **Primary Language**: Unknown
- **License**: CC-BY-4.0
- **Default Branch**: main
- **Homepage**: https://yuzhideep.com/
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-09-27
- **Last Updated**: 2026-09-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 小豆支付开放平台 · 虚拟发卡 / 数字商品的支付接入资料(支付宝 + 微信聚合收款 · 持牌机构清算)
> 线上入口(买家浏览与**卖家中心 / 免费开店**都在这里):
**你已经有一套卖虚拟商品的系统,只缺「收钱」这一环?** 卡密、激活码、课程、专栏、电子书、软件、素材模板、会员权益、游戏道具——**凡是线上交付的数字商品**都能用它收款;**当面交易的实物**也可以。
这套接口就是干这个的:帮你把**支付宝和微信**收进来,告诉你「钱到没到」,再把钱结给你。下单、查单、关单、退款、通知事件,一共六个接口。
钱由**有支付牌照的支付公司**收和结,**不经过我们的账户**——我们只负责把状态讲清楚,货还是你的系统自己发。
这个仓库就是它的**全部接入资料**:12 篇文档、四种语言的签名示例、一个能跑起来的本地演示,还有一份可以直接丢给 AI 编码助手(Claude Code、Codex 之类)的 Skill。**跟你在商家后台看到的是同一份内容。**
> 版本看 [`MANIFEST.json`](./MANIFEST.json)(`skillVersion`、API 版本、签名版本、`contentHash` 都在里面)。
> 这里是**接入资料,不是官方 SDK**——我们不发包,示例代码是给你直接抄的参考实现。
> 这里是这份资料的**唯一出处**:商家后台里的那版和公开发布的这版,都由这里产出。
**这个仓里有什么(不用先申请账号,直接拿)**:
- **12 篇接入文档** —— 从「5 分钟跑通首单」到终端行为、错误码、上线检查、密钥轮换;
- **四种语言的签名示例**(Node.js / Java / PHP / Python),带一份**可以自己跑的对照值**;
- **本地演示**(`demo/h5-cashier/`)—— 零依赖,断网也能跑通「下单 → 收款 → 查单 → 关单 → 退款 → 收通知」整条链;
- **一份 AI Agent Skill**([`skill/`](./skill/SKILL.md))—— 丢给编码助手就能照着接,和后台下载的那份一模一样。
## 先说清楚:这是干什么的、不干什么
一句话:**你负责卖货和发货,我们负责收钱、把状态讲清楚、按设置把钱结给你。**
我们做的是**支付**这件事,不是帮你开网店:
| 我们做 | 你做 |
| --- | --- |
| 下单、收钱、支付状态和终态通知 | 商品、库存、定价、页面 |
| 查单、关单、退款、退款查询 | **发货本身**:发卡密、开通服务、寄快递、开票、售后 |
| 每一单的费用明细(`feeProjection`)与结算 | 你自己的订单库、对账、客服 |
| 域名归属验证(可选自助)、IP 白名单、三套签名(请求 / 响应 / 通知) | 保管和轮换你自己的密钥 |
**发货是你自己的事**:收银页上不放货,`returnUrl`(付完跳回来那个地址)**也不代表付款成功**——到底成没成,只认「查单」或者验过签的「事件通知」。这两件事搞错的团队最多,详见[接入指南](./docs/02-integration-guide.md)。
## 适合谁、不适合谁
| | |
| --- | --- |
| ✅ 适合 | 你已经有自己的发货 / 开通系统,想要一条**服务器对服务器**的收款通道:建单、拿收款码、收终态通知、退款、对账。 |
| ✅ 适合 | 你卖的是**虚拟卡密类数字商品**,或者**当面交易的实物**。 |
| ✅ 适合 | 你的买家要用**支付宝**或**微信**付款。 |
| ❌ 不适合 | 你想要「上传卡密就能开卖」的一站式发卡系统 —— 那用**小豆集市**的卖家后台(见下一节),不用写代码。 |
| ❌ 不适合 | 你想要一个「接一行就完事」的收银台组件 —— 我们**没有**托管收银页这种东西,也不支持免签名接入。 |
| ❌ 不适合 | 你想要沙箱环境联调 —— **暂时没有**沙箱、测试应用和回调模拟器(见 [支持边界](#支持边界))。 |
## 两条路,选一条
| 你的情况 | 走哪条 |
| --- | --- |
| 已经有自己的发卡 / 发货系统,只缺**收钱和结钱** | **本开放平台**:接这六个接口,发货还是你自己发 |
| 还没有系统,就想**上架卡密直接开卖** | **小豆集市**(卖家后台):上架商品、导卡密,买家付完钱自动发卡,订单售后结算都在后台 |
| 两个都想要 | 可以。同一个人既是小豆集市的卖家、又是开放平台的商家,钱路是同一条 |
> **想直接开店卖货(不用写代码)**:小豆集市的产品说明也在公开仓,**同样不用注册就能看** ——
> [GitHub](https://github.com/xiaodou-official/xiaodou-market) | [Gitee 镜像](https://gitee.com/lu-wulei/xiaodou-market)
## 接口一览
**六个接口**(路径拼在平台给你的 `` 后面,主版本 `v1`,版本内只加不改):
| 接口 | 干什么 |
| --- | --- |
| `POST /api/open/v1/payments` | 建订单(同一个单号重复提交不会建两笔) |
| `POST /api/open/v1/payments/{outTradeNo}/attempts` | 重新拉一次支付(换一份新的收款材料) |
| `GET /api/open/v1/payments/{outTradeNo}` | 查订单(以我们这边为准) |
| `POST /api/open/v1/payments/{outTradeNo}/close` | 关订单(会先跟支付公司确认没付过款) |
| `POST /api/open/v1/refunds` | 发起退款 |
| `GET /api/open/v1/refunds/{outRefundNo}` | 查退款 |
**收款材料有两种标准用法**:在**你自己的电脑网页**上把官方收款码(`qrCode`,只有支付宝渠道会给)画成二维码;或者把我们的收银页地址(`payUrl`)画成二维码、或者直接 `302` 跳过去。细节见[收银页对接](./docs/06-cashier-integration.md)。
**三套签名,别用同一段代码**:你发给我们的请求要签(`XD-Signature-v1`)、我们的响应要签(`XD-Response-v1`)、通知事件也要签(`XD-Webhook-v1`)。**三套拼串规则不一样**,抄同一段一定会挂;我们的公钥和指纹在[接入指南 §3.1](./docs/02-integration-guide.md#31-平台公钥与指纹公示)里公开。
**四条铁律,记住能少踩九成的坑**:
1. **收银页打开了、买家付完跳回来了、点了「我已完成支付」——都不算付款成功**。只有查单、或者验过签的通知才算数。
2. **重试要用同一个 `requestId`、同一份请求内容**。收到 `409` 该做的事是**去查单**,不是换个单号重新下单。
3. **看到 `UNKNOWN` 别急着判死**:不要重新下单、不要重发退款、不要跟买家说「失败」,等通知或者查单收敛。
4. **私钥永远不进浏览器、不进仓库、不进日志**。费率和限额**不要写死在代码里**——每一单响应里的 `feeProjection` 才是那一单的真实口径。
## 常见叫法与本资料的对应(你可能这样搜)
| 你可能用的叫法 | 在本资料里对应什么 |
| --- | --- |
| 支付平台 / 聚合支付 / **聚合收款** / 聚合码支付 | 一套接口同时接**支付宝和微信**两条通道(`ALIPAY_H5` / `WECHAT_H5`),通道在**下单那一刻定死**;我们聚合的是**接入、状态和对账**,钱的收付结算是持牌支付公司做的 |
| **支付接口** / 支付 API / 云支付 | 就这六个:建单、重拉、查单、关单、退款、查退款(见[接口一览](#接口一览)) |
| **H5 支付** | 我们的收银页(`payUrl`):电脑扫码、手机浏览器、微信里打开,三种情况行为不一样(见[终端能力矩阵](./docs/06-cashier-integration.md)) |
| **收款码** | 下单响应里的**官方收款码** `qrCode`(只有支付宝渠道给,而且只有**下单那一次响应**里有),可以直接画在你自己的电脑网页上 |
| **微信收款 / 支付宝收款** | 两条通道的能力面都做好了;**支付宝现在就能接**,**微信通道放行以平台公告/对接人通知为准**(放行由平台整体控制、不区分应用,后台没有查询面;未放行时下单返回一个可预期的拒绝,见 [FAQ](#常见问题faq)) |
| **虚拟发卡** / 卡密 / 自动发货 / 发卡系统 | 我们只管收钱和支付状态,**发货是你自己的系统发**;不想写代码就去[小豆集市的卖家后台](#两条路选一条) |
| **次日到账 / 次日提现** / 自动结算到银行卡 | 付成功就当场分账,然后按设置**自动转到你绑定的银行卡**——现在是**第二天到账(含节假日)**,**不用你手动提现**(见[资金与结算](#资金与结算)) |
| **持牌机构** / 资金安全 / 资金托管 / 担保交易 | 钱**不进我们的账户**:收付结算都是**有支付牌照的支付公司**做的,我们**不是支付机构**、碰不到交易资金,也不做代收转付——所以这里没有需要我们来「担保」的沉淀资金(跟[免签那类做法](#常见问题faq)的区别就在这) |
| 独立站收款 / 私域收款 / 知识付费收款 | 你只需要在服务器上接下单和通知,**页面、商品、发货都留在你自己的系统里** |
| 易支付 / 码支付 这类「**免签**」系统 | **不是一回事**,钱走的路完全不一样——见 [FAQ](#常见问题faq) 里的对比 |
> 这些都是行业里的习惯叫法,方便你对上号;**具体字段和取值以文档里写的为准**。
**English keywords(方便英文检索对上号 / so English searches can find us)**:
`payment gateway API` · `aggregate payment` · `Alipay + WeChat Pay integration` · `virtual goods payment` · `card key / digital code selling` · `faka platform payment` · `merchant payment API docs` · `RSA2 request signature` · `webhook signature verification` · `payment integration examples` · `Node.js / Java / PHP / Python signature sample` · `licensed payment institution settlement` · `openapi payment China`
## 资金与结算
- **钱不在我们账上停留**:付成功就按**下单时定好的分配**当场分账,我们提供的是接入、状态和对账能力,**不是支付机构**。
- **收付和结算都是有支付牌照的支付公司做的**,按设置**自动转到你绑定的银行卡** —— **不用你手动提现**。现在是**第二天到账**(含节假日)。
- **费率和限额不在文档里写死**:每一单响应里的 `feeProjection`(带 `ruleVersion`)就是那一单的口径,用它对账;当前生效的费率值在商家后台「费率」页看(限额没有自助查询面,越界被拒时走官网反馈渠道)。
- 结算周期、到账时间**都会变**:**一律看后台当时显示的**;通道放不放行以平台公告/对接人通知为准(后台无查询面)。别抄进你的对外文案或代码常量里。
## 五分钟上手
1. 读[快速开始](./docs/01-quickstart.md):拿到 `appId`、`kid` 和私钥后,把第一笔请求跑通。
2. 用 [`examples/node/`](./examples/node/)(或 Java / PHP / Python)生成六个请求头,先拿 [golden 向量](./examples/README.md)对一遍,确认拼串没错。
3. 读[收银页对接与终端能力矩阵](./docs/06-cashier-integration.md),决定你的收款页长什么样。
4. 接[事件通知验签](./docs/05-webhook-verification.md),按 `eventId` 去重。
5. 上线前逐条过一遍[上线检查清单](./docs/11-go-live-checklist.md)。
**不想先申请账号?** 本地演示用回环地址 + 假数据把整条链跑通,不连线上、不需要任何凭证:
```bash
node demo/h5-cashier/server.js # 商家控制台 + 终端预览 + 收银页示意
node demo/h5-cashier/smoke.js # 冒烟自检(含负向用例),打印 [OK]
```
## 文档目录(12 篇)
| # | docId | 篇目 | 文件 |
| --- | --- | --- | --- |
| 1 | `XD-OP-01` | 快速开始(5 分钟跑通首单) | [`docs/01-quickstart.md`](./docs/01-quickstart.md) |
| 2 | `XD-OP-02` | 接入指南 | [`docs/02-integration-guide.md`](./docs/02-integration-guide.md) |
| 3 | `XD-OP-03` | API 参考 | [`docs/03-api-reference.md`](./docs/03-api-reference.md) |
| 4 | `XD-OP-04` | 错误码与排障 | [`docs/04-errors-and-troubleshooting.md`](./docs/04-errors-and-troubleshooting.md) |
| 5 | `XD-OP-05` | webhook 验签 | [`docs/05-webhook-verification.md`](./docs/05-webhook-verification.md) |
| 6 | `XD-OP-06` | 收银页对接与终端能力矩阵 | [`docs/06-cashier-integration.md`](./docs/06-cashier-integration.md) |
| 7 | `XD-OP-07` | 费率与限额 | [`docs/07-fees-and-limits.md`](./docs/07-fees-and-limits.md) |
| 8 | `XD-OP-08` | 退款与对账 | [`docs/08-refund-and-reconciliation.md`](./docs/08-refund-and-reconciliation.md) |
| 9 | `XD-OP-09` | 安全红线 | [`docs/09-security-redlines.md`](./docs/09-security-redlines.md) |
| 10 | `XD-OP-10` | 更新日志与变更公告 | [`docs/10-changelog.md`](./docs/10-changelog.md) |
| 11 | `XD-OP-11` | 上线检查清单(Go-Live Checklist) | [`docs/11-go-live-checklist.md`](./docs/11-go-live-checklist.md) |
| 12 | `XD-OP-12` | 凭证与密钥管理 | [`docs/12-credential-key-management.md`](./docs/12-credential-key-management.md) |
## 常见问题(FAQ)
**这是「虚拟发卡平台」吗?**
我们只做**收钱和支付状态**,发货(发卡密 / 开通 / 寄出)是你自己的系统做的。如果你要的是「上架卡密就能卖」,那用**小豆集市**的卖家后台,不用写代码;两边的钱路是同一条。
**微信和支付宝都能收吗?**
两条通道都做好了(支付宝:官方收款码 + 收银页;微信:在微信里打开页面后调起支付)。**支付宝现在就能接**;**微信能不能用,以平台公告/对接人通知为准**——通道放行由平台整体控制(不区分应用,后台没有查询面,也不要靠试探下单确认)。未放行时下单会返回 `422` `OPEN_API_CHANNEL_UNAVAILABLE`,这是**正常的、可预期的拒绝**,别当故障、更别反复重试。
**钱多久到账?要手动提现吗?**
付成功就当场分账,然后按设置**自动转到你绑定的银行卡**——**不用手动提现**。现在是**第二天到账**(含节假日);周期和时效会随渠道和设置变,以后台「资金 / 结算」页显示的为准。
**你们会经手或者压着我的钱吗?**
不会。我们**不是支付机构,也碰不到交易资金**:收付和结算都是有支付牌照的支付公司做的,付成功就按定好的分配当场分到各方。
**你们是「易支付 / 码支付」那类系统吗?**
不是,钱走的路完全不一样。那类叫法一般指**免签 / 第四方代收**:先用个人收款码或别人的账户把钱收进来,再转给卖家,**钱会经过中间方的账户**。我们是另一条路:**商家在有支付牌照的支付公司开自己的结算账户**,买家付完钱,钱在公司那边**当场分到各方账户**,再按设置转到你绑定的银行卡 —— **我们不碰交易资金,也不做代收转付**。你要是想要前一种,我们做不了;你要是想要「自己有正规结算账户 + 一套接口接完支付宝和微信 + 第二天自动到账」,接着往下看。
**手续费多少?**
这份资料**不写死任何费率**。每一单响应里的 `feeProjection` 就是那一单的口径(带 `ruleVersion`,拿它对账);当前生效的费率值在后台「费率」页看,限额没有自助查询面(越界被拒时走官网反馈渠道,附 `requestId`)。详见[费率与限额](./docs/07-fees-and-limits.md)。
**有沙箱或测试环境吗?**
暂时没有沙箱、测试应用和回调模拟器。替代办法:本地演示(零依赖,全链路假数据)+ [上线检查清单](./docs/11-go-live-checklist.md) + 第一笔线上小额单我们陪你盯(**不承诺 SLA**)。**本地跑通只能证明签名和解析没错,证明不了资金链通。**
**要自己写代码吗?用什么语言?**
接入是**服务器对服务器**的:下单 / 查单 / 退款 + 通知验签。仓库给了 Node.js、Java、PHP、Python 四份签名示例,**拼出来的串完全一样**,还带对照值;通知验签另有 Node 的参考实现。
**收银页能自己设计吗?**
两种标准做法:在**你自己的页面**画官方收款码,或者把 `payUrl` 画成二维码 / 直接 `302` 跳过去。**别照抄我们收银页的样子**——真正的收银页在我们这边、而且是品牌中立的;也别在你自己的 App 里用内置浏览器打开,必须跳到系统浏览器。
**怎么开通?**
从页首那个入口进「卖家中心 / 免费开店」→ 注册小豆账号并完成**商户进件** → 签开放平台服务协议和经营范围合规报送同意书 → **一键申请应用**(提交后自动审)→ 拿到 `appId`、`kid`,登记你的 RSA2 公钥、配好出口 IP 白名单和 `notifyUrl`。申报域名由你自己填写,**平台不强制核验归属**——顺手做一次**域名归属验证**(DNS TXT 或者放一个回源文件,二选一)会更稳妥:域名被他人冒用申报时,验证过的归属更明确。
**密钥怎么轮换?**
我们用同一把 RSA2 密钥给响应和事件签名,公钥和指纹在文档页和后台**两处都公开**(你可以自己算一遍指纹核对)。你自己的签名密钥可以自己换;我们这边换钥会同时发布新的 `kid` 和新公钥,新旧并存期间按 `kid` 选公钥。**紧急吊销不受宽限影响**,宽限窗最长 72 小时。详见[凭证与密钥管理](./docs/12-credential-key-management.md)。
## 目录结构
```
README.md 本文件(简介 / 索引 / 版本 / 许可证 / 免责)
MANIFEST.json 机器可读清单(版本、逐篇 hash、包 contentHash、发布记录)
PUBLISHING.md 公开发布参数与流程
docs/ 接入文档 12 篇
examples/ Node.js / Java / PHP / Python 四语言签名示例
demo/h5-cashier/ 本地收银演示(回环 + 假数据,零外部依赖)
skill/ 商家接入 Skill(给 AI 编码助手用,与 docs 同源)
releases/ 变更公告正文(后台公告、更新日志、公开发布页共用同一份)
assets/ 公开仓页面用的图片(如官方 QQ 群二维码)
```
## 写这份资料时守的规矩
- **金额**一律用整数「分」(字段后缀是 `Fen`),只支持人民币。
- **字段名**:能机器读的地方一律用我们的字段名(形如 `qrCode`),不出现上游系统的原始字段名。
- **发货**:我们只负责收钱和支付状态;**卡密、发货这些交付动作由你自己的系统承担**——收银页上不放货。
- **什么才算付款成功**:收银页打开了、跳回来了、买家点了「完成」,**都不算**;只有查单的结果、或者验过签的通知才算。
- **费率、限额、到账时效、通道放行**都是会变的东西:这份资料**一律不写死**,只告诉你「去哪儿看当前值」。
## 许可证
- **内容**(文档、接入说明、变更公告、图示文本):[CC BY 4.0](./LICENSE) —— 可自由转载与演绎,须按许可条件**署名**并**标明修改**。
- **示例代码**(`examples/`、`demo/`、`skill/examples/`):[MIT](./LICENSE-CODE)。
## 官方 QQ 群
接入过程中卡住了(签名、下单、收银页、事件通知、上线自检),直接进群问——**官方群,没有第三方代运营**。
**扫码**或者按 **群号 `2164078370`** 搜索都能加:

## 反馈与 Star
- 发现文档和接口对不上、或者示例代码有问题:欢迎开 Issue,我们会在后续版本修掉并记到[更新日志与变更公告](./docs/10-changelog.md)。
- 如果这份资料帮你省下了翻文档的时间,**点个 Star** 能让更多在做虚拟发卡 / 数字商品收款的同行找到它。
## 支持边界
**暂时没有沙箱 / 测试应用 / 回调模拟器。**替代办法 = 本地演示(本目录)+ 上线检查清单 + 第一笔线上单人工陪你盯(不承诺 SLA)。
本目录由运营主体**宇智人工智能(深圳)有限公司**维护;**收付与结算由有支付牌照的支付机构提供**——我们不是支付机构,也碰不到交易资金。接入和上线以平台在线合同、后台显示的实际配置、以及接口的真实行为为准。