道旅集团 · CHANNEL MANAGER

Dida ChannelManager 接口文档

接口规范 — 产品拉取 · 推送 · ARI · 订单

接口地址

接口地址https://cm-dataapi.didatravel.com

API认证与安全指南

为了确保API调用的安全性和数据完整性,所有对本API的请求都必须经过严格的认证和签名。请仔细阅读并遵循以下指南。

1. 认证凭证

您需要从我方获取以下两项凭证,用于API认证:

  • ApiKey (API密钥): 一个唯一的字符串,用于识别调用方的身份。
  • ApiSecret (API私钥): 一个保密的字符串,用于对请求进行签名。此私钥绝不能在任何不安全的环境中(如客户端前端代码)暴露或传输。

PS: ApiKey和ApiSecret需要Dida提供。

2. 认证流程概述

所有受保护的API请求都必须同时满足以下两个条件:

  1. 身份识别: 在请求头中提供 ApiKey
  2. 请求签名: 在请求头中提供一个基于请求内容和 ApiSecret 计算出的签名 (X-Signature),以及用于生成该签名的时间戳 (X-Timestamp) 和随机数 (X-Nonce)。

服务器会验证您的身份,并重新计算签名与您提供的签名进行比对。同时,服务器会通过时间戳和随机数来防止请求被重放攻击。

3. HTTP请求头要求

每次请求必须包含以下HTTP头:

Header描述示例值
Authorization(推荐) 用于传递 ApiKey。格式为 ApiKey <Your-ApiKey>ApiKey a1b2c3d4e5f67890
X-API-Key(备选) 如果不方便使用 Authorization 头,可使用此头直接传递 ApiKeya1b2c3d4e5f67890
X-Timestamp当前的 Unix时间戳 (秒)。服务器会拒绝与服务器时间相差超过 300秒 (5分钟) 的请求1678886400
X-Nonce一个仅使用一次的随机字符串。建议使用UUID。服务器会拒绝在5分钟内重复出现的 Noncec3a4b1d2-e5f6-4a7b-8c9d-0e1f2a3b4c5d
X-Signature基于请求内容计算出的HMAC-SHA256签名,使用Base64编码。详见下面的 签名生成算法wS2X.../aBcDeFg=
Content-Type如果请求包含请求体(如POST, PUT),此头必须设置为 application/jsonapplication/json

4. 签名生成算法 (Signature Generation)

签名是保证请求未被篡改的核心。请严格按照以下步骤生成 X-Signature 的值。

步骤 1: 准备待签名字符串 (stringToSign)

将以下五个部分按照顺序拼接成一个字符串,中间没有任何分隔符

stringToSign = timestamp + nonce + requestPath + queryString + requestBody

  • timestamp: X-Timestamp 头的值。
  • nonce: X-Nonce 头的值。
  • requestPath: 请求的路径部分,不包含域名和查询参数。例如,对于URL https://api.example.com/v1/users?page=2requestPath/v1/users
  • queryString: 请求的查询字符串部分,包含 ? 前缀。如果URL没有查询参数,则此部分为空字符串 ""。例如,对于 .../v1/users?page=2&size=10queryString?page=2&size=10
  • requestBody:

步骤 2: 计算HMAC-SHA256签名

使用您的 ApiSecret作为密钥,对步骤1中生成的 stringToSign 进行HMAC-SHA256哈希计算。

步骤 3: Base64编码

步骤2中计算出的二进制哈希结果进行Base64编码,得到最终的签名字符串。

5.常见错误响应

HTTP状态码codemessage可能原因
401 Unauthorized401Missing API Key...请求头中未找到 Authorization: ApiKey ...X-API-Key
400 Bad Request400Missing required headers...缺少 X-Timestamp, X-Nonce, 或 X-Signature 中的一个或多个
401 Unauthorized401Invalid or expired timestamp.X-Timestamp 的值与服务器时间相差超过5分钟。请检查您的服务器时间是否同步
401 Unauthorized401Replayed request detected.使用了重复的 X-Nonce 值。请确保每次请求都生成唯一的Nonce
401 Unauthorized401Invalid API Key...提供的 ApiKey 无效或未在系统中配置
401 Unauthorized401Invalid signature.签名验证失败。最常见的原因是:1. stringToSign 的拼接顺序或内容与规定不符。2. ApiSecret 使用错误。3. 请求体在发送过程中被修改

6.Postman示例demo

// 1. 获取key
const apiKey = pm.environment.get("api_key");
const apiSecret = pm.environment.get("api_secret");

pm.request.headers.upsert({ key: "X-API-Key", value: apiKey });

// 2. 生成时间戳和Nonce
const timestamp = Math.floor(Date.now() / 1000).toString();
const nonce = crypto.randomUUID(); // Postman沙箱内置了crypto对象

// 3. 将Timestamp和Nonce添加到请求头
// Postman会自动处理,即使Headers中已存在同名key,也会使用这里设置的值
pm.request.headers.upsert({ key: "X-Timestamp", value: timestamp });
pm.request.headers.upsert({ key: "X-Nonce", value: nonce });

// 4. 获取请求路径和查询参数
const path = pm.request.url.getPath(); // e.g., /api/data
const query = pm.request.url.getQueryString(); // e.g., ?name=test&id=123

// 5. 安全地获取请求体 (最关键的一步)
let bodyContent = "";
// 检查请求体是否存在,并且模式是'raw' (最常见的情况,如JSON)
if (pm.request.body && pm.request.body.mode === 'raw' && pm.request.body.raw) {
    bodyContent = pm.request.body.raw;
}
// 注意:对于GET, DELETE等没有请求体的请求,bodyContent会保持为空字符串 ""
// 这与我们服务器端的逻辑完全匹配

// 6. 按照与服务器完全相同的顺序,构建待签名字符串
const stringToSign = `${timestamp}${nonce}${path}${query}${bodyContent}`;

// 7. 计算HMAC-SHA256签名
const signature = CryptoJS.HmacSHA256(stringToSign, apiSecret).toString(CryptoJS.enc.Base64);

// 8. 将最终的签名添加到请求头
pm.request.headers.upsert({ key: "X-Signature", value: signature });

// --- 用于调试的日志 ---
// 你可以在Postman Console (View -> Show Postman Console) 中看到这些输出
console.log("--- Signature Generation Details ---");
console.log("Timestamp:", timestamp);
console.log("Nonce:", nonce);
console.log("Path:", path);
console.log("Query:", query);
console.log("Body Content:", bodyContent);
console.log("String to Sign:", stringToSign);
console.log("Generated Signature:", signature);
console.log("------------------------------------");

业务侧功能

接口结构

接口结构图
接口结构图

产品拉取接口(Dida静态源模式,产品信息由Dida提供)

PropertyList

接口地址:{{BaseUrl}}/api/v1/Property/GetList

Request:

{
    "PropertyID": null,
    "HotelCode":""
}
NameDescription
PropertyIDDida的酒店ID,int类型
  1. null为查询所有
  2. 指定PropertyID,查询指定酒店
HotelCode推送的酒店ID,string类型
  1. 空或null 为查询所有
  2. 查询指定酒店ID,未查询到代表未匹配

Response:

