TABLE OF CONTENTS

介绍

渠道可以调用产品 Addon 接口获取 Addon 详细信息,调用 live-check 对其可预订检查。并在随后的订单预订中打包 Addon 产品。



版本要求

GO的版本版本要求备注

GO v3 渠道

全新开发 GO v4.8 及以上/

GO v4 渠道

升级到 GO v4.8 及以上

以下是需要升级或实现的API

1.酒店产品API

2.产品 Addon API(新)

3.房间实时检查API

4.订单预订前检查 API

5.订单预订 API

6.订单修改 API(可选)

7.订单详情查询 API(可选)



工作流和交互图

  • 渠道通过酒店API获取产品附加码和产品。
  • 渠道过产品 Addon API获取产品插件详细信息(包括价格和限制)。
  • 渠道通过Product Addon availability API从酒店供应商处获得实时可用性。
  • 渠道通过Prebook API最终检查产品插件的可用性以及房间。
  • 渠道通过book API预订产品插件和房间。
  • 渠道通过modify API修改产品插件和房间。
  • 渠道通过cancel API取消产品插件和房间。
  • 渠道通过Query Res API获取特定预订的产品插件详细信息。


它如何在GO v4.8上工作?

有6个API需要升级到v4.8才能支持产品 Addon

  1. 酒店产品 API
  2. 房间可预订检查API
  3. 订单预订前检查 API
  4. 订单预订 API
  5. 订单修改 API(可选)
  6. 查询订单详情 API(可选)
小贴士:
更改后的部分已标记为“Addon start here”和“Addon end”。

1.酒店产品API-将从酒店产品API返回产品 Addon 代码


响应示例:

{
  "hotelId": "GATHI",
  "hotelName": "This is a test hotel",
  "supplierId": "HILTON",
  "status": "Actived",
  "chainCode": "Marriott",
  "brandCode": "Waldorf",
  "longitude": "41.40338",
  "latitude": "2.17403",
  "city": "string",
  "country": "string",
  "state": "string",
  "address": [
    "AddressLine1",
    "AddressLine2",
    "AddressLine3",
    "AddressLine4",
    "AddressLine5"
  ],
  "phone": {
    "countryAccessCode": "string",
    "areaCityCode": "string",
    "phoneNumber": "string"
  },
  "settings": {
    "key1": "value1",
    "key2": "value2"
  },
  "ariType": "Daily",
  "timezone": "America/Los_Angeles",
  "rateType": "AmountBeforeTax",
  "maxChildAge": 17,
  "childRateType": "ByAge",
  "products": [
    {
      "roomId": "10000101",
      "rateId": "123456",
      "stayType": "OverNightRoom",
      "status": "Actived",
      "roomName": "Double Room",
      "roomDescription": "Soak in city views in our Deluxe room, which features a well-appointed ensuite bathroom and up-to-date entertainment offerings.",
      "rateName": "Bar Rate",
      "rateDescription": "Begin your day with a hearty meal.",
      "occupancy": {
        "maxAdult": 3,
        "maxChild": 2,
        "maxOccupancy": 3
      },
      "paymentType": "PayNow",
      "guarantee": {
        "guaranteeType": "CCG"
      },
      "cancelPolicies": [
        {
          "dateRange": {
            "startDate": "2018-01-01",
            "endDate": "2018-01-04"
          },
          "cancelPolicy": {
            "code": "AD100P_100P",
            "description": "Non Refundable",
            "cancelPenalties": [
              {
                "noShow": true,
                "cancellable": true,
                "cancelDeadline": {
                  "offsetTimeDropType": "BeforeArrival",
                  "offsetTimeUnit": "D",
                  "offsetTimeValue": 0,
                  "deadline": "string"
                },
                "penaltyCharge": {
                  "chargeBase": "FullStay",
                  "nights": 0,
                  "amount": 0,
                  "percent": 0
                }
              }
            ]
          }
        }
      ],
      "fees": [
        {
          "dateRange": {
            "startDate": "2018-01-01",
            "endDate": "2018-01-04"
          },
          "fee": {
            "name": "Service Charge",
            "type": "Exclusive",
            "amount": 10,
            "amountType": "Percent",
            "chargeType": "PerRoomPerNight",
            "paymentType": "PayNow",
            "effectivePerson": 0
          }
        }
      ],
      //addon start here
      "bookingChannels": [
        "channel",
        "channel"
      ],
      "sourceMarkets": [
        "region",
        "region"
      ],
      "productAddons": [
        {
          "type": "DisneyTicket",
          "required": true,
          "candidateCodes": [
            "code",
            "code"
          ]
        }
      ]
    //addon end
    }
  ]
}


