开发文档

码装柜v2.0

高效、安全、稳定的解决方案

2026年6月 码装柜v2.0 技术团队

高效接入

快速完成支付对接

安全可靠

多重加密保障资金安全

完善文档

详尽的开发指南与示例

码掌柜 开发文档

版本 V2.0.0 · 2026年6月

版本历史

V2.0.02026-06-07码掌柜团队
  • 全面重构文档模板
  • 新增接口文档模块
  • 优化部署流程说明
V1.5.02026-04-15码掌柜团队
  • 新增微信支付接口
  • 修复签名验证问题
  • 更新SDK版本
V1.2.02026-01-28码掌柜团队
  • 新增QQ钱包支付
  • 优化异步通知机制
  • 完善错误码说明
V1.0.02025-11-20码掌柜团队
  • 初始版本发布
  • 支持支付宝支付
  • 基础API接口

引言

编写目的

本文档旨在为码掌柜支付系统的开发团队提供完整的技术参考和开发指南,涵盖系统架构、接口规范、开发流程及部署方案等核心内容,确保团队成员能够快速理解系统设计并高效参与开发工作。

项目背景

码掌柜支付系统是一套高效、安全、稳定的聚合支付解决方案,支持支付宝、微信支付、QQ钱包等多种支付方式的统一接入,为商户提供便捷的支付对接体验。

术语定义

术语说明
商户ID (pid)系统分配给商户的唯一标识符
签名 (sign)用于验证请求合法性的加密字符串
异步通知 (notify_url)支付完成后服务器主动推送支付结果
同步跳转 (return_url)支付完成后页面跳转回商户网站
商户订单号 (out_trade_no)商户系统内部的订单编号
平台订单号 (trade_no)支付平台生成的订单编号

功能说明

码掌柜支付系统提供完整的解决方案,包含以下核心功能模块:

页面跳转支付

用户通过页面跳转完成支付流程,适用于PC端和移动端H5场景

API接口支付

服务端直接调用接口获取支付二维码或链接,适用于扫码支付场景

订单查询

支持按商户订单号或系统订单号查询订单状态和详情

异步通知

支付完成后自动向商户服务器推送支付结果,确保交易状态同步

签名验证

采用MD5签名算法确保请求和通知的合法性,防止数据篡改

错误处理

完善的错误码体系和异常处理机制,便于问题定位和排查

业务流程

1商户发起请求
2签名验证
3创建订单
4用户支付
5异步通知
6商户确认

技术架构

系统架构

客户端(浏览器 / 移动端)
Nginx 反向代理 / 负载均衡
支付网关服务 订单管理服务
MySQL 主从 Redis 缓存

技术栈

前端框架React 18
开发语言TypeScript
运行环境Node.js
后端框架Express
数据库MySQL
缓存Redis
反向代理Nginx
容器化Docker

模块依赖

模块职责依赖
支付网关处理支付请求,路由至对应支付渠道订单模块, 签名模块
订单管理订单创建、查询、状态更新数据库, 缓存
签名验证请求签名生成与校验商户配置
异步通知支付结果推送与重试订单模块, 签名模块

开发规范

编码规范

缩进统一使用2个空格缩进,禁止使用Tab
命名变量使用camelCase,类名使用PascalCase,常量使用UPPER_SNAKE_CASE
注释公共方法必须添加JSDoc注释,复杂逻辑需添加行内注释
类型TypeScript严格模式,禁止使用any类型

Git 工作流

