微信客服设置
小程序端通过 uni.openCustomerServiceChat 打开企业微信客服,需绑同主体的 corpId 与客服链接。
启用「点击按钮跳转微信客服」总开关
首页打开小程序自动跳转客服
界面按钮 · 跳转微信客服
开关打开后,小程序端点击该按钮直接打开微信客服;关闭时不跳转客服,按钮走小程序原本的动作。
功能页工具 · 跳转微信客服
开关打开后,小程序端点击该功能方块不进入工具页面,而是直接打开微信客服;关闭时不跳转客服,正常进入工具。预置清单来自小程序功能页,可增删。
-
小程序用户
-
期望功能
-
BUG 反馈
-
待回复
反馈列表
小程序「期望功能 / BUG 反馈」提交的记录;回复后小程序端反馈记录会显示回复内容。
| 类型 | 内容 | 用户 | 时间 | 回复 | 操作 |
|---|
注册用户
小程序端「皮皮号」注册的用户;删除将同时清除其登录态与反馈记录。
| ID | 昵称 | 皮皮号 | 手机号 | 平台 | 最近登录 |
|---|
修改管理员密码
修改成功后将退出登录,需使用新密码重新登录。
全局约定
小程序端 luch-request (xhttp) 与本后端的交互约定;管理端请看页面底部「管理端接口」。
BASE
http://localhost:3000
即 uniapp/main.js 的
baseURL(上线改回 https://ppgjx.com)
| 请求格式 | application/x-www-form-urlencoded(小程序统一使用),管理端使用 JSON,两种后端都支持 |
| 响应结构 | { "code": 0, "message": "ok", "data": ... },HTTP 状态恒为 200 |
| 登录态 | 小程序在 App.vue 启动拦截器统一注入自定义请求头:token(登录会话)与 uid(用户 id),另带 platform / version / cid |
| code 含义 | 0 成功 1 业务错误(拦截器弹出 message) 4 登录失效(小程序自动清登录态并跳转「我」页) 2 管理端未登录 |
小程序端 · 用户账号
POST/user/user/v1/register注册皮皮号
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 昵称,≤7 个字 |
account | string | 是 | 皮皮号,3-15 位字母数字,唯一 |
password | string | 是 | 4-20 位字母数字 |
成功 { "code": 0 } 失败示例 { "code": 1, "message": "皮皮号已被注册" }
POST/user/user/v1/login登录,返回的 data 存入 storage『user』
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
account / password | string | 是 | 皮皮号 + 密码 |
platform | string | 否 | devtools / ios / android |
pushStatus | 0/1 | 否 | 推送授权状态 |
{ "code": 0, "data": { "user_id": 1, "name": "测试用户", "account": "test123", "phone": null, "icon": "", "token": "a3f..." } }
POST/user/user/v1/quit退出登录,销毁当前会话需登录
{ "code": 0 }POST/user/user/v1/updatePassword修改密码,成功后全端强制重新登录需登录
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
password | string | 是 | 原密码 |
newPassword | string | 是 | 新密码,4-20 位字母数字 |
成功 { "code": 0, "message": "密码已修改, 请重新登录" }
失败 { "code": 1, "message": "原密码错误" }
POST/user/user/v1/pushApp.vue onShow 自动上报推送状态 / cid需登录
pushStatus | 0/1 | 是 | cid 由拦截器请求头自动带上 |
POST/user/user/v1/sendSms发送短信验证码
phone | string | 是 | 11 位手机号,本地联调时验证码打印在服务器控制台,5 分钟有效 |
POST/user/user/v1/phone绑定手机号,成功返回最新 user 对象需登录
phone / code | string | 是 | 手机号与验证码(sendSms 获得并在服务端日志查看) |
{ "code": 0, "data": { "user_id": 1, "...": "同登录返回, phone 已填" } }
小程序端 · 期望功能 / BUG 反馈
POST/user/feedback/v1/issue提交反馈(pages/index/function 与 feedback 共用)需登录
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
issue | string | 是 | 反馈内容,≤1000 字 |
type | 0 | 1 | 是 | 0 期望功能,1 BUG 反馈 |
platform | string | 否 | 提交时平台 |
{ "code": 0, "message": "提交成功, 感谢您的反馈!" }
POST/user/feedback/v1/query查询「我」的反馈记录(待回复的排在最前)需登录
type | 0 | 1 | 是 | 0 期望功能 / 1 BUG 反馈 |
{ "code": 0, "data": [ { "issue": "手电筒…", "reply": null, "create_time": "2026-11-01 11:02" },
{ "issue": "word 转 pdf…", "reply": "收到! 已排期", "create_time": "2026-11-01 11:02" } ] }
小程序端 · 启动对接
POST/functions/index/init启动时拉取远程工具列表(本地返回空数组,沿用内置列表)
{ "code": 0, "data": [] }GET/api/kefu/config公开只读;启动拉取客服配置(utils/kefu.js 的 KEFU_BASE + 此路径)
{ "code": 0, "data": { "enabled": 0, "corp_id": "", "kefu_url": "",
"auto_jump": 0, "auto_jump_mode": "every",
"buttons": [ { "key": "index_fab", "name": "首页-客服悬浮按钮", "kind": "button", "open_service": 0 },
{ "key": "qrcode", "name": "二维码", "kind": "tool", "open_service": 0 }, … ] } }
// kind=button 界面按钮;kind=tool 功能页方块,key 对应 /pages/functions/<key>/... 的目录名小程序端 · 广告观看(真实实现,含排行榜)
POST/user/ad/get播放广告前的次数检查(pages/index/my.vue)需登录
{ "code": 0, "data": { "count": 3 } }POST/user/ad/addCount观看倒计时结束后累计观看次数 +1(pages/index/adList.vue)需登录
{ "code": 0 }POST/user/ad/getad广告位横幅列表(元素需 img/url 字段;本地无投放素材返回空数组)
{ "code": 0, "data": [] }
投放后 { "code": 0, "data": [ { "img": "https://…banner.png", "url": "https://…" } ] }POST/user/ad/ranking观看次数排行榜(pages/index/ranking.vue,按 ad_count 倒序取前 50)需登录
offset | INTEGER | 否 | 已加载条数(传 0 / 空 = 重新加载第一页) |
{ "code": 0, "data": { "list": [ { "name": "测试用户", "sum": 6 }, … ], "mySum": 3 } }
功能桩接口(依赖三方服务,返回明确提示而非网络错误)
本地后端以 code 1 + 中文提示 兜底,小程序端拦截器会把 message 弹给用户;接入对应服务后替换实现即可
| 路径 | 对应页面 | 依赖 | 本地返回 |
|---|---|---|---|
POST /functions/ExpressCheck/query | 快递查询 | 第三方物流 API | code 1 暂不支持快递查询 |
POST /functions/WipeWatermark/exec | 视频提取(去水印) | 第三方解析 API | code 1 暂不支持视频提取 |
POST /functions/ChatRoom/apply · /banned | 聊天室 | WebSocket 服务 | code 1 需完整服务端环境 |
POST /index/index/update | APP 版本检查(真机) | — | code 0, data null → 不弹更新框 |
管理端接口(Bearer token,与客服配置接口同一套鉴权)
方法 / 路径 / 说明
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/admin/login | 登录 |
| POST | /api/admin/logout | 退出登录 |
| PUT | /api/admin/password | 修改管理员密码 |
| GET PUT | /api/admin/kefu/config | 读 / 存客服配置 |
| POST GET PUT DELETE | /api/admin/kefu/buttons | 按钮配置管理(:id 操作) |
| GET | /api/admin/stats | 统计:users / ideas / bugs / pending |
| GET DELETE | /api/admin/users | 用户列表 / 删除用户(连带其反馈与登录态) |
| GET | /api/admin/feedback | 反馈列表,支持 ?type=0/1 与 ?status=0/1 |
| PUT DELETE | /api/admin/feedback/:id | 回复(/reply)与删除反馈 |
| GET | /api/kefu/config | 小程序公开接口(无需鉴权) |
对接注意事项
1. 修改
2. 本地为 HTTP,微信开发者工具需勾选「详情 → 本地设置 → 不校验合法域名」(manifest 已设
3. 上小程序前把后端域名加入小程序后台 request 合法域名并切换为 HTTPS 线上地址。
4. 短信验证码为本地联调版本,验证码打印在服务器控制台,真实短信请自行接入服务商。
5. 全部接口返回 HTTP 200,未实现的接口由兜底路由返回
uniapp/main.js 的 baseURL 与 domain,以及 uniapp/utils/kefu.js 的 KEFU_BASE,三处一起切换本地 / 线上后端(domain 用于 App 真机版本检查)。2. 本地为 HTTP,微信开发者工具需勾选「详情 → 本地设置 → 不校验合法域名」(manifest 已设
urlCheck:false)。3. 上小程序前把后端域名加入小程序后台 request 合法域名并切换为 HTTPS 线上地址。
4. 短信验证码为本地联调版本,验证码打印在服务器控制台,真实短信请自行接入服务商。
5. 全部接口返回 HTTP 200,未实现的接口由兜底路由返回
{code:1},小程序端不会弹「网络错误」。