2.Room Live Check API-将bookingChannel节点添加到请求中


请求示例:

{
    "header": {
      "supplierId": "HILTON",
      "distributorId": "GTA",
      "version": "v4",
      "token": "18393849028490234"
    },
    "hotelId": "GATHI",
    "stayRange": {
      "checkin": "2018-01-01",
      "checkout": "2018-01-04"
    },
    "roomCriteria": {
      "roomCount": 2,
      "adultCount": 1,
      "childCount": 2,
      "childAges": [
        4,
        8
      ]
    },
    "productCandidate": {
      "roomId": "K1D",
      "rateId": "ODAD01"
    },
    "iata": "string",
    "loyaltyAccount": {
      "programCode": "BW",
      "accountId": "1234567890123457"
    },
    "corpAccount": {
      "corpProgramCode": "CR",
      "corpId": "A-1232"
    },
    "isAfterPromotion": false,
    "promoteCode": "string",
    //addon start here
    "bookingChannel": "string",
    //addon end here
    "extensions": {
      "key1": "value1",
      "key2": "value2"
    }
  }

3. Prebook API-产品 Addon 将与客房预订一起提供。

注意事项:
① 产品 Addon 的价格不包括在客房总价中。
② 对于迪士尼的房间+门票预订,门票数量必须与入住人数相同,否则订单将无法成功。此外,对于多张票的预订,每张票的入场日期应相同。
③ 对于迪士尼的预订,建议客人信息的数量与入住人数保持一致,客人的年龄应准确,以便迪士尼更好地为客人服务。


请求示例:

{
  "header": {
    "supplierId": "HILTON",
    "distributorId": "GTA",
    "version": "v4",
    "token": "18393849028490234"
  },
  "reservationIds": {
    "distributorResId": "C2084DFL0",
    "derbyResId": "D15F893D34DF",
    "supplierResId": "89389494"
  },
  "iata": "string",
  "hotelId": "GATHI",
  "stayRange": {
    "checkin": "2018-01-01",
    "checkout": "2018-01-04"
  },
  "contactPerson": {
    "firstName": "James",
    "lastName": "Bond",
    "email": "007@james.com",
    "phone": "string",
    "address": "string"
  },
  "roomCriteria": {
    "roomCount": 2,
    "adultCount": 1,
    "childCount": 2,
    "childAges": [
      4,
      8
    ]
  },
  "total": {
    "amountBeforeTax": 640,
    "amountAfterTax": 700
  },
  "payment": {
    "cardCode": "VI",
    "cardNumber": "4111111111111111",
    "cardHolderName": "Sherlock Holmes",
    "expireDate": "0124"
  },
  "loyaltyAccount": {
    "programCode": "BW",
    "accountId": "1234567890123457"
  },
  "corpAccount": {
    "corpProgramCode": "CR",
    "corpId": "A-1232"
  },
  "promoteCode": "string",
  "guests": [
    {
      "firstName": "James",
      "lastName": "Bond",
      "email": "007@james.com",
      "phone": "string",
      "address": "string",
      "age": 0,
      "gender": "Male",
      "birthday": "2018-01-01",
      "type": "Adult",
      "index": 1
    }
  ],
  "comments": [
    "no smoking",
    "high floor"
  ],
  "roomRates": [
    {
      "roomId": "K1D",
      "rateId": "ODAD01",
      "currency": "USD",
      "amountBeforeTax": [
        100,
        100,
        120
      ],
      "amountAfterTax": [
        110,
        110,
        130
      ],
      "mealPlan": "RO",
      "paymentType": "PayNow",
      "guarantee": {
        "guaranteeType": "CCG"
      },
      "fees": [
        {
          "dateRange": {
            "startDate": "2018-01-01",
            "endDate": "2018-01-04"
          },
          "fee": {
            "name": "Service Charge",
            "type": "Exclusive",
            "amount": 10,
            "amountType": "Percent",
            "chargeType": "PerRoomPerNight",
            "paymentType": "PayNow",
            "effectivePerson": 0
          }
        }
      ],
      "cancelPolicy": {
        "code": "AD100P_100P",
        "description": "Non Refundable",
        "cancelPenalties": [
          {
            "noShow": true,
            "cancellable": true,
            "cancelDeadline": {
              "offsetTimeDropType": "BeforeArrival",
              "offsetTimeUnit": "D",
              "offsetTimeValue": 0,
              "deadline": "string"
            },
            "penaltyCharge": {
              "chargeBase": "FullStay",
              "nights": 0,
              "amount": 0,
              "percent": 0
            }
          }
        ]
      }
    }
  ],
  //addon start here
  "bookingChannel": "string",
  "productAddons": [
    {
      "type": "DisneyTicket",
      "code": "code",
      "date": "2018-01-01",
      "quantity": 1,
      "officeId": "string",
      "rate": {
        "ageQualifyingType": {
          "type": "Adult",
          "minAge": 18,
          "maxAge": 99
        },
        "currency": "USD",
        "amountBeforeTax": 123.23,
        "amountAfterTax": 134.34
      }
    }
  ],
 //addon end
  "extensions": {
    "key1": "value1",
    "key2": "value2"
  }
}