{
    "code": 200,
    "message":"success",
    "data": [
        {
            "PropertyID": 2030330,
            "Name":"Test Hotel",
            "CustomerPropertyCode": null,
            "PriceModel":"PDP"
        },
        {
            "PropertyID": 2030331,
            "Name":"Test_Hotel - 2 (Exia)",
            "CustomerPropertyCode": null,
            "PriceModel":"PDP"
        }
    ]
}
NameDescription
code状态码
message信息
data酒店信息
PropertyID酒店ID
Name酒店名称
CustomerPropertyCode酒店Code(可自行设置)
PriceModel价格模式:OBP或PDP。
PDP(Package-Deal Pricing):房间单价,按照房间设置价格。
OBP(Occupancy-Based Pricing):可根据人数设置价格。
ChildMaxAge儿童最大年龄 年龄段
Currency币种

RoomTypeAndRatePlan

接口地址:{{BaseUrl}}/api/v1/Property/GetRoomTypeAndRatePlan

Request

{
    "PropertyID": 2030331,
    "HotelCode":"P001"
}

Response

{
    "code": 200,
    "message":"success",
    "data": {
        "PropertyID": 2030331,
        "HotelCode":"P001",
        "RoomTypes": [
            {
                "RoomTypeID": 1730029,
                "RoomTypeCode":"YOUR_ROOMTYPE_CODE",
                "RoomTypeName":"DELUXE KING ,1 Double or 1 Twin",
                "RatePlans": [
                    {
                        "RatePlanID": 2300816,
                        "RatePlanName":"Room Only Room Only",
                        "RatePlanCode":"YOUR_RatePlan_CODE",
                        "CustomerRatePlanCode": null,
                        "CutoffDays": 0
                    }
                ]
            }
        ]
    }
}

取消政策时区为酒店当地时区

餐食

NameDescription
RoomTypes房型列表
RoomTypeID房型ID
RoomTypeName房型名称
RoomTypeCode房型Code(可自行设置)
MaxPerson最大总人数
MaxAdult最大成人数
MaxChild最大儿童数
RatePlans价格计划列表
RatePlanID价格计划ID
RatePlanCodeYOUR_RatePlan_CODE
RatePlanName价格计划名称
CustomerRatePlanCode价格计划Code(可自行设置)
BasePersonCount基础人数
CutoffDays提前预定天数(RP级别)

产品推送接口(供应商静态源模式,产品信息由您提供)

PushHotel

接口地址:{{BaseUrl}}/api/v1/Property/PushHotel

Request:

{
    "HotelCode":"P001",
    "Name":"Sunshine Hotel",
    "Name_CN":"阳光酒店",
    "Status": 1,
    "PriceModel":"PDP",
    "ChildMaxAge": 12,
    "Currency":"USD",
    "Country":"United States",
    "City":"New York",
    "Addr":"123 Sunshine Street, Manhattan",
    "Phone":"+1-212-555-1234",
    "Email":"zirun.dong@didatravel.com",
    "Longitude":"-73.935242",
    "Latitude":"40.730610"
}
字段描述
HotelCode酒店的唯一识别码
Name酒店名称
Name_CN酒店中文名称
Status酒店的当前状态 1: 正常 (Active) 0: 不可用 (Inactive)
PriceModel酒店价格模式:OBP或PDP PDP: 房间单价 OBP: 可根据人数设置价格
ChildMaxAge儿童最大年龄
Currency酒店货币代码
Country国家/地区
City城市
Addr街道地址
Phone联系电话
Email联系邮箱
Longitude经度
Latitude纬度

Response:

{
    "code": 200,
    "message":"success",
    "data": null
}

PushRoomTypeAndRatePlan

接口地址:{{BaseUrl}}/api/v1/Property/PushRoomTypeAndRatePlan

Request:

{
  "HotelCode":"P001",
  "RoomTypes": [
    {    
      "RoomTypeCode":"DR001",
      "RoomTypeName":"Deluxe Room",
      "RoomTypeName_CN":"豪华房",
      "Status": 1,
      "MaxPerson": 4,
      "MaxAdult": 3,
      "MaxChild": 1,
      "BedTypeID": 1,
      "BedTypeName":"King Bed"
    },
    {
      "RoomTypeCode":"SR001",
      "RoomTypeName":"Standard Room",
      "RoomTypeName_CN": null,
      "Status": 1,
      "MaxPerson": 2,
      "MaxAdult": 2,
      "MaxChild": 0,
      "BedTypeID": 2,
      "BedTypeName":"Queen Bed",
      "IsOnRequest": true
    }
  ],
  "RatePlans": [
    {
      "RatePlanCode":"RP001",
      "RoomTypeCode":"DR001",
      "Status": 1,
      "RatePlanName":"Standard Rate",
      "RatePlanName_CN":"标准费用",
      "BasePersonCount": 2,
      "CutoffDays": 0,
      "MealTypeID": 1,
      "MealTypeName":"Breakfast Included"
    },
    {
      "RatePlanCode":"RP002",
      "RoomTypeCode":"SR001",
      "Status": 1,
      "RatePlanName":"Non-Refundable Rate",
      "RatePlanName_CN": null,
      "BasePersonCount": 1,
      "CutoffDays": 7,
      "MealTypeID": 0,
      "MealTypeName":"Room Only",
      "IsRefundable": true,
      "CancellationPolicies": [
          {
              "HourCount": 6,
              "CancellationType":"FullStay"
          },
          {
              "HourCount": 48,
              "CancellationType":"None",
              "FlatFee": 60.06
          }
      ],
      // 加人费,可空,当设置了房型的最大人数 > RP BasePersonCount 的时候设置该值。
      // 不设置则默认不会售卖超出人数的房态。
      "ExtraPersonChargeSettingList": [
            {
                "AgeCategoryCode":"A",
                "Setting": {
                    "ChargeType":"SA",
                    "Rules": [
                        {
                            "ExtraPersonCount": 1,
                            "IncludedMealCount": 0,
                            "AdjustType":"ABS",
                            "Amount": 105.00
                        },
                        {
                            "ExtraPersonCount": 2,
                            "IncludedMealCount": 0,
                            "AdjustType":"ABS",
                            "Amount": 155.00
                        }
                    ]
                }
            },
            {
                "AgeCategoryCode":"BA",
                "Setting": {
                    "ChargeType":"SA",
                    "Rules": [
                        {
                            "ExtraPersonCount": 1,
                            "IncludedMealCount": 0,
                            "AdjustType":"ABS",
                            "Amount": 60.00
                        },
                        {
                            "ExtraPersonCount": 2,
                            "IncludedMealCount": 0,
                            "AdjustType":"ABS",
                            "Amount": 90.00
                        }
                    ]
                }
            }
        ]
    }
  ]
}
NameDescription
RoomTypes
RoomTypeCode必填,string,酒店内唯一值。
IsOnRequest可空,默认为 null,立即确认。
false: 立即确认资源
true: 非立即确认资源
IsDeleted可空,默认为 null,未删除。
true: 将房型移除,不可撤销,不可恢复,并且该 RoomTypeCode 后续无法使用。
RatePlans
RatePlanCode必填,string,酒店内唯一值。
CancellationPolicies可取消政策列表,IsRefundable=true 时必须指定值。
例如 入住日 2025-06-06 HourCount=6 / CancellationType=FullStay 代表 2025-06-05 18:00 之后退款,收取所有房费。
例如 入住日 2025-06-06 HourCount=48 / CancellationType=None / FlatFee=60.06 代表 2025-06-04 00:00 之后退款,收取 60.06 费用。
HourCount代表距离入住当天0点的多少小时前,生效该取消政策,不支持负数(整型)(酒店当地时间)
CancellationTypeNone: 固定费用
FirstNight: 收取首晚费用
TwoNights: 收取两晚费用
TenPercentOfFullStay: 收取全部费用的10%
TwentyPercentOfFullStay: 收取全部费用的20%
ThirtyPercentOfFullStay: 收取全部费用的30%
FortyPercentOfFullStay: 收取全部费用的40%
FiftyPercentOfFullStay: 收取全部费用的50%
SixtyPercentOfFullStay: 收取全部费用的60%
SeventyPercentOfFullStay: 收取全部费用的70%
EightyPercentOfFullStay: 收取全部费用的80%
NinetyPercentOfFullStay: 收取全部费用的90%
FullStay: 收取全部费用
FlatFee固定费用时,必须指定一个值(两位小数)
ExtraPersonChargeSettingList见下方描述。
IsDeleted可空,默认为 null,未删除。
true: 将 RP 移除,不可撤销,不可恢复,并且该 RatePlanCode 后续无法使用。

