| 项 | 说明 |
|---|---|
| 中台 | 联系我方商务或技术开通测试环境 |
| 接口域名 | 以分配的环境为准 |
| 渠道标识 | appId(在我方后台获取) |
| 渠道密钥 | secret(在我方后台获取) |
| 数据格式 | 请求 application/json(POST)或 query 参数(GET);响应 application/json |
| 鉴权方式 | 每个接口必须携带签名参数 appId / timestamp / nonce / sign,服务端 MD5 校验 |
渠道与密钥由平台在后台配置(Channel + ChannelApi(酒店模块)),不会在接口中暴露,请妥善保管 secret,可以向技术要签名生成Java工具类。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
appId | String | 是 | 渠道标识(后台分配的渠道编码) |
timestamp | String | 是 | 请求时间戳,建议毫秒级(当前服务端仅参与签名,不校验有效期) |
nonce | String | 是 | 随机串(防重放标识,建议每次请求随机生成;当前服务端仅参与签名,不校验重复) |
sign | String | 是 | 签名值(见第三节算法) |
⚠️ 四个通用参数必须放 URL query(服务端从 request.getParameter读取 appId/timestamp/nonce/sign)。POST 时 body 里不要重复放这四个参数。
GET /api/hotel/detail?hotelId=10001&checkInDate=2026-09-01&checkOutDate=2026-09-02&adultNum=1&appId=BM_HOTEL_TEST×tamp=1725000000000&nonce=6f2a1c9d&sign=09d10b698cb42db31b4cdf0b700dbd24POST /api/order/create?appId=BM_HOTEL_TEST×tamp=1725000000000&nonce=8b31d4e7&sign=17a4f6cc7b97bf35c4094fbde593bb0c
Content-Type: application/json
{ "channelOrderNo": "CH202609010001", "hotelId": "10001", "roomTypeId": "RM001",
"keyId": "KP001", "checkInDate": "2026-09-01", "checkOutDate": "2026-09-02",
"roomGroups": [{"adultNum":1,"childNum":0}],
"dataList": [{"realName":"张三","idCard":"330100199001011234"}],
"mobile": "13800000000", "memo": "无烟房" }sign(sign 本身不参与签名)。key=value 键值对:| 结构 | 规则 | 示例 |
|---|---|---|
| 顶层字段 | 直接用字段名 | hotelId |
| 嵌套对象 | 父键 + . + 子键 | order.user.name |
| 数组元素 | 父键 + [下标] | dataList[0].realName、roomGroups[0].adultNum |