4.订单API- 订单预订请求中包含产品 Addon 信息。

注意事项:
① 客房总价不包含产品 Addon 的价格。
② 对于迪士尼的房间+门票预订,门票数量必须与入住人数相同,否则订单将无法成功。此外,对于多张票的预订,每张票的入场日期应相同。
③ 对于迪士尼的预订,建议客人数量与入住人数保持一致,客人的年龄应准确,以便迪士尼更好地为客人服务。


请求示例:

{
  "header": {
    "supplierId": "HILTON",
    "distributorId": "GTA",
    "version": "v4",
    "token": "18393849028490234"
  },
  "reservationIds": {
    "distributorResId": "C2084DFL0",
    "derbyResId": "D15F893D34DF",
    "supplierResId": "89389494"
  },
  "iata": "string",
  "hotelId": "GATHI",
  "stayRange": {
    "checkin": "2018-01-01",
    "checkout": "2018-01-04"
  },
  "contactPerson": {
    "firstName": "James",
    "lastName": "Bond",
    "email": "007@james.com",
    "phone": "string",
    "address": "string"
  },
  "roomCriteria": {
    "roomCount": 2,
    "adultCount": 1,
    "childCount": 2,
    "childAges": [
      4,
      8
    ]
  },
  "total": {
    "amountBeforeTax": 640,
    "amountAfterTax": 700
  },
  "payment": {
    "cardCode": "VI",
    "cardNumber": "4111111111111111",
    "cardHolderName": "Sherlock Holmes",
    "expireDate": "119"
  },
  "loyaltyAccount": {
    "programCode": "BW",
    "accountId": "1234567890123457"
  },
  "corpAccount": {
    "corpProgramCode": "CR",
    "corpId": "A-1232"
  },
  "promoteCode": "string",
  "guests": [
    {
      "firstName": "James",
      "lastName": "Bond",
      "email": "007@james.com",
      "phone": "string",
      "address": "string",
      "age": 0,
      "gender": "Male",
      "birthday": "2018-01-01",
      "type": "Adult",
      "index": 1
    }
  ],
  "comments": [
    "no smoking",
    "high floor"
  ],
  "roomRates": [
    {
      "roomId": "K1D",
      "rateId": "ODAD01",
      "currency": "USD",
      "amountBeforeTax": [
        100,
        100,
        120
      ],
      "amountAfterTax": [
        110,
        110,
        130
      ],
      "mealPlan": "RO",
      "paymentType": "PayNow",
      "guarantee": {
        "guaranteeType": "CCG"
      },
      "fees": [
        {
          "dateRange": {
            "startDate": "2018-01-01",
            "endDate": "2018-01-04"
          },
          "fee": {
            "name": "Service Charge",
            "type": "Exclusive",
            "amount": 10,
            "amountType": "Percent",
            "chargeType": "PerRoomPerNight",
            "paymentType": "PayNow",
            "effectivePerson": 0
          }
        }
      ],
      "cancelPolicy": {
        "code": "AD100P_100P",
        "description": "Non Refundable",
        "cancelPenalties": [
          {
            "noShow": true,
            "cancellable": true,
            "cancelDeadline": {
              "offsetTimeDropType": "BeforeArrival",
              "offsetTimeUnit": "D",
              "offsetTimeValue": 0,
              "deadline": "string"
            },
            "penaltyCharge": {
              "chargeBase": "FullStay",
              "nights": 0,
              "amount": 0,
              "percent": 0
            }
          }
        ]
      }
    }
  ],
  //addon start here
  "bookingChannel": "string",
  "productAddons": [
    {
      "type": "DisneyTicket",
      "code": "code",
      "date": "2018-01-01",
      "quantity": 1,
      "officeId": "string",
      "rate": {
        "ageQualifyingType": {
          "type": "Adult",
          "minAge": 18,
          "maxAge": 99
        },
        "currency": "USD",
        "amountBeforeTax": 123.23,
        "amountAfterTax": 134.34
      }
    }
  ],
 //addon end
  "threeDomainSecurity": {
    "cavv": "string",
    "eci": "string",
    "xid": "string",
    "threeDomainSecurityVersion": "string",
    "transactionId": "string",
    "merchantName": "string",
    "extensions": {
      "key1": "value1",
      "key2": "value2"
    }
  },
  "bookingToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
  "extensions": {
    "key1": "value1",
    "key2": "value2"
  }
}