加人费字段:

ExtraPersonChargeSettingList加人费列表,分为成人加人费和儿童加人费,最多分别设置一项。
可空,当设置了房型的最大人数 > RP BasePersonCount 的时候设置该值,不设置则默认不会售卖超出人数的房态。
支持推送修改。
AgeCategoryCode加人类型。
A: 成人。
BA: 儿童。
Setting
ChargeType费用类型。
SA: 独立计费,即最基本的加人费,将费用加在原始房费上。
其他:待补充说明。
Rules
ExtraPersonCount加人数量。
IncludedMealCount包含的餐食数量。
AdjustType费用类型。
ABS: 绝对值,对应金额直接合计。
其他:待补充说明。
AmountAdjustType="ABS" 时,该值为数值类型的金额。

Response:

{
    "code": 200,
    "message":"success",
    "data": null
}

ARI推送接口

接口地址:{{BaseUrl}}/api/v1/ARI/Push

重试说明:如果接口没有返回code:200,需要进行重试

字段说明:PropertyID、RoomTypeID、RatePlanID 对应 Dida 静态源模式,若使用「产品拉取接口」,推送 ARI 时这三个字段为必传;HotelCode、RoomTypeCode、RatePlanCode 对应供应商静态源模式,若使用「产品推送模式」,推送 ARI 时这三个字段为必传。

PDP模式

Request

{
    "PropertyID": 2030330,
    "HotelCode":"",
    "InventoryList": [
        {
            "RoomTypeID": 1730030,
            "StayDate":"2024-12-20",
            "Inventory": 3,
            "Status": 1
        },
        {
            "RoomTypeID": 1730030,
            "StayDate":"2024-12-21",
            "Inventory": 3,
            "Status": 1
        }
    ],
    "RateList": [
        {
            "RoomTypeID": 1730030,
            "RatePlanID": 2300817,            
            "RatePlanCode":"RP002",
            "RoomTypeCode":"SR001",
            "StayDate":"2024-12-20",
            "Price": 100,
            "Status": 1,
            "Currency":"CNY",
            "MinLOS": 0,
            "MaxLOS": 999,
            "CTA": false,
            "CTD": false,
            "CuttoffDays": 0
        },
        {
            "RoomTypeID": 1730030,
            "RatePlanID": 2300817,            
            "RatePlanCode":"RP002",
            "RoomTypeCode":"SR001",
            "StayDate":"2024-12-21",
            "Price": 100,
            "Status": 1,
            "Currency":"CNY",
            "MinLOS": 0,
            "MaxLOS": 999,
            "CTA": false,
            "CTD": false,
            "CuttoffDays": 0
        }
    ]
}

OBP模式

Request

{
    "PropertyID": 2030501,
    "HotelCode":"",
    "InventoryList": [
        {
            "RoomTypeID": 1731035,
            "RoomTypeCode":"YOUR_ROOMTYPE_CODE",
            "StayDate":"2024-12-20",
            "Inventory": 3,
            "Status": 1
        },
        {
            "RoomTypeID": 1731035,
            "RoomTypeCode":"YOUR_ROOMTYPE_CODE",
            "StayDate":"2024-12-21",
            "Inventory": 3,
            "Status": 1
        }
    ],
    "RateList": [
        {
            "RoomTypeID": 1731035,
            "RatePlanID": 2322702,
            "RoomTypeCode":"YOUR_ROOMTYPE_CODE",
            "RatePlanCode":"YOUR_RatePlan_CODE",
            "StayDate":"2024-12-20",
            "Price": null,
            "Status": 1,
            "Currency":"CNY",
            "OBPPrices": [
                {
                    "Occupancy": 1,
                    "Price": 100,
                    "Status": 1,
                    "Type":"Adult"
                },
                {
                    "Occupancy": 2,
                    "Price": 120,
                    "Status": 1,
                    "Type":"Adult"
                },
                {
                    "Occupancy": 1,
                    "Price": 50,
                    "Status": 1,
                    "Type":"Child"
                }
            ],
            "MinLOS": 0,
            "MaxLOS": 999,
            "CTA": false,
            "CTD": false,
            "CuttoffDays": 0
        },
        {
            "RoomTypeID": 1731035,
            "RatePlanID": 2322702,
            "RoomTypeCode":"YOUR_ROOMTYPE_CODE",
            "RatePlanCode":"YOUR_RatePlan_CODE",
            "StayDate":"2024-12-21",
            "Price": null,
            "Status": 1,
            "Currency":"CNY",
            "OBPPrices": [
                {
                    "Occupancy": 1,
                    "Price": 100,
                    "Status": 1,
                    "Type":"Adult"
                },
                {
                    "Occupancy": 2,
                    "Price": 120,
                    "Status": 1,
                    "Type":"Adult"
                },
                {
                    "Occupancy": 1,
                    "Price": 50,
                    "Status": 1,
                    "Type":"Child"
                }
            ],
            "MinLOS": 0,
            "MaxLOS": 999,
            "CTA": false,
            "CTD": false,
            "CuttoffDays": 0
        }
    ]
}
NameDescription
PropertyIDDida酒店ID,Dida静态源模式下必传(使用产品拉取接口时)
HotelCode供应商酒店Code,供应商静态源模式下必传(使用产品推送模式时)
InventoryList库存更新列表
RoomTypeID房型ID,Dida静态源模式下必传(使用产品拉取接口时)
RoomTypeCodeYOUR_ROOMTYPE_CODE
供应商房型Code,供应商静态源模式下必传(使用产品推送模式时)
StayDate日期:YYYY-MM-DD
Inventory库存
Status状态:
0:InActive
1:Active
RateList价格更新列表
RatePlanID价格计划ID,Dida静态源模式下必传(使用产品拉取接口时)
RatePlanCodeYOUR_RatePlan_CODE
供应商价格计划Code,供应商静态源模式下必传(使用产品推送模式时)
StayDate日期:YYYY-MM-DD
Price价格(PDP价格设置)(两位小数)
Currency币种
Status状态:
0:InActive
1:Active
MinLOS最小连住天数,
null为不限制
MaxLOS最大连住天数,
null为不限制
CTACloseToArrive
Ture:禁止入住
False:可以入住
null:不限制
CTDCloseToDepart
Ture:禁止入住
False:可以入住
null:不限制
CuttoffDays提前预定天数:
null:不限制
优先级高于RP级别
OBPPricesOBP价格设置列表
总价格=成人价格+儿童价格
Occupancy人数
Price价格
Status状态:
0:InActive
1:Active
Type"Adult":成人
"Child":儿童

