# 智价云小程序后端 API 联调文档 > 生成日期:2026-07-06 > Base URL:`http://localhost:8004`(开发)/ `https://api.proprice.kailin.com.cn`(生产) > 认证方式:`Authorization: Bearer {accessToken}`(标注"公开"的除外) --- ## 1. 认证接口 ### 1.1 小程序登录 ``` POST /api/auth/wechat/miniapp/login ``` **说明**:微信小程序 `wx.login()` 后调用,自动处理新老用户四种场景。 请求: ```json { "jsCode": "wx.login()返回的code", "phoneCode": "getPhoneNumber返回的code(可选)", "inviteCode": "邀请码(可选)" } ``` 响应: ```json { "code": 200, "data": { "userId": "2070346651500961794", "accessToken": "eyJ...", "refreshToken": "eyJ...", "expiresIn": 3600, "newUser": false, "needBindPhone": false, "role": "USER", "userInfo": { "id": "2070346651500961794", "phone": "138****1234", "nickname": "药店用户", "avatar": null, "pharmacyName": null, "province": null, "city": null, "district": null, "wechatBound": true, "loginSource": "MINIAPP", "membershipLevel": "PLUS", "membershipLevelName": "普通会员", "createTime": "2026-07-06T12:00:00" } } } ``` `needBindPhone=true` 时:前端引导用户点击 `getPhoneNumber` 按钮,拿到 `phoneCode` 后调用 1.2。 --- ### 1.2 小程序绑定手机号 ``` POST /api/auth/wechat/miniapp/bind-phone ``` 请求: ```json { "tempToken": "1.1 返回的tempToken", "phoneCode": "getPhoneNumber按钮返回的code", "inviteCode": "邀请码(可选)" } ``` 响应:同 1.1,`needBindPhone=false`,含正式 token。 --- ### 1.3 独立注册(填写药店信息) ``` POST /api/auth/register ``` **说明**:1.1 返回 `newUser=true` 或 `needBindPhone` 完成后跳转注册页,填写药店信息提交。 请求: ```json { "tempToken": "登录时返回的tempToken", "pharmacyName": "康宁大药房", "province": "广东省", "city": "广州市", "district": "天河区", "inviteCode": "PX8K2M(可选)" } ``` 响应:同 1.1,含正式 token,`userInfo.pharmacyName` 已填充。 --- ### 1.4 Token 刷新 ``` POST /api/auth/refresh ``` 请求: ```json { "refreshToken": "eyJ..." } ``` 响应:同 1.1 格式(不含 userInfo)。 --- ### 1.5 心跳保活 ``` POST /api/auth/heartbeat ``` Header:`Authorization: Bearer {accessToken}`(无 body) 响应: ```json { "code": 200, "data": { "userId": "2070346651500961794", "accessToken": "eyJ...(新)", "refreshToken": "eyJ...(新)", "expiresIn": 3600, "role": "USER" } } ``` > 建议间隔 = accessToken 有效期的 80%(约 48 分钟),过期 token 也可调用。 --- ### 1.6 登出 ``` POST /api/auth/logout ``` Header:`Authorization: Bearer {accessToken}`(无 body) 响应:`{"code": 200, "message": "操作成功"}` --- ## 2. 用户信息接口 ### 2.1 用户信息(旧接口,PC 端用,不变) ``` GET /api/auth/user/info ``` 响应:与 1.1 `userInfo` 一致。 --- ### 2.2 聚合用户信息(小程序"我的"页面) ``` GET /api/auth/user/me ``` 响应: ```json { "code": 200, "data": { "id": "2070346651500961794", "phone": "138****1234", "nickname": "药店用户", "pharmacyName": "康宁大药房", "province": "广东省", "city": "广州市", "district": "天河区", "membershipLevel": "PLUS", "membershipLevelName": "普通会员", "gate": { "canQueryOnDesktop": false, "licenseStatus": "PENDING", "platformBoundCount": 1, "gateMessages": ["请先上传营业执照并通过审核"] }, "quota": { "dailyQueryUsed": 8, "dailyQueryLimit": 20 }, "platformBindings": [ { "platformCode": "yaobangmang", "platformName": "药帮忙", "status": "bound", "lastVerifyTime": "2026-06-27T10:00:00" } ] } } ``` --- ### 2.3 首页概览 ``` GET /api/auth/user/dashboard ``` 响应: ```json { "code": 200, "data": { "todayQueryCount": 8, "todayPurchaseIntentCount": 0, "totalQueryCount": 156, "recentQueries": [ { "drugName": "阿莫西林胶囊", "searchedAt": "2026-07-06T14:00:00", "lowestPrice": "有报价" } ] } } ``` --- ## 3. 查询历史 ### 3.1 历史列表 ``` GET /api/search/records?page=1&pageSize=20 ``` ### 3.2 历史详情 ``` GET /api/search/records/{id} ``` --- ## 4. 跳转购买记录 ### 4.1 列表 ``` GET /api/purchase-intents?page=1&pageSize=20 ``` 响应 `data.records[]`: ```json { "id": "123456", "userId": "2070346651500961794", "queryId": "789", "drugName": "阿莫西林胶囊", "spec": "0.25g×24粒", "manufacturer": "石药集团", "platformCode": "yaobangmang", "platformName": "药帮忙", "referencePrice": 8.50, "sourceClient": "WINDOWS", "clickedAt": "2026-07-06T14:35:00" } ``` ### 4.2 详情 ``` GET /api/purchase-intents/{id} ``` ### 4.3 写入(桌面端调用) ``` POST /api/purchase-intents ``` ```json { "queryId": "789", "drugName": "阿莫西林胶囊", "spec": "0.25g×24粒", "manufacturer": "石药集团", "platformCode": "yaobangmang", "platformName": "药帮忙", "referencePrice": 8.50, "externalUrl": "https://...", "sourceClient": "WINDOWS" } ``` --- ## 5. 采购台账 ### 5.1 列表 ``` GET /api/procurement-ledgers?page=1&pageSize=20 ``` ### 5.2 创建 ``` POST /api/procurement-ledgers ``` ```json { "intentId": "123456(可选)", "queryId": "789(可选)", "drugName": "阿莫西林胶囊", "spec": "0.25g×24粒", "qty": 10, "unitPrice": 8.50, "total": 85.00, "platform": "药帮忙", "orderNote": "6月补货", "status": "ordered" } ``` ### 5.3 更新 ``` PATCH /api/procurement-ledgers/{id} ``` ```json { "status": "received", "qty": 10, "unitPrice": 8.50, "total": 85.00, "orderNote": "已到货" } ``` ### 5.4 删除 ``` DELETE /api/procurement-ledgers/{id} ``` --- ## 6. 内容接口(公开) ### 6.1 帮助 FAQ ``` GET /api/content/help ``` ### 6.2 桌面下载链接 ``` GET /api/content/download ``` 响应: ```json { "code": 200, "data": { "windowsUrl": "https://proprice.kailin.com.cn/download/windows", "officialSiteUrl": "https://proprice.kailin.com.cn", "version": "1.0.0", "releaseNotes": "1.0.0 版本发布" } } ``` --- ## 7. 已有接口(不变,仅列路径) | 接口 | 路径 | |------|------| | 发送验证码 | `POST /api/auth/sms/send` | | 验证码登录 | `POST /api/auth/sms/login` | | 密码登录 | `POST /api/auth/password/login` | | 微信扫码登录(PC) | `POST /api/auth/wechat/login` | | 绑定微信手机号 | `POST /api/auth/wechat/bind` | | 设置密码 | `POST /api/auth/password/set` | | 修改手机号 | `POST /api/auth/phone/change` | | 营业执照上传 | `POST /api/business-license/upload-file` | | 营业执照查询 | `GET /api/business-license/info` | | 平台列表 | `GET /api/platform-account/list` | | 绑定平台 | `POST /api/platform-account/bind` | | 解绑平台 | `DELETE /api/platform-account/unbind/{platformCode}` | | 验证平台 | `POST /api/platform-account/verify/{platformCode}` | | 会员套餐 | `GET /api/payment/plans` | | 创建订单 | `POST /api/payment/orders` | | 订单状态 | `GET /api/payment/orders/{orderNo}` | | 邀请统计 | `GET /api/invite/stats` | | 优惠券核销 | `POST /api/coupons/redeem` | --- ## 8. Token 设备策略说明 | 端 | 策略 | 行为 | |----|------|------| | PC(SMS/密码/微信扫码) | `tokenVersion` 精确匹配 | 只能 1 台 PC 在线,新登录踢旧 | | 小程序(微信授权) | `tokenVersion` 范围匹配 `< 2` | 与 PC 共存,不互踢 | | 旧版本 token | 精确匹配(向前兼容) | 无 `loginSource` claim 时走 PC 逻辑 |