API-联调文档-2026-07-06.md 7.8 KB

智价云小程序后端 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() 后调用,自动处理新老用户四种场景。

请求:

{
  "jsCode": "wx.login()返回的code",
  "phoneCode": "getPhoneNumber返回的code(可选)",
  "inviteCode": "邀请码(可选)"
}

响应:

{
  "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

请求:

{
  "tempToken": "1.1 返回的tempToken",
  "phoneCode": "getPhoneNumber按钮返回的code",
  "inviteCode": "邀请码(可选)"
}

响应:同 1.1,needBindPhone=false,含正式 token。


1.3 独立注册(填写药店信息)

POST /api/auth/register

说明:1.1 返回 newUser=trueneedBindPhone 完成后跳转注册页,填写药店信息提交。

请求:

{
  "tempToken": "登录时返回的tempToken",
  "pharmacyName": "康宁大药房",
  "province": "广东省",
  "city": "广州市",
  "district": "天河区",
  "inviteCode": "PX8K2M(可选)"
}

响应:同 1.1,含正式 token,userInfo.pharmacyName 已填充。


1.4 Token 刷新

POST /api/auth/refresh

请求:

{ "refreshToken": "eyJ..." }

响应:同 1.1 格式(不含 userInfo)。


1.5 心跳保活

POST /api/auth/heartbeat

Header:Authorization: Bearer {accessToken}(无 body)

响应:

{
  "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

响应:

{
  "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

响应:

{
  "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[]

{
  "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
{
  "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
{
  "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}
{
  "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

响应:

{
  "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 逻辑