25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

320 lines
16 KiB

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Steven
  5. * Date: 2017/3/12
  6. * Time: 0:40
  7. * 接口调用方:携程
  8. * 接口返回方:合作方(us)
  9. */
  10. require_once dirname(__DIR__) . '/Common/Utils.php';
  11. class Hotel
  12. {
  13. public $obj_utils = '';
  14. public $Currency = 'RMB';
  15. public function __construct()
  16. {
  17. $this->obj_utils = new roomOrderUtils();
  18. }
  19. /**
  20. * User:Steven
  21. *
  22. * Desc:DomesticCheckRoomAvail (可定检查)
  23. * 1.接口调用方:携程
  24. * 2.接口返回方:合作方
  25. * 3.调用频率:订单量的10倍以上
  26. * 4.使用说明:携程在给酒店下订单前,调用合作方接口。通过传入客人入住信息,得 到该房型是否可订。该接口响应时间(含网络)需要在3秒以内
  27. */
  28. public function DomesticCheckRoomAvail()
  29. {
  30. $rec_info = file_get_contents("php://input");
  31. $OrderData = $this->obj_utils->data_to_xml($rec_info); //将xml转化成数组
  32. $roomInfo = $OrderData['HotelGroupInterfaceRoomTypeListRequest'];
  33. $hotel = $roomInfo['Hotel']; //酒店编号
  34. $Arrival = $roomInfo['Arrival ']; //到店日期
  35. $Departure = $roomInfo['Departure ']; //离店日期
  36. $Room = $roomInfo['Room ']; //房型编号
  37. $CurrencyCode = $roomInfo['CurrencyCode ']; //币种(可空)
  38. $RoomNumber = $roomInfo['RoomNumber ']; //预定间数
  39. $Person = $roomInfo['Person']; //入住人数
  40. $BalanceType = $roomInfo['BalanceType']; //价格类型
  41. foreach ($roomInfo['RoomPrices'] as $item) {
  42. $EffectDate = $item['EffectDate']; //入住日期
  43. $Price = $item['Price']; //卖价
  44. $CNYPrice = $item['CNYPrice']; //汇率后的卖价(可空)
  45. $Cost = $item['Cost']; //底价
  46. $CNYCost = $item['CNYCost']; //汇率后的底价(可空)
  47. $BreakFast = $item['BreakFast']; //含早餐数
  48. $pdo = conn();
  49. //$sql="CALL HT_CHECKROOM_AVAIL($Arrival,$Departure,$Room,$RoomNumber)";
  50. $sql = "CALL HT_CHECKROOM_AVAIL('2016-08-23','2016-08-28','152248',3)";
  51. if (is_object($pdo)) {
  52. $result = $pdo->query($sql);
  53. $json2 = $result->fetchAll(PDO::FETCH_ASSOC); //返回一个包含结果集中所有行的数组
  54. var_dump($json2);
  55. }
  56. }
  57. $roomInfo_arr['RequestResponse']['RequestResult'] = array();
  58. $RequestResult = $roomInfo_arr['RequestResponse']['RequestResult'];
  59. $pdo = conn();
  60. //$sql="CALL HT_CHECKROOM_AVAIL($Arrival,$Departure,$Room,$RoomNumber)";
  61. $sql = "CALL HT_CHECKROOM_AVAIL('2016-08-23','2016-08-23','152248',3,0,0)";
  62. if (is_object($pdo)) {
  63. $result = $pdo->query($sql);
  64. $res_arr = $result->fetchAll(PDO::FETCH_ASSOC); //返回一个包含结果集中所有行的数组
  65. //var_dump($res_arr);
  66. $RequestResult['Message'] = empty($res_arr) ? '不可定' : '可定';
  67. $RequestResult['ResultCode'] = empty($res_arr) ? 101 : 0;
  68. $availInfo['IsBookable'] = empty($res_arr) ? 0 : 1;
  69. $availInfo['Room'] = empty($res_arr) ? '' : $res_arr[0]['PROD_ID'];
  70. $availInfo['InterFaceAmount'] = empty($res_arr) ? '' : '';//接口订单金额
  71. $availInfo['ReturnDescript'] = empty($res_arr) ? '' : ''; //错误描述
  72. if (!empty($res_arr) && is_array($res_arr) || count($res_arr) > 0)
  73. foreach ($res_arr as $item) {
  74. $roomPrice['RoomPrice'] = array();
  75. $roomPrice['RoomPrice']['EffectDate'] = $item['RUN_DATE'];
  76. $roomPrice['RoomPrice']['Price'] = 0;
  77. $roomPrice['RoomPrice']['CNYPrice'] = 0;
  78. $roomPrice['RoomPrice']['Cost'] = $item['HT_ORDER_PRICE'];
  79. $roomPrice['RoomPrice']['CNYCost'] = 0;
  80. $roomPrice['RoomPrice']['BreakFast'] = $item['HT_BREAKFAST'];
  81. $availInfo['RoomPrices'][] = $roomPrice;
  82. }
  83. $RequestResult['DomesticCheckRoomAvailResponse'] = $availInfo;
  84. $roomInfo_arr['RequestResponse']['RequestResult'] = $RequestResult;
  85. }
  86. return $roomInfo_arr;
  87. }
  88. /**
  89. * User:Steven
  90. *
  91. * Desc: DomesticSubmitNewHotelOrder (新订订单)
  92. * 1-1.接口调用方:携程/合作方
  93. * 1-2.接口返回方:合作方/携程
  94. * 1-3.调用频率:频繁
  95. * 1-4.使用说明:通过该接口,提交订单给对方系统
  96. * @return mixed
  97. */
  98. public function DomesticSubmitNewHotelOrderRequest()
  99. {
  100. $rec_info = file_get_contents("php://input");
  101. $OrderData = $this->obj_utils->data_to_xml($rec_info); //将xml转化成数组
  102. $orderInfo = $OrderData['DomesticSubmitNewHotelOrderRequest'];
  103. //var_dump($orderInfo);
  104. $OrderID = $orderInfo['OrderID']; //订单号
  105. $InterFaceSendID = $orderInfo['InterFaceSendID']; //订单接口发送号,同一订单每次发送编号会不同,接收方需落地保存
  106. $Hotel = $orderInfo['Hotel']; // 酒店编号
  107. $HotelName = $orderInfo['HotelName']; //酒店名
  108. $Arrival = $orderInfo['Arrival']; //入住日期
  109. $Departure = $orderInfo['Departure']; //离店日期
  110. $EarlyArrivalTime = $orderInfo['EarlyArrivalTime']; //最早到店时间
  111. $LastArrivalTime = $orderInfo['LastArrivalTime']; //最晚到店时间
  112. $Person = $orderInfo['Person']; //实际入住人数
  113. foreach ($orderInfo['Guests']['GuestEntity'] as $item) {
  114. $FirstName = $item['FirstName'];
  115. $LastName = $item['LastName'];
  116. $ChinesName = $item['ChinesName'];
  117. }
  118. $MobilePhone = $orderInfo['MobilePhone']; //携程联系电话
  119. $Currency = $orderInfo['Currency']; //订单币种
  120. $Amount = $orderInfo['Amount']; //订单卖价总金额(原币种),预付一般不传或者传0
  121. $CNYAmount = $orderInfo['CNYAmount']; //订单卖价总金额(人民币),预付一般不传或者传0
  122. $GuaranteeType = $orderInfo['GuaranteeType']; //担保方式
  123. $BalanceType = $orderInfo['BalanceType']; //支付方式
  124. $Room = $orderInfo['Room']; //Ctrip房型编号,供应商需要转成自己的对应编号
  125. $RoomPerson = $orderInfo['RoomPerson']; //房型最大入住人数
  126. $RoomName = $orderInfo['RoomName']; //房型名称
  127. $Quantity = $orderInfo['Quantity']; //预定间数
  128. $CostAmount = $orderInfo['CostAmount']; //订单底价金额(原币种),现付一般不传或者传0
  129. $CNYCostAmount = $orderInfo['CNYCostAmount']; //订单底价金额(人民币),现付一般不传或者传0
  130. foreach ($orderInfo['RoomPrices']['RoomPrice'] as $item) { //每个RoomPrice对应一天价格
  131. $EffectDate = $item['EffectDate'];
  132. $Price = $item['Price']; //订单卖价金额(原币种),预付一般不传或者传0
  133. $CNYPrice = $item['CNYPrice']; //订单卖价金额(人民币),预付一般不传或者传0
  134. $Cost = $item['Cost']; //订单底价金额(原币种),现付一般不传或者传0
  135. $CNYCost = $item['CNYCost']; //-订单底价金额(人民币),现付一般不传或者传0
  136. $BreakFast = $item['BreakFast']; //早餐数量
  137. }
  138. //先判断此房间是否可定
  139. $pdo = conn();
  140. echo $sql = "CALL HT_CHECKROOM_AVAIL($Arrival,$Departure,$Room,$Quantity,$CostAmount,$BreakFast)";
  141. //$sql = "CALL HT_CHECKROOM_AVAIL('2016-08-23','2016-08-23','152248',3,0,0)";
  142. if (is_object($pdo)) {
  143. $result = $pdo->query($sql);
  144. $json = $result->fetchAll(PDO::FETCH_ASSOC); //返回一个包含结果集中所有行的数组
  145. if ($json) {
  146. //TODO:添加订单信息
  147. $sql = "";
  148. //返回信息
  149. $orderInfo_arr['RequestResponse']['RequestResult'] = array();
  150. $RequestResult = $orderInfo_arr['RequestResponse']['RequestResult'];
  151. $RequestResult['Message'] = "";
  152. $ResultCode['ResultCode'] = "";
  153. $orderStatus['OrderStatus'] = ''; //订单状态(0:发送中;1:已发送;2:发送失败;3:酒店确认成功;4:酒店 拒绝;5其他)
  154. $orderStatus['InterFaceConfirmNO'] = ""; //接口确认号,酒店确认号
  155. $orderStatus['HotelConfirmNo'] = ""; //供应商确认号
  156. $orderStatus['InterFaceAmount'] = ""; //接口订单金额
  157. $orderStatus['ReturnCode'] = ""; //错误代码
  158. $orderStatus['ReturnDescript'] = ""; //返回描述
  159. $RequestResult['DomesticSubmitNewHotelOrderResponse'] = $orderStatus;
  160. return $RequestResult;
  161. }
  162. }
  163. }
  164. /**
  165. * User:Steven
  166. *
  167. * Desc: DomesticModifyHotelOrder(修改酒店订单)
  168. * 1-1.接口调用方:携程/合作方
  169. * 1-2.接口返回方:合作方/携程
  170. * 1-3.调用频率:频繁
  171. * 1-4.使用说明:通过该接口,提交订单给对方系统
  172. * @return mixed
  173. */
  174. public function DomesticModifyHotelOrder()
  175. {
  176. $rec_info = file_get_contents("php://input");
  177. $OrderData = $this->obj_utils->data_to_xml($rec_info); //将xml转化成数组
  178. $orderInfo = $OrderData['DomesticModifyHotelOrderRequest'];
  179. $OrderID = $orderInfo['OrderID']; //订单号
  180. $InterFaceSendID = $orderInfo['InterFaceSendID']; //订单接口发送号,同一订单每次发送编号会不同,接收方需落地保存
  181. $OldOrderID = $orderInfo['OldOrderID']; //上一个订单号
  182. $Ori_OrderID = $orderInfo['Ori_OrderID']; //原始订单号
  183. $Hotel = $orderInfo['Hotel']; //-Ctrip酒店编号,供应商需要转成自己的对应编号
  184. $HotelName = $orderInfo['HotelName'];
  185. $Arrival = $orderInfo['Arrival'];
  186. $Departure = $orderInfo['Departure'];
  187. $EarlyArrivalTime = $orderInfo['EarlyArrivalTime'];
  188. $LastArrivalTime = $orderInfo['LastArrivalTime'];
  189. $Person = $orderInfo['Person'];
  190. foreach ($orderInfo['Guests'] as $k => $v) {
  191. $FirstName = $v;
  192. $LastName = $v;
  193. $ChinesName = $v;
  194. }
  195. $MobilePhone = $orderInfo['MobilePhone']; //-携程联系电话
  196. $Currency = $orderInfo['Currency'];
  197. $Amount = $orderInfo['Amount'];
  198. $CNYAmount = $orderInfo['CNYAmount'];
  199. $GuaranteeType = $orderInfo['GuaranteeType'];
  200. $BalanceType = $orderInfo['BalanceType'];
  201. $Room = $orderInfo['Room'];
  202. $OldRoom = $orderInfo['OldRoom']; //上个预订房型
  203. $RoomPerson = $orderInfo['RoomPerson'];
  204. $RoomName = $orderInfo['RoomName'];
  205. $Quantity = $orderInfo['Quantity']; //预定间数
  206. $CostAmount = $orderInfo['CostAmount']; //订单底价金额(原币种),现付一般不传或者传0
  207. $CNYCostAmount = $orderInfo['CNYCostAmount']; //订单底价金额(人民币),现付一般不传或者传0
  208. foreach ($orderInfo['RoomPrices'] as $item) { //每个RoomPrice对应一天价格
  209. $EffectDate = $item['EffectDate'];
  210. $Price = $item['Price']; //订单卖价金额(原币种),预付一般不传或者传0
  211. $CNYPrice = $item['CNYPrice']; //订单卖价金额(人民币),预付一般不传或者传0
  212. $Cost = $orderInfo['Cost']; //订单底价金额(原币种),现付一般不传或者传0
  213. $CNYCost = $orderInfo['CNYCost']; //-订单底价金额(人民币),现付一般不传或者传0
  214. $BreakFast = $orderInfo['BreakFast']; //早餐数量
  215. $OldPrice = $orderInfo['OldPrice']; //-上个订单卖价金额(原币种),预付一般不传或者传0
  216. }
  217. //检查修改后的房型是否可定
  218. $pdo = conn();
  219. //$sql="CALL HT_CHECKROOM_AVAIL($Arrival,$Departure,$Room,$Quantity,$CostAmount,$BreakFast)";
  220. $sql = "CALL HT_CHECKROOM_AVAIL('2016-08-23','2016-08-23','152248',3,0,0)";
  221. if (is_object($pdo)) {
  222. $result = $pdo->query($sql);
  223. $json = $result->fetchAll(PDO::FETCH_ASSOC); //返回一个包含结果集中所有行的数组
  224. if ($json) {
  225. //TODO:修改订单信息
  226. //返回信息
  227. $orderInfo_arr['RequestResponse']['RequestResult'] = array();
  228. $RequestResult = $orderInfo_arr['RequestResponse']['RequestResult'];
  229. $RequestResult['Message'] = "";
  230. $ResultCode['ResultCode'] = "";
  231. $orderStatus['OrderStatus'] = ''; //订单状态(0:发送中;1:已发送;2:发送失败;3:酒店确认成功;4:酒店 拒绝;5其他)
  232. $orderStatus['InterFaceConfirmNO'] = ""; //接口确认号,酒店确认号
  233. $orderStatus['HotelConfirmNo'] = ""; //供应商确认号
  234. $orderStatus['InterFaceAmount'] = ""; //接口订单金额
  235. $orderStatus['ReturnCode'] = ""; //错误代码
  236. $orderStatus['ReturnDescript'] = ""; //返回描述
  237. $RequestResult['DomesticModifyHotelOrderResponse'] = $orderStatus;
  238. return $RequestResult;
  239. }
  240. }
  241. }
  242. /**
  243. * User:Steven
  244. *
  245. * Desc: DomesticCancelHotelOrder (取消订单)
  246. * 1-1.接口调用方:携程/合作方
  247. * 1-2.接口返回方:合作方/携程
  248. * 1-3.调用频率:频繁
  249. * 1-4.使用说明:通过该接口,提交订单给对方系统
  250. * @return mixed
  251. */
  252. public function DomesticCancelHotelOrder()
  253. {
  254. $rec_info = file_get_contents("php://input");
  255. $OrderData = $this->obj_utils->data_to_xml($rec_info); //将xml转化成数组
  256. $cancelOrderInfo = $OrderData['DomesticCancelHotelOrderRequest'];
  257. $OrderID = $cancelOrderInfo['OrderID'];
  258. $OldOrderID = $cancelOrderInfo['OldOrderID'];
  259. $Ori_OrderID = $cancelOrderInfo['Ori_OrderID'];
  260. $InterFaceSendID = $cancelOrderInfo['InterFaceSendID'];
  261. $InterFaceConfirmNO = $cancelOrderInfo['InterFaceConfirmNO'];
  262. $Hotel = $cancelOrderInfo['Hotel'];
  263. $HotelName = $cancelOrderInfo['HotelName'];
  264. $Arrival = $cancelOrderInfo['Arrival'];
  265. $Departure = $cancelOrderInfo['Departure'];
  266. $Person = $cancelOrderInfo['Person'];
  267. $ClientName = $cancelOrderInfo['ClientName'];
  268. $Room = $cancelOrderInfo['Room'];
  269. $RoomName = $cancelOrderInfo['RoomName'];
  270. $Quantity = $cancelOrderInfo['Quantity']; //注意确认几个半闭合标签是否存在
  271. //TODO:取消订单逻辑;
  272. //返回结果
  273. $orderInfo_arr['RequestResponse']['RequestResult'] = array();
  274. $RequestResult = $orderInfo_arr['RequestResponse']['RequestResult'];
  275. $RequestResult['Message'] = "";
  276. $RequestResult['ResultCode'] = "";
  277. $orderStatus['OrderStatus'] = ''; //订单状态(0:发送中;1:已发送;2:发送失败;3:酒店确认成功;4:酒店 拒绝;5其他)
  278. $orderStatus['OrderID'] = "";
  279. $orderStatus['InterFaceConfirmNO'] = "";
  280. $orderStatus['ReturnCode'] = "";
  281. $orderStatus['ReturnDescript'] = ""; //错误代码
  282. $RequestResult['DomesticCancelhotelOrderResponse'] = $orderStatus;
  283. return $RequestResult;
  284. }
  285. /**
  286. * User:Steven
  287. *
  288. * Desc: DomesticPushOrderStatus(订单状态推送)
  289. * 1-1.接口调用方:携程/合作方
  290. * 1-2.接口返回方:合作方/携程
  291. * 1-3.调用频率:频繁
  292. * 1-4.使用说明:订单非立即确认时调用该接口,接收方收到订单后,当订单状态变化时, 需及时推送订单状
  293. */
  294. public function DomesticPushOrderStatus()
  295. {
  296. }
  297. }