Response

{
    "code": 200,
    "message":"success"
}

失败响应示例

{
    "code": 400,
    "message":"Property not found."
}
NameDescription
code200:ok
401:账号或密码错误
400:请求参数错误
500:服务不可用
messagesuccess:更新成功
fail:更新失败
🐻
Cancellation Policy, Hotel Policies, Service/Additional Fees and Taxes are not supported by SiteConnect Inventory and Rate API. These policies and fees/taxes should be configured internally within Dida extranet.

订单接口

新订接口

接口地址:{{WebHookURL}}

Request:

{
    "ClientID":"DidaTravel",
    "UserName":"DidaUserName",
    "Password":"DidaPassword",
    "BookingID":"DEB12345678000001",
    "Status":"New",
    "PropertyID": 2030330,
    "RoomTypeID": 1730030,
    "RatePlanID": 2300817,
    "HotelCode":"YOUR_HOTEL_CODE",
    "RoomTypeCode":"YOUR_ROOMTYPE_CODE",
    "RatePlanCode":"YOUR_RatePlan_CODE",
    "PropertyName":"PropertyName",
    "RoomTypeName":"RoomTypeName",
    "RatePlanName":"RatePlanName",
    "MealTypeID": 0,
    "MealTypeName":"Room Only",
    "BedTypeID": 1,
    "BedTypeName":"1 Single",
    "CheckInDate":"2024-12-20",
    "CheckOutDate":"2024-12-22",
    "RoomCount": 1,
    "Remark":"No Smoking",
    "PaymentInfo": {
        "CardNumber":"1234567890123456",
        "CardHolderName":"John Doe",
        "CVC":"123",
        "ActiveFromDate":"2023-01-01",
        "ExpireDate":"2024-12-31"
    },
    "GuestInfoList": [
        {
            "RoomNum": 1,
            "GuestFirstName":"John",
            "GuestLastName":"Doe",
            "Age": 30,
            "IsAdult": true
        },
        {
            "RoomNum": 1,
            "GuestFirstName":"Jane",
            "GuestLastName":"Doe",
            "Age": 28,
            "IsAdult": true
        }
    ],
    "PriceInfoList": [
        {
            "RoomNum": 1,
            "AdultCount": 2,
            "ChildCount": 0,
            "TotalPrice": 150.00,
            "Currency":"USD",
            "DailyRateList": [
                {
                    "Price": 75.00,
                    "StayDate":"2024-12-20"
                },
                {
                    "Price": 75.00,
                    "StayDate":"2024-12-21"
                }
            ]
        }
    ],
    "Contact": {
        "FirstName":"Dida",
        "LastName":"Travel",
        "Email":"service@didatravel.com",
        "Phone":"+86-0755-82628521",
        "Address":"Shenzhen Bay Tech-Eco Park, Shenzhen, China"
    }
}
NameDescription
ClientIDAlways:DidaTravel
UserNameDidaUserName,Dida提供,需要检查
PasswordDidaPassword,Dida提供,需要检查
BookingID订单ID(判断重复)
Status订单状态:
New:新订
Cancel:取消
Modify:修改
PropertyID酒店ID
RoomTypeID房型ID
RatePlanID价格计划ID
HotelCodeYOUR_HOTEL_CODE
RoomTypeCodeYOUR_ROOMTYPE_CODE
RatePlanCodeYOUR_RatePlan_CODE
PropertyName酒店名称
RoomTypeName房型名称
RatePlanName价格计划名称
MealTypeID餐型ID(见餐型床型代码说明)
MealTypeName餐型名称
BedTypeID床型ID(见餐型床型代码说明)
BedTypeName床型名称
CheckInDate入住日期
CheckOutDate离店日期
RoomCount房间数量
PaymentInfo支付信息(如有)
CardNumber卡号
CardHolderName卡持有者名称
CVCCVC(kekong)
ActiveFromDate生效日期
ExpireDate过期时间
GuestInfoList客人信息列表
RoomNum房间号
GuestFirstName客人名
GuestLastName客人姓
Age年龄
IsAdult是否是成人
PriceInfoList价格信息列表
RoomNum房间号
AdultCount成人数量
ChildCount儿童数量
TotalPrice房间总价
Currency币种
DailyRateList每日价格列表
Price价格
StayDate日期
ContactDida联系信息
FirstName联系名字:Dida
LastName联系名字:Travel
EmailDida联系Email
PhoneDida联系电话
AddressDida联系地址

Response:

{
    "Success": true,
    "Msg":"Success",
    "BookingID":"DEB12345678",
    "ConfirmationCode":"123456"
}
NameDescription
Successtrue:下单成功
false:下单失败
Msg成功或失败信息
BookingID订单ID
ConfirmationCode酒店确认号

取消接口

接口地址:{{WebHookURL}}

Request:

{
    "ClientID":"DidaTravel",
    "UserName":"DidaUserName",
    "Password":"DidaPassword",
    "BookingID":"DEB12345678000001",
    "Status":"Cancel",
    "PropertyID": 2030330,
    "RoomTypeID": 1730030,
    "RatePlanID": 2300817,
    "HotelCode":"YOUR_HOTEL_CODE",
    "RoomTypeCode":"YOUR_ROOMTYPE_CODE",
    "RatePlanCode":"YOUR_RatePlan_CODE",
    "CheckInDate":"2024-12-20",
    "CheckOutDate":"2024-12-22",
    "RoomCount": 1
}
NameDescription
ClientIDAlways:DidaTravel
UserNameDidaUserName,Dida提供,需要检查
PasswordDidaPassword,Dida提供,需要检查
BookingID订单ID
Status订单状态:
New:新订
Cancel:取消
Modify:修改
Always Cancel
PropertyID酒店ID
RoomTypeID房型ID
RatePlanID价格计划ID
HotelCodeYOUR_HOTEL_CODE
RoomTypeCodeYOUR_ROOMTYPE_CODE
RatePlanCodeYOUR_RatePlan_CODE
CheckInDate入住日期
CheckOutDate离店日期
RoomCount房间数量

Response:

{
    "Success": true,
    "Msg":"Success"
}
NameDescription
Successtrue:取消成功
false:取消失败
Msg成功或失败信息

修改订单接口(仅限姓名、支付方式和备注,某字段为null代表该字段信息不修改)

接口地址:{{WebHookURL}}/softchange

Request:(字段含义同下单接口)