main生产分支
develop开发分支
feature/*功能分支
hotfix/*热修复分支

代码审查

  • 所有代码合并前必须经过至少一位团队成员审查
  • 审查重点:逻辑正确性、安全性、性能、代码风格
  • 使用Pull Request进行代码审查,确保CI通过后方可合并
  • 关键模块(支付、签名)需由技术负责人二次审查

接口文档

所有接口均使用 UTF-8 编码,签名算法与支付宝签名算法相同。点击接口可展开查看详细参数说明。

POST/submit.php

页面跳转支付接口,商户通过此接口发起支付请求,用户完成支付后跳转回商户页面。

请求参数

参数名类型必填示例值描述
pidInt必填1000商户ID
typeString必填alipay支付方式:alipay/qqpay/wxpay
out_trade_noString必填20160806151343349商户订单号
notify_urlString必填https://example.com/notify服务器异步通知地址
return_urlString必填https://example.com/return页面跳转通知地址
nameString必填商品A商品名称
moneyString必填1.00商品金额
signString必填202cb962ac59075b964b07152d234b70签名字符串
sign_typeString必填MD5签名类型,默认MD5

响应示例

{
  "code": 200,
  "msg": "成功",
  "data": {
    "trade_no": "20260601151343349021",
    "pay_url": "https://pay.example.com/order/xxx"
  }
}
POST/mapi.php

API接口支付,适用于服务端直接调用,返回支付二维码或支付链接。

请求参数

参数名类型必填示例值描述
pidInt必填1000商户ID
typeString必填wxpay支付方式:alipay/qqpay/wxpay
out_trade_noString必填20160806151343349商户订单号
notify_urlString必填https://example.com/notify服务器异步通知地址
return_urlString必填https://example.com/return页面跳转通知地址
nameString必填商品B商品名称
moneyString必填10.00商品金额
signString必填202cb962ac59075b964b07152d234b70签名字符串
sign_typeString必填MD5签名类型,默认MD5

响应示例

{
  "code": 200,
  "msg": "获取成功",
  "money": "10.00",
  "type": "wxpay",
  "qrcode": "wxp://f2f15IaTGck0xvm7...",
  "code_url": "Payewm.jpg",
  "trade_no": "20260601151343349021",
  "out_trade_no": "20160806151343349"
}
GET/notify_url

支付结果异步通知,支付完成后系统会向商户设置的notify_url发送通知。

通知参数

参数名类型必填示例值描述
pidInt必填1000商户ID
trade_noString必填20260601151343349021平台订单号
out_trade_noString必填20160806151343349商户订单号
typeString必填alipay支付方式
nameString必填商品A商品名称
moneyString必填1.00商品金额
trade_statusString必填TRADE_SUCCESS支付状态,仅TRADE_SUCCESS为成功
signString必填202cb962ac59075b964b07152d234b70签名字符串
sign_typeString必填MD5签名类型
POST/api/findorder

单笔订单查询接口,商户可通过此接口查询订单状态。

请求参数

参数名类型必填示例值描述
order_noString必填20160806151343349需要查询的订单号
typeInt必填1订单号类型:1=商户订单号,2=系统订单号

响应示例

{
  "code": 200,
  "msg": "获取成功",
  "data": {
    "id": 1,
    "trade_no": "20260601151343349021",
    "out_trade_no": "20160806151343349",
    "type": "alipay",
    "money": "1.00",
    "status": "TRADE_SUCCESS",
    "addtime": "2026-06-01 15:13:43"
  }
}

错误码说明

错误码说明
200请求成功
400请求参数错误
401商户认证失败
403签名验证失败
404接口不存在
500服务器内部错误
1001商户不存在或被禁用
1002商户余额不足
1003订单号重复
1004金额格式错误
1005支付方式不支持

测试计划

测试策略

单元测试

覆盖核心业务逻辑,目标覆盖率 ≥ 80%

集成测试

验证模块间交互,重点测试支付流程

端到端测试

模拟真实用户场景,验证完整支付链路

测试用例

用例编号测试场景预期结果优先级
TC-001正常支付流程支付成功,收到异步通知P0
TC-002签名验证失败返回签名错误提示P0
TC-003重复订单号提交返回订单号重复错误P1
TC-004金额格式错误返回参数错误提示P1
TC-005异步通知重试失败后自动重试3次P1
TC-006并发支付请求订单数据一致性P2

测试环境

环境
测试服务器 (test-api.mzg.com)
数据库
MySQL 8.0 测试库
缓存
Redis 7.0 测试实例
商户测试号
pid: 1000, key: test_key_123

部署指南

环境要求

组件最低版本推荐版本
Node.js16.x18.x LTS
MySQL5.78.0
Redis6.07.0
Nginx1.181.24
Docker20.1024.0

部署步骤

1

拉取代码

git clone https://github.com/mzg/server.git && cd server
2

安装依赖

npm install --production
3

配置环境变量

cp .env.example .env && vim .env
4

初始化数据库

npm run db:migrate && npm run db:seed
5

构建项目

npm run build
6

启动服务

npm run start:prod

配置说明

配置项说明默认值
PORT服务监听端口3000
DB_HOST数据库地址localhost
DB_PORT数据库端口3306
REDIS_HOSTRedis地址localhost
REDIS_PORTRedis端口6379
LOG_LEVEL日志级别info

运维监控

健康检查
GET /health
监控面板
Grafana :3001
日志收集
ELK Stack
告警通知
钉钉/企业微信

附录

常见问题 (FAQ)

签名验证总是失败怎么办?
1. 检查商户密钥是否正确;2. 确认参数排序规则(按字母升序);3. 验证编码方式(UTF-8);4. 确保 sign_type 与签名算法一致;5. 检查是否遗漏了空值参数。
收不到异步通知怎么办?
1. 确保 notify_url 可从外网访问;2. 检查服务器防火墙设置;3. 确保接口返回了 "success" 字符串;4. 查看系统重试记录;5. 检查 SSL 证书是否有效。
如何进行支付测试?
1. 在开发环境注册测试商户;2. 使用测试密钥进行签名;3. 调用支付接口使用 0.01 元金额测试;4. 验证异步通知是否正常接收;5. 确认订单状态更新正确。
支持哪些支付方式?
目前支持:支付宝(alipay)、微信支付(wxpay)、QQ钱包(qqpay)。后续将陆续接入银联、云闪付等更多支付渠道。