开放平台常见问题

2026-09

常见问题 FAQ

按主题分组,全部回答对应当前线上实现;每条附相关文档章节,点开即查。

凭证与安全

Q1怎么拿到 vendor_idhmac_key

由平台统一配置后线下下发,一对凭证按业务线授权(房源 / 本地生活 / 搬家),无需分别申请。

商家须为启用状态;数据可见范围与凭证一一对应,只能操作自己名下的房源与商品。

Q2密钥丢了 / 疑似泄露怎么办?

联系平台重置密钥(旧密钥立即失效)。重置后所有在跑任务都要换新密钥重签。

密钥等同密码:只放服务端或自己的联调机;不要写进前端代码、不要提交仓库、不要在群里发。文档与页面(含调试台)都不会展示平台侧存储的真实密钥。

Q3调试台会不会把我的密钥传到别处?

不会。调试台签名在你的浏览器本地完成(内置与平台一致的 HMAC-SHA256 实现),请求只发往你在 Base 里填的地址。勾选「记住」时密钥存本机 localStorage,换机/清缓存即失效。

签名与 401

Q4返回 401「缺失签名(sign)或时间戳(timestamp)参数」

signtimestamp 必须放在 JSON body 里(不是 HTTP header),与业务参数一起发送。用调试台跑一次对照请求体即可定位。

Q5返回 401「请求已过期」

服务器校验 timestamp 与当前时间的偏差(窗口 ±5 分钟)。常见原因:服务器时钟不准;或把同一次签名复用超过 5 分钟——重试必须重新签名。

Q6返回 401「签名校验失败」,但算法看起来没问题

按命中率排查:

  1. 数组序列化:签名时数组用单引号形式 tags=['旅居', '近地铁'],不是 JSON 的双引号;
  2. 空值不参与null'' 的键在签名时跳过,但 body 里可以带;
  3. 嵌套对象:按 父键.子键 点号展平(如 units 数组里的对象)——直接把最终 body 交给签名函数,不要手工拼串;
  4. 布尔true→'True'false→'False'
  5. UTF-8:中文按 UTF-8 字节参与 HMAC;
  6. 密钥:确认用的是本 vendor_id 对应的最新 hmac_key(重置后旧钥匙立即失效)。

最快定位法:打开在线调试台发同一个请求,对比它显示的 stringToSign 与你自己拼的串,第一个不一致的字符就是问题点。

Q7「vendor_id=… 的密钥未配置」

body 里的 vendor_id 在平台侧没有对应密钥:核对是否发错环境(演示 vs 生产)、或商家尚未开通。平台侧核对密钥是否已配置或已被重置。

房源接入与上下架

Q8房源创建成功为什么 C 端看不到?

创建默认 status='draft'(草稿),C 端目录只展示 online。上架路径:projects/updateprice_from + units/create 至少 1 个户型 → projects/statusonline。缺价或缺户型时上架接口直接 400 提示。

Q9上架成功了,C 端多久能看到?下架呢?

C 端目录 GET /api/juzhu/catalog 有 ≤ 15 秒缓存,上架最迟 15 秒可见、下架最迟 15 秒消失。联调判断可见性请轮询等待,不要立即断言(平台回归脚本就是这么做的)。

Q10channel / city_id 能改吗?

channel(业务频道)与 city_id(城市)创建后不可改——接口会明确拒绝。城市挂错请下架后新建房源;district_id(行政区)可以改,但须属于该城市。

Q11返回 404「房源不存在或不属于该商家」,但房源明明存在?

这是归属隔离:接口只命中你自己名下的房源。「不存在」和「别人的」统一返回 404,避免探测他人房源。先用 projects/list 确认 id 在自己名下。

Q12为什么查询接口不回显 contact_phone

真实电话只入库,用于 C 端拨号时服务端实时绑定虚拟号;任何列表/详情接口都不回显,防爬取与泄露。创建/更新接口可以提交它(须 11 位手机号),但读回来永远看不到。

Q13客户下了单,商家怎么接单?