{
    "ClientID":"DidaTravel",
    "UserName":"DidaUserName",
    "Password":"DidaPassword",
    "BookingID":"DEB12345678000001",
    "Status":"Modify",
    "PropertyID": 2030330,
    "RoomTypeID": 1730030,
    "RatePlanID": 2300817,
    "HotelCode":"YOUR_HOTEL_CODE",
    "RoomTypeCode":"YOUR_ROOMTYPE_CODE",
    "RatePlanCode":"YOUR_RatePlan_CODE",
    "Remark":"No Smoking",
    "PaymentInfo": {
        "CardNumber":"1234567890123456",
        "CardHolderName":"John Doe",
        "ActiveFromDate":"2023-01-01",
        "ExpireDate":"2024-12-31"
    },
    "GuestInfoList": [
        {
            "RoomNum": 1,
            "GuestFirstName":"John",
            "GuestLastName":"Doe",
            "Age": 30,
            "IsAdult": true
        },
        {
            "RoomNum": 1,
            "GuestFirstName":"Jane",
            "GuestLastName":"Doe",
            "Age": 28,
            "IsAdult": true
        }
    ]
}

查询订单

接口地址:{{BaseUrl}}/api/v1/Booking/List

NameDescription
BookingID订单ID
OrderDateStart订单日期范围开始(YYYY-MM-DD)
OrderDateEnd订单日期范围结束(包含)(YYYY-MM-DD)
StayDateStart入住区间范围开始(YYYY-MM-DD)
StayDateEnd入住区间范围结束(包含)(YYYY-MM-DD)
⚠️
注意事项 1.根据BookingID查询,根据订单日期范围查询,根据入住区间范围查询至少传入一种查询条件 2.按订单日期范围查询时,OrderDateStart和OrderDateEnd均为必填 3.按入住区间范围查询时,StayDateStart和StayDateEnd均为必填 4.若同时传入多种查询条件,则会将传入的查询条件取交集进行查询(例如请求同时传入BookingID和订单日期范围,则会查找在订单日期范围内的BookingID,若该订单不在订单日期范围内则不会返回)

Request:

{
    "BookingID":"DEB241217201xxxxx",
    "OrderDateStart":"2024-12-17",
    "OrderDateEnd":"2024-12-17",
    "StayDateStart":"2024-12-17",
    "StayDateEnd":"2024-12-17"
}

Response(字段含义同新订接口):

{
    "code": 200,
    "message":"success",
    "data": [
        {
            "BookingID":"DEB241217201xxxxx",
            "Status": null,
            "ConfirmationCode": null,
            "PropertyID": 1992267,
            "RoomTypeID": 1209418,
            "RatePlanID": 1581070,            
            "HotelCode":"YOUR_HOTEL_CODE",
            "RoomTypeCode":"YOUR_ROOMTYPE_CODE",
            "RatePlanCode":"YOUR_RatePlan_CODE",
            "PropertyName": null,
            "RoomTypeName": null,
            "RatePlanName": null,
            "MealTypeID": 0,
            "MealTypeName": null,
            "BedTypeID": 1,
            "BedTypeName": null,
            "CheckInDate":"2025-01-16T00: 00: 00",
            "CheckOutDate":"2025-01-17T00: 00: 00",
            "RoomCount": 1,
            "Remark": null,
            "PaymentInfo": null,
            "GuestInfoList": [
                {
                    "RoomNum": 1,
                    "GuestFirstName":"test",
                    "GuestLastName":"test",
                    "Age": null,
                    "IsAdult": true
                }
            ],
            "PriceInfoList": [
                {
                    "RoomNum": 1,
                    "AdultCount": 1,
                    "ChildCount": 0,
                    "TotalPrice": 0.0,
                    "Currency":"JPY",
                    "DailyRateList": null
                }
            ],
            "Contact": null,
        }
    ]
}

确认订单(仅对待确认订单有效)

接口地址:{{BaseUrl}}/api/v1/Booking/ConfirmOnRequest

NameDescription
BookingIDDIDA 下单时传入的订单 ID
Status订单状态:
Confirmed = 1
Cancelled = 2
Rejected = 3
Msg附加信息

Request:

{
    "BookingID":"DEB241217201xxxxx",
    "Status": 1,
    "Msg":"确认成功"
}

Response:

{
    "Success": true,
    "Msg":"Success"
}
NameDescription
Successtrue:接收成功
false: 接收失败
Code状态码:
200:确认成功
201:订单已确认
400:订单已取消
401:订单状态异常
404:订单不存在
500:系统异常
Msg确认结果信息

确认号推送

接口地址:{{BaseUrl}}/api/v1/Booking/UpdateConfirmationCode

NameDescription
BookingIDDIDA 下单时传入的订单 ID
ConfirmationCode酒店确认号

Request:

{
    "BookingID":"DEB241217201xxxxx",
    "ConfirmationCode":"123456"
}

Response:

{
    "Success": true,
    "Msg":"Success",
    "Code": 200
}
NameDescription
Successtrue:接收成功
false: 接收失败
Code状态码:
200:确认成功
201:已有确认号
400:参数异常
401:订单已取消
404:订单不存在
500:系统异常
Msg确认结果信息

附录

餐型代码说明

MealTypeID名称
0Room Only
1Breakfast Included
2Half-Board
3Full-Board
4All Inclusive
5Dinner
6BreakfastAndDinner
7BreakfastAndLunch
8PKG(Room&Ticket)
9Lunch
10Lunch And Dinner
11Suhur
12Iftar
13Suhur And Iftar
14Suhur or Iftar

主要床型代码说明

BedTypeID名称
11 Single
21 Double
31 Twin
43 Single
51 Double 1 Single
62 Double
71 Double 1 Twin
82 Twin
91 Double or 1 Twin
101 Double 1 Sofa
111 Single 1 Sofa
142 Single 1 Sofa
153 Single 1 Sofa
164 Single 1 Sofa
172 Double 1 Sofa
181 Double 2 Sofa
211 Double 1 Single 1 Sofa
221 Double 2 Single 1 Sofa
231 Double 2 Single 1 Double-Sofa
241 Sofa

Postman文件

以下为完整的 Postman 配置文件,可直接复制使用。