5.修改API- 订单修改接口中会包含产品 Addon 信息

注意事项:
关于修改迪士尼预订,请不要更改每个房间的第一位客人信息,否则预订将无法成功修改。

请求示例:

{
  "header": {
    "supplierId": "HILTON",
    "distributorId": "GTA",
    "version": "v4",
    "token": "18393849028490234"
  },
  "reservationIds": {
    "distributorResId": "C2084DFL0",
    "derbyResId": "D15F893D34DF",
    "supplierResId": "89389494"
  },
  "iata": "string",
  "hotelId": "GATHI",
  "stayRange": {
    "checkin": "2018-01-01",
    "checkout": "2018-01-04"
  },
  "contactPerson": {
    "firstName": "James",
    "lastName": "Bond",
    "email": "007@james.com",
    "phone": "string",
    "address": "string"
  },
  "roomCriteria": {
    "roomCount": 2,
    "adultCount": 1,
    "childCount": 2,
    "childAges": [
      4,
      8
    ]
  },
  "total": {
    "amountBeforeTax": 640,
    "amountAfterTax": 700
  },
  "payment": {
    "cardCode": "VI",
    "cardNumber": "4111111111111111",
    "cardHolderName": "Sherlock Holmes",
    "expireDate": "119"
  },
  "loyaltyAccount": {
    "programCode": "BW",
    "accountId": "1234567890123457"
  },
  "corpAccount": {
    "corpProgramCode": "CR",
    "corpId": "A-1232"
  },
  "promoteCode": "string",
  "guests": [
    {
      "firstName": "James",
      "lastName": "Bond",
      "email": "007@james.com",
      "phone": "string",
      "address": "string",
      "age": 0,
      "gender": "Male",
      "birthday": "2018-01-01",
      "type": "Adult",
      "index": 1
    }
  ],
  "comments": [
    "no smoking",
    "high floor"
  ],
  "roomRates": [
    {
      "roomId": "K1D",
      "rateId": "ODAD01",
      "currency": "USD",
      "amountBeforeTax": [
        100,
        100,
        120
      ],
      "amountAfterTax": [
        110,
        110,
        130
      ],
      "mealPlan": "RO",
      "paymentType": "PayNow",
      "guarantee": {
        "guaranteeType": "CCG"
      },
      "fees": [
        {
          "dateRange": {
            "startDate": "2018-01-01",
            "endDate": "2018-01-04"
          },
          "fee": {
            "name": "Service Charge",
            "type": "Exclusive",
            "amount": 10,
            "amountType": "Percent",
            "chargeType": "PerRoomPerNight",
            "paymentType": "PayNow",
            "effectivePerson": 0
          }
        }
      ],
      "cancelPolicy": {
        "code": "AD100P_100P",
        "description": "Non Refundable",
        "cancelPenalties": [
          {
            "noShow": true,
            "cancellable": true,
            "cancelDeadline": {
              "offsetTimeDropType": "BeforeArrival",
              "offsetTimeUnit": "D",
              "offsetTimeValue": 0,
              "deadline": "string"
            },
            "penaltyCharge": {
              "chargeBase": "FullStay",
              "nights": 0,
              "amount": 0,
              "percent": 0
            }
          }
        ]
      }
    }
  ],
  //addon start here
  "bookingChannel": "string",
  "productAddons": [
    {
      "type": "DisneyTicket",
      "code": "code",
      "date": "2018-01-01",
      "quantity": 1,
      "officeId": "string",
      "rate": {
        "ageQualifyingType": {
          "type": "Adult",
          "minAge": 18,
          "maxAge": 99
        },
        "currency": "USD",
        "amountBeforeTax": 123.23,
        "amountAfterTax": 134.34
      }
    }
  ],
 //addon end
  "extensions": {
    "key1": "value1",
    "key2": "value2"
  }
}