两条路:① Webhook 事件推送(推荐)——在接入单里提供通知 URL,客户下单 / 支付 / 取消时平台主动推 HMAC 签名事件(booking.created / booking.paid / booking.cancelled),收到先验签(同一套算法)再处理,5s 内回 2xx 即送达,失败自动重试 3 次;② 拉取兜底——bookings/list 定时拉 status='pending' 对账(建议每分钟)。拿到订单后 bookings/confirm 确认或 bookings/cancel 拒单(拒单自动释放房态);民宿民宿预付单未支付时确认会被拒。联系人手机号只回掩码。

订单详情见 房源接入 API §5 订单履约,可用页内调试台直接试。

Q14slug 冲突(重名房源)怎么处理?

不传 slug 时平台按名称自动生成并在同频道内保证唯一(冲突自动加 -2/-3… 后缀);传了自定义 slug 也一样做唯一化,无需自己处理。

房态 · 连住 · 保险

Q14房态返回 400「以下日期已有预订占用」

这些晚已被订单占用(booked),任何接口都不能改成可订/关房——须先走订单取消;取消后平台自动释放房态。这是防超卖的硬约束,商家侧与开放接口同口径。

Q14没设置过的日期是什么房态?夜价优先级?

未设置过的晚默认可订。夜价优先级:户型级覆盖 > 项目级覆盖 > 默认夜价(rental=月租/30 折算,minsu=units.ext.price_night 或起价)。「恢复默认价」= 传 status:'open' 且不带 price_night,平台清除该晚价格覆盖。

Q14最短连住是多少?在哪生效?

缺省口径:rental=15 晚(旅居/长租)、minsu=1 晚;商家可用 ext.min_stay_nights(1–365)按房源覆盖。同一口径在 C 端日历选段、下单页、平台下单接口三处校验,不足直接 400,改口径只需改服务端常量或该字段,不需要改页面。

Q14保险标识有哪些?传错了会怎样?

仅三个平台统一枚举:switch_rental 换租保险、hotel_cancel 酒店取消险、property 财产保险。传未知 key 返回 400 并列出可用枚举;清空传 []。配置后随 catalog / 详情 / 房态日历下发 C 端展示(含名称与图标)。

家政 / 本地生活

Q14家政商品的价格单位是什么?

商家开放接口一律「分」(如 29900 = 299 元),平台在接口边界做分↔元换算入库;房源接口则用「元」(rent_monthly 元/月、price_night 元/晚)。两条业务线单位不同,别混。

Q14家政商品下架和房源下架有什么区别?

家政商品 products/statuson / off / sold_outdelete 接口实际是把状态置 off);房源 projects/statusonline / offline / draft。语义各自独立,别把房源的状态值传给家政接口。

Q14开放接口支持别的鉴权方式吗(token / 账号密码)?

不支持。开放接口统一只接受 HMAC-SHA256 签名vendor_id + timestamp + sign 放在请求体里),按商家隔离数据,没有 token / 账号密码等替代方式。这也是唯一需要对接的鉴权机制。

环境 · 工具 · 数据

Q14有没有现成的自检脚本?
node scripts/housing_vendor_hmac_regression.cjs [base_url]   # 房源全生命周期(创建→上架→房态→下架→越权)
node scripts/vendor_hmac_regression.cjs                      # 家政开放接口

脚本走真实 HTTP 签名链路并自动清理演示数据;自检签名实现是否正确,跑通它即可。

Q14演示环境和生产的差别?

接口与签名完全一致,仅 Base 不同。演示环境(本页同源 sytest.meizu.life)数据可随时清理重建,用测试商家练手;生产 Base 以平台接入单为准。

Q14怎么提问题最快?

接入群报四样:vendor_id、接口路径、请求里的 timestamp、返回的 message 与 HTTP 状态码。不要发 hmac_key,也不要发完整业务数据截图。

没有找到答案?回到开放平台门户查看完整文档与手册,或联系平台接入群(报障口径见 Q14)。