# 晓风聚合支付系统首页接口文档
一、公开接口列表
| 序号 | 接口路径 | 请求方式 | 认证要求 | 功能说明 |
|---|---|---|---|---|
| 1 | /api/meta/site | GET | 无需认证 | 获取网站元数据配置信息 |
| 2 | /api/auth/me | GET | 无需认证 | 获取当前用户认证状态 |
| 3 | /api/meta/announcements?ann_type=site_popup | GET | 无需认证 | 获取弹窗公告信息 |
| 4 | /api/meta/announcements?ann_type=normal | GET | 无需认证 | 获取普通公告列表 |
| 5 | /api/auth/login-captcha | GET | 无需认证 | 获取登录行为验证码 |
| 6 | /api/auth/email-code | POST | 无需认证 | 发送邮箱验证码(注册) |
| 7 | /api/auth/login | POST | 无需认证 | 用户登录 |
| 8 | /api/auth/merchant/register | POST | 无需认证 | 用户注册 |
| 9 | /api/pay/public-test | POST | 无需认证 | 创建测试订单(首页测试支付) |
| 10 | /api/pay/cashier/{trade_no} | GET | 无需认证 | 获取收银台详情 |
| 11 | /api/pay/result?trade_no={trade_no} | GET | 无需认证 | 查询支付结果 |
二、网站元数据接口
接口路径:/api/meta/site
请求方式:GET
认证要求:无需认证,公开接口
响应格式
{
"code": 0,
"msg": "ok",
"data": {
"cashier_templates": [
{"code": "template1", "name": "简洁风格"},
{"code": "template2", "name": "标准风格"}
],
"home_pay_types": "alipay,wxpay,usdt,qqpay",
"monitor_download_android_url": "https://cyjl.ljwx.site/...",
"site_name": "晓风聚合支付系统",
"site_logo": "/uploads/site/logo_1775839580321427391.png",
"system_pay_pid": "M20260411c37ad0d84a"
}
}字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| cashier_templates | 数组 | 可用的收银台模板列表 |
| cashier_templates[].code | 字符串 | 模板代码 |
| cashier_templates[].name | 字符串 | 模板名称 |
| home_pay_types | 字符串 | 首页显示的支付类型,逗号分隔 |
| monitor_download_android_url | 字符串 | 安卓监控程序下载地址 |
| site_name | 字符串 | 网站名称 |
| site_logo | 字符串 | 网站Logo路径 |
| system_pay_pid | 字符串 | 系统演示PID |
三、用户认证状态接口
接口路径:/api/auth/me
请求方式:GET
认证要求:无需认证,公开接口
响应格式(已登录)
{
"code": 0,
"msg": "ok",
"data": {
"role": "merchant",
"user_id": 2,
"username": "m_0e23d3b4bf"
}
}响应格式(未登录)
{
"code": 0,
"msg": "ok",
"data": null
}字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| role | 字符串 | 用户角色,如 "merchant" |
| user_id | 整数 | 用户ID |
| username | 字符串 | 用户名 |
四、弹窗公告接口
接口路径:/api/meta/announcements?ann_type=site_popup
请求方式:GET
认证要求:无需认证,公开接口
响应格式
{
"code": 0,
"msg": "ok",
"data": {
"list": [
{
"id": 1,
"ann_type": "site_popup",
"title": "晓风聚合支付系统",
"content": "晓风聚合支付系统,基于 Go 语言纯自主研发...",
"is_enabled": 1,
"created_at": "2026-04-11 06:58:25",
"updated_at": "2026-05-15 17:12:07"
}
]
}
}字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| list | 数组 | 公告列表 |
| list[].id | 整数 | 公告ID |
| list[].ann_type | 字符串 | 公告类型 |
| list[].title | 字符串 | 公告标题 |
| list[].content | 字符串 | 公告内容 |
| list[].is_enabled | 整数 | 是否启用,1表示启用 |
| list[].created_at | 字符串 | 创建时间 |
| list[].updated_at | 字符串 | 更新时间 |
五、普通公告接口
接口路径:/api/meta/announcements?ann_type=normal
请求方式:GET
认证要求:无需认证,公开接口
响应格式
{
"code": 0,
"msg": "ok",
"data": {
"list": [
{
"id": 5,
"ann_type": "normal",
"title": "严禁违规业务",
"content": "本支付系统严禁违规业务...",
"is_enabled": 1,
"created_at": "2026-04-11 07:01:48",
"updated_at": "2026-04-11 07:01:48"
}
]
}
}字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| list | 数组 | 公告列表 |
| list[].id | 整数 | 公告ID |
| list[].ann_type | 字符串 | 公告类型 |
| list[].title | 字符串 | 公告标题 |
| list[].content | 字符串 | 公告内容 |
| list[].is_enabled | 整数 | 是否启用 |
| list[].created_at | 字符串 | 创建时间 |
| list[].updated_at | 字符串 | 更新时间 |
六、登录验证码接口
接口路径:/api/auth/login-captcha
请求方式:GET
认证要求:无需认证,公开接口
响应格式
{
"code": 0,
"msg": "ok",
"data": {
"captcha_id": "63a0bd8fdb3b27d7",
"captcha_svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" ...>",
"prompt": "请按顺序点击:石 → 树 → 火"
}
}字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| captcha_id | 字符串 | 验证码会话ID,用于后续验证 |
| captcha_svg | 字符串 | SVG格式的验证码图片 |
| prompt | 字符串 | 用户需要点击的汉字顺序提示 |
七、发送邮箱验证码接口
接口路径:/api/auth/email-code
请求方式:POST
认证要求:无需认证,公开接口
请求格式
{
"email": "test@example.com",
"purpose": "register"
}字段说明
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 字符串 | 是 | 邮箱地址 | |
| purpose | 字符串 | 是 | 用途,如 "register" |
响应格式
{
"code": 0,
"msg": "ok",
"data": null
}八、用户登录接口
接口路径:/api/auth/login
请求方式:POST
认证要求:无需认证,公开接口
请求格式
{
"email": "3295564195@qq.com",
"password": "123456",
"captcha_id": "3e702cf04dc14487",
"captcha_points": [[100, 50], [150, 75], [200, 100]]
}字段说明
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 字符串 | 是 | 账号或邮箱 | |
| password | 字符串 | 是 | 登录密码 |
| captcha_id | 字符串 | 是 | 验证码会话ID |
| captcha_points | 数组 | 是 | 验证码点击坐标数组,每个元素为 [x, y] |
响应格式(成功)
{
"code": 0,
"msg": "ok",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user_id": 2,
"username": "m_0e23d3b4bf",
"role": "merchant"
}
}响应格式(失败)
{
"code": 1,
"msg": "验证码错误",
"data": null
}字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| token | 字符串 | JWT认证令牌 |
| user_id | 整数 | 用户ID |
| username | 字符串 | 用户名 |
| role | 字符串 | 用户角色 |
九、用户注册接口
接口路径:/api/auth/merchant/register
请求方式:POST
认证要求:无需认证,公开接口
请求格式
{
"username": "",
"password": "test123456",
"email": "newtestuser@example.com",
"email_code": "123456",
"mobile": ""
}字段说明
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| username | 字符串 | 否 | 用户名,选填 |
| password | 字符串 | 是 | 登录密码,至少6位字符 |
| 字符串 | 是 | 邮箱地址 | |
| email_code | 字符串 | 是 | 邮箱验证码,6位数字 |
| mobile | 字符串 | 否 | 手机号,选填 |
响应格式(成功)
{
"code": 0,
"msg": "ok",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user_id": 3,
"username": "newtestuser",
"role": "merchant"
}
}响应格式(失败)
{
"code": 1,
"msg": "邮箱验证码错误或已过期",
"data": null
}字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| token | 字符串 | JWT认证令牌 |
| user_id | 整数 | 用户ID |
| username | 字符串 | 用户名 |
| role | 字符串 | 用户角色 |
十、创建测试订单接口(首页测试支付)
接口路径:/api/pay/public-test
请求方式:POST
认证要求:无需认证,公开接口
请求格式
{
"pay_type": "alipay",
"amount": 1
}字段说明
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pay_type | 字符串 | 是 | 支付类型:alipay/wxpay/qqpay/usdt |
| amount | 浮点数 | 是 | 订单金额 |
响应格式
{
"code": 0,
"msg": "ok",
"data": {
"trade_no": "T202605181901479191997b",
"cashier_url": "/cashier/T202605181901479191997b",
"channel": "alipay",
"amount": 1.06
}
}字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| trade_no | 字符串 | 平台订单号 |
| cashier_url | 字符串 | 收银台跳转路径 |
| channel | 字符串 | 支付渠道 |
| amount | 浮点数 | 订单金额(含手续费) |
使用流程
- 前端调用此接口创建测试订单
- 获取返回的
cashier_url - 跳转到收银台页面
十一、收银台详情接口
接口路径:/api/pay/cashier/{trade_no}
请求方式:GET
认证要求:无需认证,公开接口
响应格式
{
"code": 0,
"msg": "ok",
"data": {
"trade_no": "T202605181855419a3a67da",
"out_trade_no": "PUBT1779101741189",
"amount": 1.02,
"subject": "首页测试支付",
"qrcode_url": "https://qr.alipay.com/bax02997ybchsc0eqaer254c",
"pay_url": "https://qr.alipay.com/bax02997ybchsc0eqaer254c",
"status": 0,
"expire_at": "2026-05-18 19:00:41",
"channel_code": "alipay_face",
"channel_id": 3,
"cashier_template": "template2"
}
}字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| trade_no | 字符串 | 平台订单号 |
| out_trade_no | 字符串 | 商户订单号 |
| amount | 浮点数 | 订单金额 |
| subject | 字符串 | 订单标题 |
| qrcode_url | 字符串 | 支付二维码URL |
| pay_url | 字符串 | 支付链接 |
| status | 整数 | 支付状态,0=待支付 |
| expire_at | 字符串 | 订单过期时间 |
| channel_code | 字符串 | 渠道代码 |
| channel_id | 整数 | 渠道ID |
| cashier_template | 字符串 | 收银台模板 |
十二、查询支付结果接口
接口路径:/api/pay/result?trade_no={trade_no}
请求方式:GET
认证要求:无需认证,公开接口
响应格式
{
"code": 0,
"msg": "ok",
"data": {
"trade_no": "T202605181901037e5c56e8",
"out_trade_no": "PUBT1779102063401",
"amount": 1.05,
"original_amount": 1,
"notify_money": 1,
"notify_status": 0,
"status": 0,
"return_redirect_url": ""
}
}字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| trade_no | 字符串 | 平台订单号 |
| out_trade_no | 字符串 | 商户订单号 |
| amount | 浮点数 | 实际支付金额 |
| original_amount | 浮点数 | 原始订单金额 |
| notify_money | 浮点数 | 通知金额 |
| notify_status | 整数 | 通知状态 |
| status | 整数 | 支付状态:0=待支付,1=已支付 |
| return_redirect_url | 字符串 | 跳转URL |
状态说明
| 状态值 | 说明 |
|---|---|
| 0 | 待支付 |
| 1 | 已支付 |
| 2 | 已退款 |
| 3 | 已取消 |
十三、商户侧接口(需商户认证)
12.1 挂机心跳接口
接口路径:/api/merchant/channels/heartbeat
请求方式:POST
认证要求:需要签名认证
签名规则:sign = MD5(key + pid + join(sorted(channel_ids), ",") + timestamp)
请求格式:
{
"pid": "10001",
"channel_ids": [12, 18, 25],
"client": "wechat_app_android",
"timestamp": 1712475600,
"sign": "md5(...)"
}12.2 APP/PC 支付回调接口
接口路径:/api/pay/app/callback
请求方式:POST
认证要求:需要签名认证
签名规则:sign = MD5(key + pid + channel_id + amount + timestamp)
请求格式:
{
"pid": "10001",
"channel_id": 12,
"amount": 10.00,
"timestamp": 1712475600,
"sign": "md5(...)"
}12.3 页面跳转支付接口
接口路径:/submit.php
请求方式:POST
认证要求:无需认证
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pid | 字符串 | 是 | 商户PID |
| type | 字符串 | 是 | 支付类型:alipay/wxpay/qqpay/usdt |
| out_trade_no | 字符串 | 是 | 商户订单号 |
| total_fee | 浮点数 | 是 | 订单金额 |
| notify_url | 字符串 | 是 | 异步通知地址 |
| return_url | 字符串 | 否 | 页面跳转地址 |
| sign | 字符串 | 是 | 签名 |
| subject | 字符串 | 否 | 订单标题 |
12.4 API返回支付信息接口
接口路径:/mapi.php
请求方式:POST
认证要求:无需认证
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pid | 字符串 | 是 | 商户PID |
| type | 字符串 | 是 | 支付类型 |
| out_trade_no | 字符串 | 是 | 商户订单号 |
| total_fee | 浮点数 | 是 | 订单金额 |
| notify_url | 字符串 | 是 | 异步通知地址 |
| sign | 字符串 | 是 | 签名 |
| subject | 字符串 | 否 | 订单标题 |
响应格式:
{
"code": 0,
"msg": "ok",
"data": {
"trade_no": "T202604111234567890",
"qrcode": "https://qr.alipay.com/xxx",
"pay_url": "https://qr.alipay.com/xxx",
"amount": 10.00,
"expire_at": "2026-04-11 12:00:00"
}
}12.5 订单查询接口
接口路径:/api.php?act=query
请求方式:GET
认证要求:无需认证
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pid | 字符串 | 是 | 商户PID |
| out_trade_no | 字符串 | 是 | 商户订单号 |
| sign | 字符串 | 是 | 签名 |
响应格式:
{
"code": 0,
"msg": "ok",
"data": {
"trade_no": "T202604111234567890",
"out_trade_no": "ORDER123456",
"status": 1,
"amount": 10.00,
"channel": "alipay",
"created_at": "2026-04-11 10:00:00",
"pay_time": "2026-04-11 10:05:00"
}
}状态说明:
| 状态值 | 说明 |
|---|---|
| 0 | 待支付 |
| 1 | 已支付 |
| 2 | 已退款 |
| 3 | 已取消 |
12.6 异步通知接口(Webhook)
当支付完成后,平台会向商户的 notify_url 发送POST请求通知商户。
请求方式:POST
认证要求:根据商户配置的密钥进行签名验证
请求格式:
{
"trade_no": "T202604111234567890",
"out_trade_no": "ORDER123456",
"status": 1,
"amount": 10.00,
"channel": "alipay",
"pay_time": "2026-04-11 10:05:00",
"sign": "md5(...)"
}字段说明:
| 字段名 | 类型 | 说明 |
|---|---|---|
| trade_no | 字符串 | 平台订单号 |
| out_trade_no | 字符串 | 商户订单号 |
| status | 整数 | 支付状态:1=成功 |
| amount | 浮点数 | 支付金额 |
| channel | 字符串 | 支付渠道 |
| pay_time | 字符串 | 支付时间 |
| sign | 字符串 | 签名,用于验证 |
响应要求:商户收到通知后返回 "success" 表示成功接收。
技术变更记录
| 版本 | 日期 | 变更说明 |
|---|---|---|
| v1.4 | 2026-05-18 | 新增用户注册接口 /api/auth/merchant/register |
| v1.3 | 2026-05-18 | 新增测试支付创建订单接口、登录接口、查询支付结果接口 |
| v1.2 | 2026-05-18 | 新增测试支付收银台接口、发送邮箱验证码接口 |
| v1.1 | 2026-05-18 | 新增公告接口和登录验证码接口 |
| v1.0 | 2026-05-18 | 初始版本,记录首页公开接口和商户接口 |
文档版本:v1.4
最后更新:2026-05-18
[...]你需要完成这些页面的书写并且路由地址需要与默认页面保持一致如果有新增页面可以自定义路由地址部分接口文档: https://boke.ljwx.love/index.php/archives/501/ 写好模板后,需要打包为一个index.html文件,并且附带js,css等静态资源文件夹不允许出现源码.vue文件我会将你打包后的模板嵌入go项目二进制源码当中,用户无法篡改。你可以自写收费授权逻辑,[...]