6.Query Res Detail API-产品Addon详细信息将通过Query Res Detail API返回。

响应示例:

{
  "header": {
    "supplierId": "HILTON",
    "distributorId": "GTA",
    "version": "v4",
    "token": "18393849028490234"
  },
  "reservations": [
    {
      "reservationIds": {
        "distributorResId": "C2084DFL0",
        "derbyResId": "D15F893D34DF",
        "supplierResId": "89389494"
      },
      "iata": "string",
      "hotelId": "GATHI",
      "stayRange": {
        "checkin": "2018-01-01",
        "checkout": "2018-01-04"
      },
      "roomCriteria": {
        "roomCount": 2,
        "adultCount": 1,
        "childCount": 2,
        "childAges": [
          4,
          8
        ]
      },
      "total": {
        "amountBeforeTax": 640,
        "amountAfterTax": 700
      },
      "loyaltyAccount": {
        "programCode": "BW",
        "accountId": "1234567890123457"
      },
      "corpAccount": {
        "corpProgramCode": "CR",
        "corpId": "A-1232"
      },
      "promoteCode": "string",
      "comments": [
        "no smoking",
        "high floor"
      ],
      "roomRates": [
        {
          "roomId": "K1D",
          "rateId": "ODAD01",
          "currency": "USD",
          "amountBeforeTax": [
            100,
            100,
            120
          ],
          "amountAfterTax": [
            110,
            110,
            130
          ],
          "mealPlan": "RO",
          "paymentType": "PayNow",
          "guarantee": {
            "guaranteeType": "CCG"
          },
          "fees": [
            {
              "dateRange": {
                "startDate": "2018-01-01",
                "endDate": "2018-01-04"
              },
              "fee": {
                "name": "Service Charge",
                "type": "Exclusive",
                "amount": 10,
                "amountType": "Percent",
                "chargeType": "PerRoomPerNight",
                "paymentType": "PayNow",
                "effectivePerson": 0
              }
            }
          ],
          "cancelPolicy": {
            "code": "AD100P_100P",
            "description": "Non Refundable",
            "cancelPenalties": [
              {
                "noShow": true,
                "cancellable": true,
                "cancelDeadline": {
                  "offsetTimeDropType": "BeforeArrival",
                  "offsetTimeUnit": "D",
                  "offsetTimeValue": 0,
                  "deadline": "string"
                },
                "penaltyCharge": {
                  "chargeBase": "FullStay",
                  "nights": 0,
                  "amount": 0,
                  "percent": 0
                }
              }
            ]
          }
        }
      ],
      //addon start here
      "bookingChannel": "string",
      "productAddons": [
        {
          "type": "Disney Ticket",
          "code": "code",
          "date": "2018-01-01",
          "quantity": 1,
          "officeId": "string",
          "rate": {
            "ageQualifyingType": {
              "type": "Adult",
              "minAge": 18,
              "maxAge": 99
            },
            "currency": "USD",
            "amountBeforeTax": 123.23,
            "amountAfterTax": 134.34
          }
        }
      ],
     //addon end
      "status": "Confirmed",
      "cancellationId": "C89389494",
      "result": "Successful",
      "failCause": {
        "errorCode": "string",
        "supplierErrorCode": "string",
        "errorMessage": "string"
      }
    }
  ]
}