📄 CMOpenAPI.postman_environment.json
{
  "_postman_exported_at": "2025-07-29T05:31:36.615Z",
  "_postman_exported_using": "Postman/11.56.1",
  "_postman_variable_scope": "environment",
  "id": "b4b17b7a-6029-4ca3-88ff-b324d7748112",
  "name": "CMOpenAPI",
  "values": [
    {
      "enabled": true,
      "key": "api_key",
      "type": "default",
      "value": "<YOUR_API_KEY>"
    },
    {
      "enabled": true,
      "key": "api_secret",
      "type": "default",
      "value": "<YOUR_API_SECRET>"
    },
    {
      "enabled": true,
      "key": "BaseUrl",
      "type": "default",
      "value": "https://cm-dataapi.didatravel.com"
    },
    {
      "enabled": true,
      "key": "WebHookURL",
      "type": "default",
      "value": "https://didacmapi.yourwebsite.com"
    }
  ]
}
📄 CMOpenAPI.postman_collection.json
{
  "auth": {
    "apikey": [
      {
        "key": "value",
        "type": "string",
        "value": "ApiKey {{api_key}}"
      },
      {
        "key": "key",
        "type": "string",
        "value": "Authorization"
      }
    ],
    "type": "apikey"
  },
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "exec": [
          "// 1. 获取key\r",
          "const apiKey = pm.environment.get(\"api_key\");\r",
          "const apiSecret = pm.environment.get(\"api_secret\");\r",
          "\r",
          "pm.request.headers.upsert({ key: \"X-API-Key\", value: apiKey });\r",
          "\r",
          "// 2. 生成时间戳和Nonce\r",
          "const timestamp = Math.floor(Date.now() / 1000).toString();\r",
          "const nonce = crypto.randomUUID(); // Postman沙箱内置了crypto对象\r",
          "\r",
          "// 3. 将Timestamp和Nonce添加到请求头\r",
          "// Postman会自动处理,即使Headers中已存在同名key,也会使用这里设置的值\r",
          "pm.request.headers.upsert({ key: \"X-Timestamp\", value: timestamp });\r",
          "pm.request.headers.upsert({ key: \"X-Nonce\", value: nonce });\r",
          "\r",
          "// 4. 获取请求路径和查询参数\r",
          "const path = pm.request.url.getPath(); // e.g., /api/data\r",
          "const query = pm.request.url.getQueryString(); // e.g., ?name=test&id=123\r",
          "\r",
          "// 5. 安全地获取请求体 (最关键的一步)\r",
          "let bodyContent = \"\";\r",
          "// 检查请求体是否存在,并且模式是'raw' (最常见的情况,如JSON)\r",
          "if (pm.request.body && pm.request.body.mode === 'raw' && pm.request.body.raw) {\r",
          "    bodyContent = pm.request.body.raw;\r",
          "}\r",
          "// 注意:对于GET, DELETE等没有请求体的请求,bodyContent会保持为空字符串 \"\"\r",
          "// 这与我们服务器端的逻辑完全匹配\r",
          "\r",
          "// 6. 按照与服务器完全相同的顺序,构建待签名字符串\r",
          "const stringToSign = `${timestamp}${nonce}${path}${query}${bodyContent}`;\r",
          "\r",
          "// 7. 计算HMAC-SHA256签名\r",
          "const signature = CryptoJS.HmacSHA256(stringToSign, apiSecret).toString(CryptoJS.enc.Base64);\r",
          "\r",
          "// 8. 将最终的签名添加到请求头\r",
          "pm.request.headers.upsert({ key: \"X-Signature\", value: signature });\r",
          "\r",
          "// --- 用于调试的日志 ---\r",
          "// 你可以在Postman Console (View -> Show Postman Console) 中看到这些输出\r",
          "console.log(\"--- Signature Generation Details ---\");\r",
          "console.log(\"Timestamp:\", timestamp);\r",
          "console.log(\"Nonce:\", nonce);\r",
          "console.log(\"Path:\", path);\r",
          "console.log(\"Query:\", query);\r",
          "console.log(\"Body Content:\", bodyContent);\r",
          "console.log(\"String to Sign:\", stringToSign);\r",
          "console.log(\"Generated Signature:\", signature);\r",
          "console.log(\"------------------------------------\");"
        ],
        "packages": {},
        "type": "text/javascript"
      }
    },
    {
      "listen": "test",
      "script": {
        "exec": [
          ""
        ],
        "packages": {},
        "type": "text/javascript"
      }
    }
  ],
  "info": {
    "_exporter_id": "29840969",
    "_postman_id": "3e8e9b42-326a-4d84-8421-326d34b0b577",
    "name": "CMOpenAPI",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "event": [
        {
          "listen": "prerequest",
          "script": {
            "exec": [
              ""
            ],
            "packages": {},
            "type": "text/javascript"
          }
        }
      ],
      "name": "GetPropertyList",
      "request": {
        "body": {
          "mode": "raw",
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "raw": "{\r\n    \"PropertyID\": null,\r\n    \"HotelCode\":\"\"\r\n}"
        },
        "header": [],
        "method": "POST",
        "url": {
          "host": [
            "{{BaseUrl}}"
          ],
          "path": [
            "api",
            "v1",
            "Property",
            "GetList"
          ],
          "raw": "{{BaseUrl}}/api/v1/Property/GetList"
        }
      },
      "response": []
    },
    {
      "name": "GetBedTypes",
      "request": {
        "body": {
          "mode": "raw",
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "raw": ""
        },
        "header": [],
        "method": "POST",
        "url": {
          "host": [
            "{{BaseUrl}}"
          ],
          "path": [
            "api",
            "v1",
            "Property",
            "GetBedTypes"
          ],
          "raw": "{{BaseUrl}}/api/v1/Property/GetBedTypes"
        }
      },
      "response": []
    },
    {
      "name": "GetMealTypes",
      "request": {
        "body": {
          "mode": "raw",
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "raw": ""
        },
        "header": [],
        "method": "POST",
        "url": {
          "host": [
            "{{BaseUrl}}"
          ],
          "path": [
            "api",
            "v1",
            "Property",
            "GetMealTypes"
          ],
          "raw": "{{BaseUrl}}/api/v1/Property/GetMealTypes"
        }
      },
      "response": []
    },
    {
      "name": "GetRoomTypeAndRatePlan",
      "request": {
        "body": {
          "mode": "raw",
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "raw": "{\r\n    \"PropertyID\": 2030501,\r\n    \"HotelCode\": \"\"\r\n}"
        },
        "header": [],
        "method": "POST",
        "url": {
          "host": [
            "{{BaseUrl}}"
          ],
          "path": [
            "api",
            "v1",
            "Property",
            "GetRoomTypeAndRatePlan"
          ],
          "raw": "{{BaseUrl}}/api/v1/Property/GetRoomTypeAndRatePlan"
        }
      },
      "response": []
    },
    {
      "name": "PushHotel",
      "request": {
        "body": {
          "mode": "raw",
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "raw": "{\r\n    \"HotelCode\": \"P001\",\r\n    \"Name\": \"Sunshine Hotel\",\r\n    \"Status\": 1,\r\n    \"PriceModel\": \"PDP\",\r\n    \"ChildMaxAge\": 12,\r\n    \"Currency\": \"USD\",\r\n    \"Country\": \"United States\",\r\n    \"City\": \"New York\",\r\n    \"Addr\": \"123 Sunshine Street, Manhattan\",\r\n    \"Phone\": \"+1-212-555-1234\",\r\n    \"Email\":\"zirun.dong@didatravel.com\",\r\n    \"Longitude\": \"-73.935242\",\r\n    \"Latitude\": \"40.730610\"\r\n}"
        },
        "header": [],
        "method": "POST",
        "url": {
          "host": [
            "{{BaseUrl}}"
          ],
          "path": [
            "api",
            "v1",
            "Property",
            "PushHotel"
          ],
          "raw": "{{BaseUrl}}/api/v1/Property/PushHotel"
        }
      },
      "response": []
    },
    {
      "name": "PushRoomTypeAndRatePlan",
      "request": {
        "body": {
          "mode": "raw",
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "raw": "{\r\n    \"HotelCode\": \"P001\",\r\n    \"RoomTypes\": [\r\n        {\r\n            \"RoomTypeCode\": \"DR001\",\r\n            \"Status\": 1,\r\n            \"MaxPerson\": 4,\r\n            \"MaxAdult\": 3,\r\n            \"MaxChild\": 1,\r\n            \"RoomTypeName\": \"Deluxe Room\",\r\n            \"BedTypeID\": 1,\r\n            \"BedTypeName\": \"King Bed\"\r\n        },\r\n        {\r\n            \"RoomTypeCode\": \"SR001\",\r\n            \"Status\": 1,\r\n            \"MaxPerson\": 2,\r\n            \"MaxAdult\": 2,\r\n            \"MaxChild\": 0,\r\n            \"RoomTypeName\": \"Standard Room\",\r\n            \"BedTypeID\": 2,\r\n            \"BedTypeName\": \"Queen Bed\"\r\n        }\r\n    ],\r\n    \"RatePlans\": [\r\n        {\r\n            \"RatePlanCode\": \"RP001\",\r\n            \"RoomTypeCode\": \"DR001\",\r\n            \"Status\": 1,\r\n            \"RatePlanName\": \"Standard Rate\",\r\n            \"BasePersonCount\": 2,\r\n            \"CutoffDays\": 0,\r\n            \"MealTypeID\": 1,\r\n            \"MealTypeName\": \"Breakfast Included\"\r\n        },\r\n        {\r\n            \"RatePlanCode\": \"RP002\",\r\n            \"RoomTypeCode\": \"SR001\",\r\n            \"Status\": 1,\r\n            \"RatePlanName\": \"Non-Refundable Rate\",\r\n            \"BasePersonCount\": 1,\r\n            \"CutoffDays\": 7,\r\n            \"MealTypeID\": 2,\r\n            \"MealTypeName\": \"Room Only\"\r\n        }\r\n    ]\r\n}"
        },
        "header": [],
        "method": "POST",
        "url": {
          "host": [
            "{{BaseUrl}}"
          ],
          "path": [
            "api",
            "v1",
            "Property",
            "PushRoomTypeAndRatePlan"
          ],
          "raw": "{{BaseUrl}}/api/v1/Property/PushRoomTypeAndRatePlan"
        }
      },
      "response": []
    },
    {
      "name": "ARIUpdate PDP",
      "request": {
        "body": {
          "mode": "raw",
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "raw": "{\r\n    \"PropertyID\": 2030330,\r\n    \"HotelCode\":\"P001\",\r\n    \"InventoryList\": [\r\n        {\r\n            \"RoomTypeID\": 1730030,\r\n            \"StayDate\": \"2024-12-20\",\r\n            \"Inventory\": 3,\r\n            \"Status\": 1\r\n        },\r\n        {\r\n            \"RoomTypeID\": 1730030,\r\n            \"StayDate\": \"2024-12-21\",\r\n            \"Inventory\": 3,\r\n            \"Status\": 1\r\n        }\r\n    ],\r\n    \"RateList\": [\r\n        {\r\n            \"RoomTypeID\": 1730030,\r\n            \"RatePlanID\": 2300817,\r\n            \"StayDate\": \"2024-12-20\",\r\n            \"Price\": 100,\r\n            \"Status\": 1,\r\n            \"Currency\": \"CNY\",\r\n            \"MinLOS\": 0,\r\n            \"MaxLOS\": 999,\r\n            \"CTA\": false,\r\n            \"CTD\": false,\r\n            \"CuttoffDays\": 0\r\n        },\r\n        {\r\n            \"RoomTypeID\": 1730030,\r\n            \"RatePlanID\": 2300817,\r\n            \"StayDate\": \"2024-12-21\",\r\n            \"Price\": 100,\r\n            \"Status\": 1,\r\n            \"Currency\": \"CNY\",\r\n            \"MinLOS\": 0,\r\n            \"MaxLOS\": 999,\r\n            \"CTA\": false,\r\n            \"CTD\": false,\r\n            \"CuttoffDays\": 0\r\n        }\r\n    ]\r\n}"
        },
        "header": [],
        "method": "POST",
        "url": {
          "host": [
            "{{BaseUrl}}"
          ],
          "path": [
            "api",
            "v1",
            "ARI",
            "Push"
          ],
          "raw": "{{BaseUrl}}/api/v1/ARI/Push"
        }
      },
      "response": []
    },
    {
      "name": "ARIUpdate OBP",
      "request": {
        "body": {
          "mode": "raw",
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "raw": "{\r\n    \"PropertyID\": 2030501,\r\n    \"HotelCode\":\"P001\",\r\n    \"InventoryList\": [\r\n        {\r\n            \"RoomTypeID\": 1731035,\r\n            \"StayDate\": \"2024-12-20\",\r\n            \"Inventory\": 3,\r\n            \"Status\": 1\r\n        },\r\n        {\r\n            \"RoomTypeID\": 1731035,\r\n            \"StayDate\": \"2024-12-21\",\r\n            \"Inventory\": 3,\r\n            \"Status\": 1\r\n        }\r\n    ],\r\n    \"RateList\": [\r\n        {\r\n            \"RoomTypeID\": 1731035,\r\n            \"RatePlanID\": 2322702,\r\n            \"StayDate\": \"2024-12-20\",\r\n            \"Price\": null,\r\n            \"Status\": 1,\r\n            \"Currency\": \"CNY\",\r\n            \"OBPPrices\": [\r\n                {\r\n                    \"Occupancy\": 1,\r\n                    \"Price\": 100,\r\n                    \"Status\": 1,\r\n                    \"Type\": \"Adult\"\r\n                },\r\n                {\r\n                    \"Occupancy\": 2,\r\n                    \"Price\": 120,\r\n                    \"Status\": 1,\r\n                    \"Type\": \"Adult\"\r\n                },\r\n                {\r\n                    \"Occupancy\": 1,\r\n                    \"Price\": 50,\r\n                    \"Status\": 1,\r\n                    \"Type\": \"Child\"\r\n                }\r\n            ],\r\n            \"MinLOS\": 0,\r\n            \"MaxLOS\": 999,\r\n            \"CTA\": false,\r\n            \"CTD\": false,\r\n            \"CuttoffDays\": 0\r\n        },\r\n        {\r\n            \"RoomTypeID\": 1731035,\r\n            \"RatePlanID\": 2322702,\r\n            \"StayDate\": \"2024-12-21\",\r\n            \"Price\": null,\r\n            \"Status\": 1,\r\n            \"Currency\": \"CNY\",\r\n            \"OBPPrices\": [\r\n                {\r\n                    \"Occupancy\": 1,\r\n                    \"Price\": 100,\r\n                    \"Status\": 1,\r\n                    \"Type\": \"Adult\"\r\n                },\r\n                {\r\n                    \"Occupancy\": 2,\r\n                    \"Price\": 120,\r\n                    \"Status\": 1,\r\n                    \"Type\": \"Adult\"\r\n                },\r\n                {\r\n                    \"Occupancy\": 1,\r\n                    \"Price\": 50,\r\n                    \"Status\": 1,\r\n                    \"Type\": \"Child\"\r\n                }\r\n            ],\r\n            \"MinLOS\": 0,\r\n            \"MaxLOS\": 999,\r\n            \"CTA\": false,\r\n            \"CTD\": false,\r\n            \"CuttoffDays\": 0\r\n        }\r\n    ]\r\n}"
        },
        "header": [],
        "method": "POST",
        "url": {
          "host": [
            "{{BaseUrl}}"
          ],
          "path": [
            "api",
            "v1",
            "ARI",
            "Push"
          ],
          "raw": "{{BaseUrl}}/api/v1/ARI/Push"
        }
      },
      "response": []
    },
    {
      "name": "GetBookingList",
      "request": {
        "body": {
          "mode": "raw",
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "raw": "{\r\n    \"BookingID\": \"DEB241217201431338\",\r\n    \"OrderDateStart\": \"2024-12-17\",\r\n    \"OrderDateEnd\": \"2024-12-17\"\r\n}"
        },
        "header": [],
        "method": "POST",
        "url": {
          "host": [
            "{{BaseUrl}}"
          ],
          "path": [
            "api",
            "v1",
            "Booking",
            "List"
          ],
          "raw": "{{BaseUrl}}/api/v1/Booking/List"
        }
      },
      "response": []
    },
    {
      "name": "AddBooking",
      "request": {
        "body": {
          "mode": "raw",
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "raw": "{\r\n    \"ClientID\": \"DidaTravel\",\r\n    \"UserName\": \"DidaUserName\",\r\n    \"Password\": \"DidaPassword\",\r\n    \"BookingID\": \"DEB12345678000001\",\r\n    \"Status\": \"New\",\r\n    \"PropertyID\": 2030330,\r\n    \"PropertyName\": \"PropertyName\",\r\n    \"RoomTypeID\": 1730030,\r\n    \"RoomTypeName\": \"RoomTypeName\",\r\n    \"RatePlanID\": 2300817,\r\n    \"RatePlanName\": \"RatePlanName\",\r\n    \"MealTypeID\": \"0\",\r\n    \"MealTypeName\": \"Room Only\",\r\n    \"BedTypeID\": \"1\",\r\n    \"BedTypeName\": \"1 Single\",\r\n    \"CheckInDate\": \"2024-12-20\",\r\n    \"CheckOutDate\": \"2024-12-21\",\r\n    \"RoomCount\": 1,\r\n    \"Remark\": \"no smoking\",\r\n    \"PaymentInfo\": {\r\n        \"CardNumber\": \"1234567890123456\",\r\n        \"CardHolderName\": \"John Doe\",\r\n        \"CVC\": \"123\",\r\n        \"ActiveFromDate\": \"2023-01-01\",\r\n        \"ExpireDate\": \"2024-12-31\"\r\n    },\r\n    \"GuestInfoList\": [\r\n        {\r\n            \"RoomNum\": 1,\r\n            \"GuestFirstName\": \"John\",\r\n            \"GuestLastName\": \"Doe\",\r\n            \"Age\": 30,\r\n            \"IsAdult\": true\r\n        },\r\n        {\r\n            \"RoomNum\": 1,\r\n            \"GuestFirstName\": \"Jane\",\r\n            \"GuestLastName\": \"Doe\",\r\n            \"Age\": 28,\r\n            \"IsAdult\": true\r\n        }\r\n    ],\r\n    \"PriceInfoList\": [\r\n        {\r\n            \"RoomNum\": 1,\r\n            \"AdultCount\": 2,\r\n            \"ChildCount\": 0,\r\n            \"TotalPrice\": 150.00,\r\n            \"Currency\": \"USD\",\r\n            \"DailyRateList\": [\r\n                {\r\n                    \"Price\": 75.00,\r\n                    \"StayDate\": \"2024-12-20\"\r\n                },\r\n                {\r\n                    \"Price\": 75.00,\r\n                    \"StayDate\": \"2024-12-21\"\r\n                }\r\n            ]\r\n        }\r\n    ],\r\n    \"Contact\": {\r\n        \"FirstName\": \"Dida\",\r\n        \"LastName\": \"Travel\",\r\n        \"Email\": \"service@didatravel.com\",\r\n        \"Phone\": \"+86-0755-82628521\",\r\n        \"Address\": \"Shenzhen Bay Tech-Eco Park, Shenzhen, China\"\r\n    }\r\n}"
        },
        "header": [],
        "method": "POST",
        "url": {
          "host": [
            "{{WebHookURL}}"
          ],
          "raw": "{{WebHookURL}}"
        }
      },
      "response": []
    },
    {
      "name": "CancelBooking",
      "request": {
        "body": {
          "mode": "raw",
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "raw": "{\r\n    \"ClientID\": \"DidaTravel\",\r\n    \"UserName\": \"DidaUserName\",\r\n    \"Password\": \"DidaPassword\",\r\n    \"BookingID\": \"DEB12345678000001\",\r\n    \"Status\": \"Cancel\",\r\n    \"PropertyID\": 2030330,\r\n    \"RoomTypeID\": 1730030,\r\n    \"RatePlanID\": 2300817,\r\n    \"CheckInDate\": \"2024-12-20\",\r\n    \"CheckOutDate\": \"2024-12-21\",\r\n    \"RoomCount\": 1\r\n}"
        },
        "header": [],
        "method": "POST",
        "url": {
          "host": [
            "{{WebHookURL}}"
          ],
          "raw": "{{WebHookURL}}"
        }
      },
      "response": []
    },
    {
      "name": "ModifyBooking",
      "request": {
        "body": {
          "mode": "raw",
          "options": {
            "raw": {
              "language": "json"
            }
          },
          "raw": "{\r\n    \"ClientID\": \"DidaTravel\",\r\n    \"UserName\": \"DidaUserName\",\r\n    \"Password\": \"DidaPassword\",\r\n    \"BookingID\": \"DEB12345678000001\",\r\n    \"Status\": \"Modify\",\r\n    \"PropertyID\": 2030330,\r\n    \"RoomTypeID\": 1730030,\r\n    \"RatePlanID\": 2300817,\r\n    \"CheckInDate\": \"2024-12-20\",\r\n    \"CheckOutDate\": \"2024-12-22\",\r\n    \"RoomCount\": 1,\r\n    \"PaymentInfo\": {\r\n        \"CardNumber\": \"1234567890123456\",\r\n        \"CardHolderName\": \"John Doe\",\r\n        \"CVC\": \"123\",\r\n        \"ActiveFromDate\": \"2023-01-01\",\r\n        \"ExpireDate\": \"2024-12-31\"\r\n    },\r\n    \"GuestInfoList\": [\r\n        {\r\n            \"RoomNum\": 1,\r\n            \"GuestFirstName\": \"John\",\r\n            \"GuestLastName\": \"Doe\",\r\n            \"Age\": 30,\r\n            \"IsAdult\": true\r\n        },\r\n        {\r\n            \"RoomNum\": 1,\r\n            \"GuestFirstName\": \"Jane\",\r\n            \"GuestLastName\": \"Doe\",\r\n            \"Age\": 28,\r\n            \"IsAdult\": true\r\n        }\r\n    ],\r\n    \"PriceInfoList\": [\r\n        {\r\n            \"RoomNum\": 1,\r\n            \"AdultCount\": 2,\r\n            \"ChildCount\": 0,\r\n            \"TotalPrice\": 150.00,\r\n            \"Currency\": \"USD\",\r\n            \"DailyRateList\": [\r\n                {\r\n                    \"Price\": 75.00,\r\n                    \"StayDate\": \"2024-12-20\"\r\n                },\r\n                {\r\n                    \"Price\": 75.00,\r\n                    \"StayDate\": \"2024-12-21\"\r\n                }\r\n            ]\r\n        }\r\n    ]\r\n}"
        },
        "header": [],
        "method": "POST",
        "url": {
          "host": [
            "{{WebHookURL}}"
          ],
          "raw": "{{WebHookURL}}"
        }
      },
      "response": []
    }
  ]
}