7. Product Addon APIs - 这是新增的 API,请参阅开发指南


8. ARI Push API - Pull 渠道可以跳过此步

注意事项: 
对于Disney的对接, 请确保实现以下两个特性:
① FPLOS Restriction
② Extra Child Rate

请求示例:

{
    "header": {
        "supplierId": "HILTON",
        "distributorId": "GTA",
        "version": "v4",
        "token": "18393849028490234"
    },
    "messageType": "Delta",
    "hotelId": "GATHI",
    "dateRange": {
        "startDate": "2018-01-01",
        "endDate": "2018-01-04"
    },
    "currency": "USD",
    "dailyAris": [
        {
            "roomId": "K1",
            "rateId": "BARB",
            "mealPlans": [
                "BB",
                "BB",
                "BB",
                "BB"
            ],
            "inventories": [
                9,
                0,
                9,
                9
            ],
            "rates": {
                // extra child rates
                "extraChildRates": [
                    {
                        "amountAfterTax": [
                            50.00,
                            50.00,
                            50.00,
                            50.00
                        ],
                        "amountBeforeTax": [
                            40.00,
                            40.00,
                            40.00,
                            40.00
                        ],
                        "maxAge": "2",
                        "minAge": "0"
                    },
                    {
                        "amountAfterTax": [
                            60.00,
                            60.00,
                            60.00,
                            60.00
                        ],
                        "amountBeforeTax": [
                            50.00,
                            50.00,
                            50.00,
                            50.00
                        ],
                        "maxAge": "8",
                        "minAge": "3"
                    },
                    {
                        "amountAfterTax": [
                            70.00,
                            70.00,
                            70.00,
                            70.00
                        ],
                        "amountBeforeTax": [
                            60.00,
                            60.00,
                            60.00,
                            60.00
                        ],
                        "maxAge": "17",
                        "minAge": "9"
                    }
                ],
                "type": "OccupancyRate",
                "rates": [
                    {
                        "adultCount": 1,
                        "amountBeforeTax": [
                            502.19,
                            502.19,
                            502.19,
                            502.19
                        ],
                        "amountAfterTax": [
                            623.23,
                            623.23,
                            623.23,
                            623.23
                        ]
                    },
                    {
                        "adultCount": 2,
                        "amountBeforeTax": [
                            520.19,
                            520.19,
                            520.19,
                            520.19
                        ],
                        "amountAfterTax": [
                            641.23,
                            641.23,
                            641.23,
                            641.23
                        ]
                    }
                ]
            },
            "availStatuses": {
                "close": [
                    false,
                    false,
                    false,
                    false
                ],
                "minStayArrival": [
                    0,
                    2,
                    0,
                    0
                ],
                "maxStayArrival": [
                    0,
                    2,
                    0,
                    0
                ],
                "minStayThrough": [
                    0,
                    2,
                    0,
                    0
                ],
                "maxStayThrough": [
                    0,
                    2,
                    0,
                    0
                ],
                "minAdvanceDay": [
                    0,
                    2,
                    0,
                    0
                ],
                "maxAdvanceDay": [
                    365,
                    365,
                    365,
                    365
                ],
                "cta": [
                    false,
                    false,
                    false,
                    true
                ],
                "ctd": [
                    false,
                    false,
                    false,
                    true
                ],
                // fplos restriction
                "fplos": [
                    "1111111",
                    "1001111",
                    "1000001",
                    "0000000"
                ]
            },
            "rateChangeIndicators": [
                true,
                false,
                true,
                false
            ]
        }
    ]
}

注意事项


GO 遵循数据透传原则即从酒店供应商获取餐食计划,然后提供给渠道。但当迪士尼未提供餐食计划时,GO 设置默认餐食代码 RO 并提供给渠道。以下为当前迪士尼的餐食计划列表。


餐食计划代码描述
QSDisney Quick Service Dining Plan
DPDisney Dining Plan
DPPDisney Dining Plan Plus
XDDisney Deluxe Dining Plan
QSMDisney Quick Service Meal


访问 Disney官网 获取更多信息。