Travelport / travelport-uapi-tutorial

The travelport-uapi-tutorial is a Java project for Universal API that will help you connect and code a standard workflow including Air and Hotel.
45 stars 34 forks source link

trial uapi returning error in php #1

Closed nazmulmr closed 6 years ago

nazmulmr commented 9 years ago

getting error: 400TPGateway - Request data not found - Request ignored - service name = AirService username = Universal API/uAPI-408683863 TPGateway - Request data not found - Request ignored - service name = AirService username = Universal API/uAPI-408683863400TPGateway - Request data not found - Request ignored - service name = AirService username = Universal API/uAPI-408683863 TPGateway - Request data not found - Request ignored - service name = AirService username = Universal API/uAPI-408683863 1 Array ( [url] => https://apac.universal-api.pp.travelport.com/B2BGateway/connect/uAPI/AirService [content_type] => text/xml;charset=ISO-8859-1 [http_code] => 400 [header_size] => 219 [request_size] => 1111 [filetime] => -1 [ssl_verify_result] => 20 [redirect_count] => 0 [total_time] => 0.906 [namelookup_time] => 0 [connect_time] => 0.297 [pretransfer_time] => 0.609 [size_upload] => 779 [size_download] => 682 [speed_download] => 752 [speed_upload] => 859 [download_content_length] => -1 [upload_content_length] => 779 [starttransfer_time] => 0.906 [redirect_time] => 0 [certinfo] => Array ( ) [primary_ip] => 216.113.131.96 [primary_port] => 443 [local_ip] => 192.168.1.41 [local_port] => 37821 [redirect_url] => )

vivekjyotipramanik commented 9 years ago

Hi nazmulmr,

We have made a few changes in the code, could you please give it a try again and let us know if you are facing the same issues. Please let us know how it goes. Thanks.

Thanks & Regards Vivekjyoti Pramanik

nazmulmr commented 9 years ago

In My Code: I have put trial API information of the TARGETBRANCH and CREDENTIALS. Details code is in below: <?php /*

$return = curl_exec($soap_do); print '
'; echo $return; print '
'; print_r(curl_getinfo($soap_do)); //print_r($soap_do); echo '
'; //var_dump($soap_do); //echo '
'.$soap_do; //$response= curl_exec($soap_do); //$error= curl_error($soap_do); ?>

nazmulmr commented 9 years ago

Hi, Now getting this using: 504Service Request failed Service Request failed

//Nazmul

nazmulmr commented 9 years ago

Hi, Now getting below reply. \H4sIAAAAAAAAAFvzloG1hIHVNSg41AgAqOI+SAwAAAA={IS@@@}H4sIAAAAAAAAAFvzloG1hIExEgDXiqbdCAAAAA=={FB@@@}H4sIAAAAAAAAAFvzloG1hIHZxz0cADpCHngKAAAA{OR@@@}H4sIAAAAAAAAAFvzloG1hIHZ1cUTABUX7aYKAAAA{DE@@@}H4sIAAAAAAAAAFvzloG1hIExEgDXiqbdCAAAAA=={CS@@@}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{IS@@@}H4sIAAAAAAAAAFvzloG1hIHRCQA7Q8NXCAAAAA=={FB@@@}H4sIAAAAAAAAAFvzloG1hIHZxz0cADpCHngKAAAA{OR@@@}H4sIAAAAAAAAAFvzloG1hIHZ1cUTABUX7aYKAAAA{DE@@@}H4sIAAAAAAAAAFvzloG1hIHRCQA7Q8NXCAAAAA=={CS@@@}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{IS@@@}H4sIAAAAAAAAAFvzloG1hIHRCQA7Q8NXCAAAAA=={FB@@@}H4sIAAAAAAAAAFvzloG1hIHZxz0cADpCHngKAAAA{OR@@@}H4sIAAAAAAAAAFvzloG1hIHZ1cUTABUX7aYKAAAA{DE@@@}H4sIAAAAAAAAAFvzloG1hIHRCQA7Q8NXCAAAAA=={CS@@@}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{IS@@@}H4sIAAAAAAAAAFvzloG1hIExHADQpx46CAAAAA=={FB@@@}H4sIAAAAAAAAAFvzloG1hIHZxz0cADpCHngKAAAA{OR@@@}H4sIAAAAAAAAAFvzloG1hIHZ1cUTABUX7aYKAAAA{DE@@@}H4sIAAAAAAAAAFvzloG1hIExHADQpx46CAAAAA=={CS@@@}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{IS@@@}H4sIAAAAAAAAAFvzloG1hIExHADQpx46CAAAAA=={FB@@@}H4sIAAAAAAAAAFvzloG1hIHZxz0cADpCHngKAAAA{OR@@@}H4sIAAAAAAAAAFvzloG1hIHZ1cUTABUX7aYKAAAA{DE@@@}H4sIAAAAAAAAAFvzloG1hIExHADQpx46CAAAAA=={CS@@@}H4sIAAAAAAAAAK1aS3PjxhGGHrur1UpaabVrx3at4/czIkFKu5JWJz72wRTXYkRKrvJlawSMSGRBAJ4ZSlCqkiqXLznllCpXDqmKK9fc8gNyzCXlQ/6A8wfyG5JuDAYYgATkuKKDRA56ZvrdXzf0l38b1zgzPrH8cWVY5xeOsEaVsW9Tl1cIfGw4rMccizYC54h+OaFcGPJnbt5Y7BrLp/b4hDLu+J4w7nR/Sc5J1SXesNoXzPGGB11jzRcEDgnwEDhBGB914a6quqsq76rCXdXDQUNdB5Sw98a5PPpL4zfGXNe4Fo5dj0dfwkAYC7WKCax/UMR69riU7ZtdY4U4rCMcjzLCLoXxQSFLDY0OGHpV34cng4wd78wXRu0HHaFtQdXAaUeUU3ZORKTAYtU0MpSw986p77+Eo47oGWXUs2inLYyfFe5vTlHDGTepNfIH/kuqFLwQ+GDf+4Wn9A77sG2FU45WQSmA/J60+kQ4brXBGLnsOlwA2aZg5Jy6lCFdfzIeR6reKjx8ME2ed4EwAHu/V+KqiaJTa88Dw7bDqCUilu1Y1Dd85gwdrw0O7XiRUg8D/I3MI8mtMMDLNlG2CspWSWQLv/rn/T/8nfxxwZjrGIvc+RUNA7zrYhF/w6ZqoUfOvjNlFhjbOHOd4Uj06XBMPaGxEzn+euai94sueqKfkR7/Rte4TQKHYySDSvChMD4udrpep6+RRh7LmHNOXAxon5VvliRd31Iuezve3CaCDpwxjS2xES/j0uHZGacifvB67OItl3DeOCeO2yKnjje4DNTWe1MUib66xhJwhmyDi65rLhp757pNA8LEhNGYUdz1KnCTrOfYXNEeXMZrm8naFPN3YMl6ScVjsIRz6riOUJtWUaOBbtyfwKK0epsKEAI4/rBQr090QoxGufOzyfiUsviKZQdjyJ8wS3G/DuEE3ICuQFwXgkQYnxRe8TxHC7fcGqOVyJA+ZUF85NKYErcFu5RcXsRCx+uBSpSw634A8fgD7z3M0cK990G/oKmCwClLuwVb0PSMcsyH8MwZagIssGAUf7zOBRETrkzPhR/8YkI8kVrxrgD1SoZ9Jm3SacdJChPHhyVZSo+LNDivgZYtoGuBXDRUfrQ4BDdUfLjxJo3pzfHEFU58aAv4gxQnjE2tEoOoLiUo+JKgbAzacJMSuthpDBpYSh+3OwH8vV83aztbtfrWdm1g7j96YD4yzYppmp+a+CmYlYM+LhK0mY/NDHAoMsJdfT2n81f0Z/3IQrPMh4LNfR4EQZwz38Rfb6OU3aefT0m596j+ICdlZMArcmscgBmZ7spQ7NJh/FQL8NsCcJAr92pZRS4/Zf7Es7Xl1Wh5wJwgWQyR81u9gVl7Vn/w3DT78pv5zDTTb+mzhT1zG8X4qEiMfJBnHHHRSvU6wynX4dCAeJf9ETjdZySVhsN5Lj2hnu2ztNauSCTQhxrss8RE88d1aRj8AYvVyrjNp4b/B7ezMucVrMZ6jVLgh8izMK5vm5X+ADQ+ZwZhWFb9C4BgKsoN5AnyHa5qhWzVgV2DyH3gYVlt6OiECMH8KOcRkIedAwzW/PG13COuXbBdkqELNsFlG8GghR+bjJKXtn8hkTryH0hhMwXpNqOqJUB8YSt8N51g3ioMxFhVqQJvzUAo7xQKo0GTmWigCaxn0IBi3Xa4BQErYiOWoaB2lvQAKz2wneDw0kqvE0Y7AUZohfTtMuwV1881jw594QDzNh6nwEl2VUuiryZGgcKJymVjclWl7c3eggWHTVwq+6NiMxzFNCihCMjjUFAPEX8pChr0GinhQdQXFPrJdKmdn5knpstrKCP9ncgrfx59/jhQP2Ewsx4WprBeLjwypWMNvaJJuBNVNK5QYQC1k3pDyq6K/J5OCJq8l+xEuKzqqDCqV5+gb8BGU7Vx4IoyVUru/seGRBcvI/lqRnKVsjNN0FHvWYIxfXFCXMdunIkkZ6+pxSYF56NJ1p77HDN0BAOYsVVolllyZ1xl2RoBjqLk1FXsLX2pA5OwRG7V1LYwCWSK1lIO3CwcH3XUR8DZCv6VlbZQVs6FRnsQV1BlESOyiBHGFG+19ndqze163WyYuw93tlu79eZefdds1p88fNLcaT0BBb1RqKDDfqZBXeZRHi/vTN8sOk0WgfTADejziG07sq70mH/uYEwnc5Wd4iRXuAszCajQE+2JuNS86ma02IfMqDI5kYkyBixtpWgSw+l065rqNMEVPOqWjWqaGUrs0CBkAnSzC58pSLSMa8ecMketrINVGWk6LuZ4qDakrFN6nKPFEnbmMA6wFOtVz3c8ldWWHe5H3seUp93ClQnDsqKWlgKfOzLPFyfqXkyDZSXgdGL72G9oSoKaHhUBUKWtQY1l1XYkCr4tot44wQRlFXSQJZW5vl6IsQqdIhPSr3i+98znomEBiOFACqWVdpQpNuVsqBEEriMrQtLaQWt13Oh1XtROXtR364MXuw2z1tiDRgpX4eka/t3aMfce7m3vPdwG6Fg7CcqGlFlvSZlciOI9wq0IWYXxfqGGWikZDsygguPsTCUQocYlkeLeLeJDOyRl4vqPxtaK90FKCkueIFYGgc9E29ceH/WP65jXWlHe35ZJ7Fq90mwN4MPSvvypl1XbfIRkas5UItgY5Z1BMS1dAVq0dj+/1Gu10s7s3nH7RaN32O0eJo5hms2I8fnjPv5ZxPXy2UDO17NzwSRmMlEXDcLbjz8LZyThQmP30wFuxuNyWQ5PtEBgnpRhBenvaCPgBCEWT5/7U9QHcdXwJMKazOD+nWLuFTsZBS0omBDV/lpY9lZjmqFMetikiC1tasd06EDK+jy3FFm/Bq7ab5+btW6vXXv0YMeqb5/un25Z+9tka2fX3tkiNj3d2t9+uEut+n79gbWP7H16FWrQRuEZ7HAXCpSiyY89ATNeonrkCKIcM2qEWKcU9sdr8bQnkaGJ4DG4p7Z2zz0eUMs5cyzAtS+g18dMKYP4pzMRQWGkNnKyZGG6JmlZDtQOAUlem4l+dcRSEhzaUZf/+vrb7//6t/V5Yx2cglgyqTnUbl6CjkhSY28BgmHgF5p6bp46TIy0rnHFikuuXjCtCRdd/5K4Gnc4avatSWb6j+9qxlk7381DZO3Z9SF6L5t6sYUTcd+rUm8y5tWnEQ0qCOe7ckZKtDn1RkaJGtezewt82INiHwCy8T1Zs94stFdcrFYFqDkY+R7VuN+Y6jiE8emVr40SYuw7J54DHouvxIrhzHFMcxCWvFPq4TDBusQBXZBxzDU+gr5FDtHSSddqtNq/9KyRWowg+BQwn7H0IxZk8vxi1mElg9kpjX3/6/3//Pb3X/0pEkybgq/zCfPAUAmhll5LO26l2q+3v/vWO/nkm3ngqETJihzdKQM+dASEd/tdYz4BzDcdO4tFlhyPC+IlI6YU+oBUE6am3liRezX8IhBV1CrHncF0wsLvOEOOFRxVlLCsw81k00x/s3RKvJcALkqHUc2YBoPCInyUyahR+gCE0oILaNqnLMv3mohyhPFeyQxKUWGgDyeEQcRSmhxzJ13KpHGIxORJLgVsuDJpHVGbjuNXMcUh2s0T48vAscMtwBlsSA9ZlKuKW4DnWdKDtMg1xtjZ/IAiJwlR/nhnizC7rKD0UjLY9Xq8C0LH4yR6lZzTiDpXezupRRIUS8is8Zl5La9IZOfpc+gb5/7EGqFaiqd8J5LkIMQ93wTaT1l50wRLvXQFboxrWOlcUZKAQq6jTycetGTBaXq3jN+f+S4YS0P7q+lqOtFZxsXMCD46TFPjKj07w7f35/oMdpmGgZOZykJXyyc0c9L6mPCX1G7lb1jGvpum86ZUgZAaTjqy26hVWjhWiXuPB5Xe80Gs2sIBf8EgNFXzMkIFKxoI6+V+FjLIzZhxuRUPy6DiugC8EnFemZ7maqdvZp/yQ89N3kTPGszfiAfzyokFCcv+JWRAQoSO+uAWdz4Lp2sSNCpPm72ZxbD8jVtm2Ks57RfGKqMCalQTwtLutHGgI7V7zCmOlXnpPyhkSaOhkev6F1hB5OypXjqab5LhEPrIhr4HX4Oc5tZ52dR11kHIyo1TKZIKKPnSAF/i65gwWpVyvlv+GiGW8K566yPTKY9wjTAqV77w0emj/MsoJJJYhaX5VycsaDJuxw0mcqojXD4JcAxHbckF1wC8gQ5jlk+bp83zuzW7/ec7Xw2hX/zCuEdDy53YtE05c6ILcFgRBnMqif4IPAYuXq+YuPwPYTRGQgSPqtWLi4vKEELWpX4F1SRsXuXyBRqwEM2Wq8m/2fU68bu1ar1q/hczAYf0nScAAA==H4sIAAAAAAAAAFvzloG1hIHVNSg41AgAqOI+SAwAAAA={IS@@@}H4sIAAAAAAAAAFvzloG1hIExHADQpx46CAAAAA=={FB@@@}H4sIAAAAAAAAAFvzloG1hIHZxz0cADpCHngKAAAA{OR@@@}H4sIAAAAAAAAAFvzloG1hIHZ1cUTABUX7aYKAAAA{DE@@@}H4sIAAAAAAAAAFvzloG1hIExHADQpx46CAAAAA=={CS@@@}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{IS@@@}H4sIAAAAAAAAAFvzloG1hIExEgDXiqbdCAAAAA=={FB@@@}H4sIAAAAAAAAAFvzloG1hIHZxz0cADpCHngKAAAA{OR@@@}H4sIAAAAAAAAAFvzloG1hIHZ1cUTABUX7aYKAAAA{DE@@@}H4sIAAAAAAAAAFvzloG1hIExEgDXiqbdCAAAAA=={CS@@@}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{IS@@@}H4sIAAAAAAAAAFvzloG1hIExEgDXiqbdCAAAAA=={FB@@@}H4sIAAAAAAAAAFvzloG1hIHZxz0cADpCHngKAAAA{OR@@@}H4sIAAAAAAAAAFvzloG1hIHZ1cUTABUX7aYKAAAA{DE@@@}H4sIAAAAAAAAAFvzloG1hIExEgDXiqbdCAAAAA=={CS@@@}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{IS@@@}H4sIAAAAAAAAAFvzloG1hIHRCQA7Q8NXCAAAAA=={FB@@@}H4sIAAAAAAAAAFvzloG1hIHZxz0cADpCHngKAAAA{OR@@@}H4sIAAAAAAAAAFvzloG1hIHZ1cUTABUX7aYKAAAA{DE@@@}H4sIAAAAAAAAAFvzloG1hIHRCQA7Q8NXCAAAAA=={CS@@@}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{IS@@@}H4sIAAAAAAAAAFvzloG1hIHZ3SkAAD3MWJcKAAAA{CC@@@ET}ACHSDv01LPD1:54c23b9b-c93a-47d4-adeb-9367ec2925c9H4sIAAAAAAAAAFvzloG1hIHVNSg41AgAqOI+SAwAAAA={IS@@@}H4sIAAAAAAAAAFvzloG1hIHZ3SkAAD3MWJcKAAAA{CC@@@ET}ACHSDv01LPD1:888473ef-f77a-4131-ba0c-c2125d1562ebH4sIAAAAAAAAAFvzloG1hIHVNSg41AgAqOI+SAwAAAA={IS@@@}H4sIAAAAAAAAAFvzloG1hIHZ3SkAAD3MWJcKAAAA{CC@@@ET}ACHSDv01LPD1:616cea31-823e-4b43-90cb-f6ff3a9fc120H4sIAAAAAAAAAFvzloG1hIHVNSg41AgAqOI+SAwAAAA={IS@@@}H4sIAAAAAAAAAFvzloG1hIHZ3SkAAD3MWJcKAAAA{CC@@@ET}ACHSDv01LPD1:985a2629-284c-4e20-bc22-65338fa8c92dH4sIAAAAAAAAAFvzloG1hIHVNSg41AgAqOI+SAwAAAA={IS@@@}H4sIAAAAAAAAAFvzloG1hIHZ3SkAAD3MWJcKAAAA{CC@@@ET}ACHSDv01LPD1:c3b62989-3f7f-4b8c-812b-3c61bc7dc26fH4sIAAAAAAAAAFvzloG1hIHVNSg41AgAqOI+SAwAAAA={IS@@@}H4sIAAAAAAAAAFvzloG1hIHZ3SkAAD3MWJcKAAAA{CC@@@ET}ACHSDv01LPD1:7edfbab8-f33c-4f53-834a-c487a804417bH4sIAAAAAAAAAFvzloG1hIHVNSg41AgAqOI+SAwAAAA={IS@@@}H4sIAAAAAAAAAFvzloG1hIHZ3SkAAD3MWJcKAAAA{CC@@@ET}ACHSDv01LPD1:55a6eb2c-9ae2-42c9-a042-e21c9b2e97aeH4sIAAAAAAAAAFvzloG1hIHVNSg41AgAqOI+SAwAAAA={IS@@@}H4sIAAAAAAAAAFvzloG1hIHZ3SkAAD3MWJcKAAAA{CC@@@ET}ACHSDv01LPD1:da6b8b95-6daa-42bb-9ab6-a37c5ce954f4H4sIAAAAAAAAAFvzloG1hIHVNSg41AgAqOI+SAwAAAA={IS@@@}H4sIAAAAAAAAAFvzloG1hIHZ3SkAAD3MWJcKAAAA{CC@@@ET}ACHSDv01LPD1:9feca3fe-5bb3-4c33-a8e1-3a7847ad87b6 1 Array ( [url] => https://apac.universal-api.pp.travelport.com/B2BGateway/connect/uAPI/AirService [content_type] => text/xml [http_code] => 200 [header_size] => 404 [request_size] => 355 [filetime] => -1 [ssl_verify_result] => 20 [redirect_count] => 0 [total_time] => 3 [namelookup_time] => 0 [connect_time] => 0.391 [pretransfer_time] => 1.078 [size_upload] => 1046 [size_download] => 50462 [speed_download] => 16820 [speed_upload] => 348 [download_content_length] => -1 [upload_content_length] => 1046 [starttransfer_time] => 1.375 [redirect_time] => 0 [certinfo] => Array ( ) [primary_ip] => 216.113.131.96 [primary_port] => 443 [local_ip] => 192.168.0.101 [local_port] => 1869 [redirect_url] => )

//Nazmul

vivekjyotipramanik commented 9 years ago

Hi Nazmul,

Could you please let me know if you are using the below xml as input request. Actaully from you msg the XML is not visible, may be due to gitHub limitations. Also, could you please let me know the schema version you are using. Thanks.

<<<EOM

soapenv:Header/ soapenv:Body air:SearchAirLeg air:SearchOrigin /air:SearchOrigin air:SearchDestination /air:SearchDestination /air:SearchDepTime /air:SearchAirLeg air:AirSearchModifiers air:PreferredProviders /air:PreferredProviders /air:AirSearchModifiers /air:AvailabilitySearchReq /soapenv:Body /soapenv:Envelope EOM Thanks & Regards Vivekjyoti Pramanik
nazmulmr commented 9 years ago

need advice what will do now?

vivekjyotipramanik commented 9 years ago

Hi Nazmul,

Are you getting good response now? Could you please attach the xml response you are getting. Due to Github limitations I cannot see the XML response in correct format. Thanks.

Thanks & Regards Vivekjyoti Pramanik

nazmulmr commented 9 years ago

Hi Vivek,

Please find in attached the captured image. capture01 capture

//Nazmul Skype id: nazmulmr

nazmulmr commented 9 years ago

Hi Vivek,

Need assistance to make it meaningful. Thanks //Nazmul Skype: nazmulmr

vivekjyotipramanik commented 9 years ago

Hi Nazmul,

You should not be getting this kind of response. The response should be a structured soap envelope. Could you please try below code to save the response somewhere as XML file and if possible attach the XML file. Please let me know if you face any issues to run this code. Thanks.

//Pretty print XML function prettyPrint($result,$file){ $dom = new DOMDocument("1.0"); $dom->preserveWhiteSpace = false; $dom->formatOutput = true;
$dom->loadXML(simplexml_load_string($result)->asXML());

//call function to write request/response in file   
outputWriter($file,$dom->saveXML());
return $dom->saveXML();

}

$file = "001-_AirAvailReq.xml"; // file name to save the request xml for test only(if you want to save the request/response)

prettyPrint($message,$file); //call the method to print the request

$file = "001-_AirAvailRes.xml"; // file name to save the request xml for test only(if you want to save the request/response)

prettyPrint($return,$file); //call the method to print the return xml

vivekjyotipramanik commented 9 years ago

Hi Nazmul,

Did the above code work for you. Please let me know if you were able to get the XML req/rsp using the above code. Thanks.

Thanks & Regards Vivekjyoti Pramanik

nazmulmr commented 9 years ago

Hi Vivek, I am getting same encoded response.

Thanks, Nazmul

On Wed, Nov 26, 2014 at 3:36 AM, vivekjyotipramanik < notifications@github.com> wrote:

Hi Nazmul,

Did the above code work for you. Please let me know if you were able to get the XML req/rsp using the above code. Thanks.

Thanks & Regards Vivekjyoti Pramanik

— Reply to this email directly or view it on GitHub https://github.com/Travelport/travelport-uapi-tutorial/issues/1#issuecomment-64475172 .

vivekjyotipramanik commented 9 years ago

Hi Nazmul,

Could you please attach the req/rsp xml if you saved them using the above PrettyPrint code. Thanks.

airto commented 9 years ago

Actually I'm getting the same "encrypted" response.

vivekjyotipramanik commented 9 years ago

Hi airto,

I am working on it. The response is coming fine in my side. I will let you know shortly. Thanks.

Thanks & Regards Vivekjyoti Pramanik

airto commented 9 years ago

I found that the envelope tag seems to be not closed in firebug, not sure what I'm missing, I attached the message I'm using in screenshot. screen shot 2014-12-08 at 4 42 14 pm

vivekjyotipramanik commented 9 years ago

Hi airto,

The message you are using is fine and it is working fine for me. Could you please give me the response you are getting. Thanks.

Thanks & Regards Vivekjyoti Pramanik

airto commented 9 years ago

you can find the response in this page: http://zhaonan.info/interactive_email/test.php

vivekjyotipramanik commented 9 years ago

Hi airto,

Just checked your response. If you go to the page source, you will see the response is fine there and I could format the response without any issues. Somehow the way you are printing, only the texts in the response is getting printed. Could you please check the way you are printing the response. Thanks.

Thanks & Regards Vivekjyoti Pramanik

airto commented 9 years ago

I'm not using any print functions, here is the only line that does the printing: $return = curl_exec($soap_do);

Anything I can do to get a proper format? Thank you!

vivekjyotipramanik commented 9 years ago

Hi airto,

To output the response you need to parse it. Please use the below code before curl_exec. This will prevent curl_exec to return the output before parse.

curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true);

Then,

$return = curl_exec($soap_do); curl_close($soap_do);

After this, To parse it to formatted output please use this code. I wrote in a output file. you can use differently as per your need. Please let me know how it goes. Thanks.

$file = "001-".$Provider."_AirAvailabilityRsp.xml"; prettyPrint($return,$file);

function prettyPrint($result,$file){ $dom = new DOMDocument; $dom->preserveWhiteSpace = false; $dom->loadXML($result); $dom->formatOutput = true;
//call function to write request/response in file
outputWriter($file,$dom->saveXML()); return $dom->saveXML(); }

//function to write output in a file function outputWriter($file,$content){
file_put_contents($file, $content); // Write request/response and save them in the File }

vivekjyotipramanik commented 9 years ago

Hi Nazmul,

Could you please try the above resolution. Also, we have added the prettyPrint code in the code itself. Please let me know how it goes. Thanks.

Thanks & Regards Vivekjyoti Pramanik

ratheepan commented 9 years ago

i am using travel port trail account. wheni search flight availability i am getting invalid url as response

Here i request format

$message = <?xml version="1.0"?>
<soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org      /2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<air:AvailabilitySearchReq xmlns:com="http://www.travelport.com/schema/common_v20_0" xmlns:air="http://www.travelport.com/schema/air_v23_0" TargetBranch="P106446" AuthorizedBy="User" TraceId="trace">
'<pre><code><com:BillingPointOfSaleInfo OriginApplication="UAPI"/>
<air:SearchAirLeg>
<air:SearchOrigin>
<com:Airport Code="BOS"/>
</air:SearchOrigin>
<air:SearchDestination>
<com:Airport Code="LAS"/>
</air:SearchDestination>
<air:SearchDepTime PreferredTime="2014-12-21"/>
</air:SearchAirLeg>
</air:AvailabilitySearchReq>
</soap:Body>
</soap:Envelope>
'; 
$auth = base64_encode("$CREDENTIALS");
$soap_do = curl_init ("https://apac.universal-api.pp.travelport.com/B2BGateway/connect/    uAPI/AirAvailabilitySearchService");
$header = array(
"Content-Type: text/xml;charset=UTF-8",
"Accept: gzip,deflate",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: \"\"",
"Authorization: Basic $auth",
"Content-length: ".strlen($message),
);
curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($soap_do, CURLOPT_TIMEOUT, 30);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($soap_do, CURLOPT_POST, true );
curl_setopt($soap_do, CURLOPT_POSTFIELDS, $message);
curl_setopt($soap_do, CURLOPT_HTTPHEADER, $header);
curl_exec($soap_do); 

i got response like

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"><SOAP:Body>               
<SOAP:Fault><faultcode>Server.Business</faultcode><faultstring>Invalid Url.</faultstring><detail>
<common_v20_0:ErrorInfo xmlns:common_v20_0="http://www.travelport.com/schema/common_v20_0">
<common_v20_0:Code>122</common_v20_0:Code>      <common_v20_0:Service>WEBSVC</common_v20_0:Service>    
<common_v20_0:Type>Business</common_v20_0:Type>
<common_v20_0:Description>Invalid Url.</common_v20_0:Description>
<common_v20_0:TransactionId>3D88E7C50A07643BEC4C45AD261B3A3E</common_v20_0:TransactionId>
<common_v20_0:TraceId>trace</common_v20_0:TraceId></common_v20_0:ErrorInfo>
</detail></SOAP:Fault>
</SOAP:Body>
</SOAP:Envelope>

Can you please help me to solve this?

Thanks

vivekjyotipramanik commented 9 years ago

Hi ratheepan,

The URL you are using is incorrect. Please use the below URL and let me know if you are facing simliar issues. Thanks.

"https://apac.universal-api.pp.travelport.com/B2BGateway/connect/uAPI/AirService"

ratheepan commented 9 years ago

Thanks Friend,
I got the response.. but i need to format this to like

Duration 613 Flight US 445 BOS 2014-12-25T06:05-05:00 CLT 2014-12-25T08:32-05:00 Flight US 1735 CLT 2014-12-25T11:25-05:00 LAS 2014-12-25T13:18-08:00

Duration 627 Flight US 2045 BOS 2014-12-25T11:05-05:00 CLT 2014-12-25T13:30-05:00 Flight US 637 CLT 2014-12-25T16:35-05:00 LAS 2014-12-25T18:32-08:00

Duration 495 Flight US 1799 BOS 2014-12-25T14:40-05:00 CLT 2014-12-25T17:05-05:00 Flight US 705 CLT 2014-12-25T18:00-05:00 LAS 2014-12-25T19:55-08:00

it is very difficult to parse this soap response. Can you please help me.. Thanks s ratheepan

vivekjyotipramanik commented 9 years ago

Hi ratheepan,

Please us the below code to parse the response. Please call this function after the you get the response pretty printed and please pass the pretty printed content to this method. Please let me know how it goes. Thanks.

function parseOutput($content) {
//parse the Search response to get values to use in detail request $AirAvailabilitySearchRsp = $content; //use this if response is not saved anywhere else use above variable //echo $AirAvailabilitySearchRsp; $xml = simplexml_load_String("$AirAvailabilitySearchRsp", null, null, 'SOAP', true);

if($xml)
    echo "Processing! Please wait!";
else{
    trigger_error("Encoding Error!", E_USER_ERROR);
}

$Results = $xml->children('SOAP',true);
foreach($Results->children('SOAP',true) as $fault){
    if(strcmp($fault->getName(),'Fault') == 0){
        trigger_error("Error occurred request/response processing!", E_USER_ERROR);
    }
}

$count = 0;
$fileName = "flights.txt";
if(file_exists($fileName)){
    file_put_contents($fileName, "");
}
foreach($Results->children('air',true) as $nodes){
    foreach($nodes->children('air',true) as $hsr){
        if(strcmp($hsr->getName(),'AirSegmentList') == 0){
            foreach($hsr->children('air',true) as $hp){
                if(strcmp($hp->getName(),'AirSegment') == 0){
                    $count = $count + 1;
                    file_put_contents($fileName,"\r\n"."Air Segment ".$count."\r\n"."\r\n", FILE_APPEND);
                    foreach($hp->attributes() as $a => $b   ){
                            $GLOBALS[$a] = "$b";
                            //echo "$a"." : "."$b";
                            file_put_contents($fileName,$a." : ".$b."\r\n", FILE_APPEND);
                    }                                               
                }                   
            }
        }
        //break;
    }
}
$Token = 'Token';
$TokenKey = 'TokenKey';
$fileName = "tokens.txt";
if(file_exists($fileName)){
    file_put_contents($fileName, "");
}
foreach($Results->children('air',true) as $nodes){
    foreach($nodes->children('air',true) as $hsr){
        if(strcmp($hsr->getName(),'HostTokenList') == 0){           
            foreach($hsr->children('common_v29_0', true) as $ht){
                if(strcmp($ht->getName(), 'HostToken') == 0){
                    $GLOBALS[$Token] = $ht[0];
                    foreach($ht->attributes() as $a => $b){
                        if(strcmp($a, 'Key') == 0){
                            file_put_contents($fileName,$TokenKey.":".$b."\r\n", FILE_APPEND);
                        }
                    }                       
                    file_put_contents($fileName,$Token.":".$ht[0]."\r\n", FILE_APPEND);
                }
            }
        }
    }
}

echo "\r\n"."Processing Done. Please check results in files.";

}

Thanks & Regards Vivekjyoti Pramanik

ratheepan commented 9 years ago

Hi,

Thank you very much Vivekjyoti Pramanik,

Now i can format like that, But some fares does not have the price details.

Here i paste it,

Flight AA 5473 IAD 2014-12-29T06:49:00.000-05:00 CLT 2014-12-29T05:25:00.000-05:00 TravelTime: 281 Price: EffectiveDate Flight AA 1980 CLT 2014-12-29T10:06:00.000-05:00 BOS 2014-12-29T07:55:00.000-05:00 TravelTime: 281 Price: EffectiveDate

Flight DL 1431 IAD 2014-12-29T07:58:00.000-05:00 ATL 2014-12-29T06:00:00.000-05:00 TravelTime: 321 Price: EffectiveDate Flight DL 104 ATL 2014-12-29T11:21:00.000-05:00 BOS 2014-12-29T08:50:00.000-05:00 TravelTime: 321 Price: EffectiveDate

Flight WN 1688 BOS 2014-12-29T08:00:00.000-06:00 MDW 2014-12-29T05:55:00.000-05:00 TravelTime: 185 Price: USD487.44 EffectiveDate 2014-12-19T04:39:27.000-07:00 Flight WN 760 MDW 2014-12-29T12:40:00.000-05:00 IAD 2014-12-29T10:05:00.000-06:00 TravelTime: 95 Price: EffectiveDate 2014-12-19T04:39:27.000-07:00

And in the respose i fonud that, some fareindo dose not have price details

Flight WN 4718 BOS 2014-12-29T12:40:00.000-06:00 MDW 2014-12-29T10:40:00.000-05:00 TravelTime: 180 Price: USD487.44 EffectiveDate 2014-12-19T04:39:27.000-07:00 Flight WN 633 MDW 2014-12-29T18:35:00.000-05:00 IAD 2014-12-29T15:55:00.000-06:00 TravelTime: 100 Price: EffectiveDate 2014-12-19T04:39:27.000-07:00

<air:FareInfo Key="HSLECjqCSXy5vmG5ewKDkA==" FareBasis="YL" PassengerTypeCode="ADT" Origin="MDW" Destination="IAD" EffectiveDate="2014-12-19T03:37:12.000-07:00" PromotionalFare="false" FareFamily="AnyTime">

Can you please help me How can i get all price details..

Thanks s ratheepan

vivekjyotipramanik commented 9 years ago

Hi ratheepan,

Please use LowFareSearchReq instead of AirAvailabilitySearchReq if you want price with the availability itself. Please find below a sample request.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header/>
  <soapenv:Body>
    <air:LowFareSearchReq xmlns:air="http://www.travelport.com/schema/air_v29_0" AuthorizedBy="user" SolutionResult="true" TargetBranch="TRGT_BRCH" TraceId="trace">
      <com:BillingPointOfSaleInfo xmlns:com="http://www.travelport.com/schema/common_v29_0" OriginApplication="UAPI"/>
      <air:SearchAirLeg>
        <air:SearchOrigin>
          <com:Airport xmlns:com="http://www.travelport.com/schema/common_v29_0" Code="MUC"/>
        </air:SearchOrigin>
        <air:SearchDestination>
          <com:Airport xmlns:com="http://www.travelport.com/schema/common_v29_0" Code="BCN"/>
        </air:SearchDestination>
        <air:SearchDepTime PreferredTime="2015-01-24"/>
      </air:SearchAirLeg>
      <air:SearchAirLeg>
        <air:SearchOrigin>
          <com:Airport xmlns:com="http://www.travelport.com/schema/common_v29_0" Code="BCN"/>
        </air:SearchOrigin>
        <air:SearchDestination>
          <com:Airport xmlns:com="http://www.travelport.com/schema/common_v29_0" Code="MUC"/>
        </air:SearchDestination>
        <air:SearchDepTime PreferredTime="2015-01-29"/>
      </air:SearchAirLeg>
      <air:AirSearchModifiers PreferNonStop="true">
        <air:PreferredProviders>
          <com:Provider xmlns:com="http://www.travelport.com/schema/common_v29_0" Code="1G"/>
        </air:PreferredProviders>
        <air:PermittedCarriers>
          <com:Carrier xmlns:com="http://www.travelport.com/schema/common_v29_0" Code="LH"/>
        </air:PermittedCarriers>
      </air:AirSearchModifiers>
      <com:SearchPassenger xmlns:com="http://www.travelport.com/schema/common_v29_0" BookingTravelerRef="gr8AVWGCR064r57Jt0+8bA==" Code="ADT"/>
    </air:LowFareSearchReq>
  </soapenv:Body>
</soapenv:Envelope>

If you want price using availability request you need to use AirPriceReq after selecting a segment or segments from AirAvailabilityRsp. Please find below a sample AirPriceReq. Please let me know how it goes. Thanks.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header/>
  <soapenv:Body>
    <air:AirPriceReq xmlns:air="http://www.travelport.com/schema/air_v29_0" AuthorizedBy="user" TargetBranch="TRGT_BRCH" TraceId="trace">
      <com:BillingPointOfSaleInfo xmlns:com="http://www.travelport.com/schema/common_v29_0" OriginApplication="UAPI"/>
      <air:AirItinerary>
        <air:AirSegment ArrivalTime="2014-11-18T12:25:00.000+02:00" AvailabilityDisplayType="General" AvailabilitySource="S" Carrier="AY" ChangeOfPlane="false" DepartureTime="2014-11-18T07:30:00.000+00:00" Destination="HEL" ETicketability="Yes" Equipment="319" FlightNumber="3126" FlightTime="175" Group="0" Key="NAarnSW9Q5CRTr3eIMxlxg==" LinkAvailability="true" OptionalServicesIndicator="false" Origin="LHR" ParticipantLevel="Secure Sell" PolledAvailabilityOption="Polled avail used" ProviderCode="1G" TravelTime="175"/>
        <air:AirSegment ArrivalTime="2014-11-25T09:10:00.000+00:00" AvailabilityDisplayType="General" AvailabilitySource="S" Carrier="AY" ChangeOfPlane="false" DepartureTime="2014-11-25T07:45:00.000+02:00" Destination="LHR" ETicketability="Yes" Equipment="320" FlightNumber="5905" FlightTime="205" Group="1" Key="vTD623uySz2FAB0tuTJLhg==" LinkAvailability="true" OptionalServicesIndicator="false" Origin="HEL" ParticipantLevel="Secure Sell" PolledAvailabilityOption="Polled avail used" ProviderCode="1G" TravelTime="205"/>
      </air:AirItinerary>
      <air:AirPricingModifiers PlatingCarrier="QF"/>
      <com:SearchPassenger xmlns:com="http://www.travelport.com/schema/common_v29_0" BookingTravelerRef="gr8AVWGCR064r57Jt0+8bA==" Code="ADT"/>
      <com:SearchPassenger xmlns:com="http://www.travelport.com/schema/common_v29_0" BookingTravelerRef="KAnpOljGv5hGShsrlYIhwm==" Code="CHD"/>
      <com:SearchPassenger xmlns:com="http://www.travelport.com/schema/common_v29_0" BookingTravelerRef="BAMOKrJu4hGShsrlYIhwmw==" Code="INF"/>
      <air:AirPricingCommand CabinClass="Economy"/>
    </air:AirPriceReq>
  </soapenv:Body>
</soapenv:Envelope>

Thanks & Regards Vivekjyoti Pramanik

ratheepan commented 9 years ago

Hi,

Thanki you very much Vivekjyoti Pramanik, now it s working fine .

Last few days i have noticed that http://demo.travelportuniversalapi.com/ is not working..

Thanks s ratheepan

vivekjyotipramanik commented 9 years ago

Hi,

As there is not further issues reported we are closing this defect. Please reopen or open another one if you face any issues. Thanks.

Thanks & Regards Vivekjyoti Pramanik

nazmulmr commented 9 years ago

Hi Thanks for your support. At present, this project is halted due to IATA issue. Hopefully it will resolve after two month then we start again.

Thanks, Nazmul

On Thu, Nov 20, 2014 at 1:26 AM, vivekjyotipramanik < notifications@github.com> wrote:

Hi Nazmul,

Are you getting good response now? Could you please attach the xml response you are getting. Due to Github limitations I cannot see the XML response in correct format. Thanks.

Thanks & Regards Vivekjyoti Pramanik

— Reply to this email directly or view it on GitHub https://github.com/Travelport/travelport-uapi-tutorial/issues/1#issuecomment-63697693 .

hamdaanhassan commented 9 years ago

Hello ,

I am trying to use travelport sample api . can anyone explain me how to use this ? i want to create a air search form & when i click the search button i want to search flights . how can i do this with travelport xml-api . do i have to create a from ? can you tell me the steps please ?

I just filled all the data , $TARGETBRANCH , $CREDENTIALS , $Provider , $soap_do and i uploaded that file into a hosting . but nothing happening .

here s the code :

<?php

$TARGETBRANCH = 'P7022973'; $CREDENTIALS = 'Universal API/uAPI6793128836-d910db3e:h6PpXRTbs4tGfr6MeczrzwHTE'; $Provider = '1G';

$message = <<<EOM

soapenv:Header/ soapenv:Body air:SearchAirLeg air:SearchOrigin /air:SearchOrigin air:SearchDestination /air:SearchDestination /air:SearchDepTime /air:SearchAirLeg air:AirSearchModifiers air:PreferredProviders /air:PreferredProviders /air:AirSearchModifiers /air:AvailabilitySearchReq /soapenv:Body /soapenv:Envelope EOM; $auth = base64_encode("$CREDENTIALS"); $soap_do = curl_init ("https://apac.universal-api.pp.travelport.com/B2BGateway/connect/uAPI/AirService"); $header = array( "Content-Type: text/xml;charset=UTF-8", "Accept: gzip,deflate", "Cache-Control: no-cache", "Pragma: no-cache", "SOAPAction: \"\"", "Authorization: Basic $auth", "Content-length: ".strlen($message), ); //curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 30); //curl_setopt($soap_do, CURLOPT_TIMEOUT, 30); curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($soap_do, CURLOPT_POST, true ); curl_setopt($soap_do, CURLOPT_POSTFIELDS, $message); curl_setopt($soap_do, CURLOPT_HTTPHEADER, $header); curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true); // this will prevent the curl_exec to return result and will let us to capture output $return = curl_exec($soap_do); ?> i'm very new api integration thing . :) can any one help me please ? Thanks , Hamdaan
hamdaanhassan commented 9 years ago

can any one tell me how to setup travel port xml-api in a php & create a search form please ?

vivekjyotipramanik commented 9 years ago

Hi hamdaanhassan,

Thanks for your interest in Travelport Universal API. Could you please let me know how you are running the php file you have created. You can either create a form or just for checking you can run the php file from command line. Please confirm if you are using Apache server to run PHP. Thanks.

Thanks & Regards Vivekjyoti Pramanik

hamdaanhassan commented 9 years ago

Hi vivek ,

i have downloaded the air_sample_php.php from github and i filled all the data then i uploaded into one of my godaddy server & in a serversfree free server . nothing happens . can you tell me how to do this ? do i have to create a form & integrate this air_sample_php.php into that . please help me !

Thanks Hamdaan

vivekjyotipramanik commented 9 years ago

Hi Hamdaan,

Are you parsing the response in your code? Please check the page source after running the PHP. The response should be there but without parsing the response will not show up.

To parse it to formatted output please use this code. I wrote in a output file. you can use differently as per your need. Please let me know how it goes. Thanks.

$file = "001-".$Provider."_AirAvailabilityRsp.xml"; prettyPrint($return,$file);

function prettyPrint($result,$file){ $dom = new DOMDocument; $dom->preserveWhiteSpace = false; $dom->loadXML($result); $dom->formatOutput = true;

//call function to write request/response in file

outputWriter($file,$dom->saveXML()); return $dom->saveXML(); }

//function to write output in a file function outputWriter($file,$content){

file_put_contents($file, $content); // Write request/response and save them in the File }

Please check the current air php sample in github and already has the parsing code. Please let me know how it goes. Thanks.

Thanks & Regards Vivekjyoti Pramanik

vivekjyotipramanik commented 9 years ago

Hi Hamdaan,

I would recommend to download and test the php project in a local environment first. Please download any WAMP package and test the php project in the local server. Please let me know how it goes. Thanks.

Thanks & Regards Vivekjyoti Pramanik

hamdaanhassan commented 9 years ago

Hi vevek ,

I have uplaoded this php . then the screen shows nothing . is it means there s an error ? or is it working ?

<?php

$TARGETBRANCH = 'P7022973'; $CREDENTIALS = 'Universal API/uAPI6793128836-d910db3e:h6PpXRTbs4tGfr6MeczrzwHTE'; $Provider = '1G'; // Any provider you want to use like 1G/1P/1V/ACH

$message = <<<EOM

soapenv:Header/ soapenv:Body air:SearchAirLeg air:SearchOrigin /air:SearchOrigin air:SearchDestination /air:SearchDestination /air:SearchAirLeg /air:AvailabilitySearchReq /soapenv:Body /soapenv:Envelope EOM; $file = "001-".$Provider."_AirAvailabilityReq.xml"; // file name to save the request xml for test only(if you want to save the request/response) prettyPrint($message,$file);//call function to pretty print xml $auth = base64_encode("$CREDENTIALS"); $soap_do = curl_init ("https://apac.universal-api.pp.travelport.com/B2BGateway/connect/uAPI/AirService"); $header = array( "Content-Type: text/xml;charset=UTF-8", "Accept: gzip,deflate", "Cache-Control: no-cache", "Pragma: no-cache", "SOAPAction: \"\"", "Authorization: Basic $auth", "Content-length: ".strlen($message), ); //curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 30); //curl_setopt($soap_do, CURLOPT_TIMEOUT, 30); curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($soap_do, CURLOPT_POST, true ); curl_setopt($soap_do, CURLOPT_POSTFIELDS, $message); curl_setopt($soap_do, CURLOPT_HTTPHEADER, $header); curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true); // this will prevent the curl_exec to return result and will let us to capture output $return = curl_exec($soap_do); $file = "001-".$Provider."_AirAvailabilityRsp.xml"; prettyPrint($return,$file); function prettyPrint($result,$file){ $dom = new DOMDocument; $dom->preserveWhiteSpace = false; $dom->loadXML($result); $dom->formatOutput = true; //call function to write request/response in file outputWriter($file,$dom->saveXML()); return $dom->saveXML(); } //function to write output in a file function outputWriter($file,$content){ file_put_contents($file, $content); // Write request/response and save them in the File } ?>
hamdaanhassan commented 9 years ago

When the white screen loads , i found this two xmls came to the hosting .

001-1G_AirAvailabilityRsp.xml 001-1G_AirAvailabilityReq.xml

vivekjyotipramanik commented 9 years ago

Hi Hamdaan,

Yes, Then the response xml is generating, Could you please check if there is any error in the response XML or you are getting valid response. also, Please check if you are using future date in the xml request. If the date is in past you will get error in the response xml. Please check the below link for valid response samples. Thanks.

https://support.travelport.com/webhelp/uapi/uAPI.htm#SampleWeb/Samples_MainPage.htm%3FTocPath%3DSamples%7CXML%2520Samples%7CXML%2520Samples%7C_____0
            <air:SearchDepTime PreferredTime="2015-06-27">

Thanks & Regards Vivekjyoti Pramanik

hamdaanhassan commented 9 years ago

Hello vivek

Nothing showing . jst white . here s the link - http://pixelport.bugs3.com/air_sample_php.php

Thanks Hamdaan

vivekjyotipramanik commented 9 years ago

Hi Hamdaan,

Could you please check the xml pages that were genearted, The request and response will be in the XML pages generated. Please check the XML pages. I have already tested in my local environment with your credentails and it is working fine. Thanks.

Thanks & Regards Vivekjyoti Pramanik

hamdaanhassan commented 9 years ago

Here the two xml file codes .

soapenv:Header/ soapenv:Body air:SearchAirLeg air:SearchOrigin /air:SearchOrigin air:SearchDestination /air:SearchDestination /air:SearchAirLeg /air:AvailabilitySearchReq /soapenv:Body /soapenv:Envelope & SOAP:Body SOAP:Fault Server.InvalidRequestException [Error] :3:19: cvc-complex-type.2.4.a: Invalid content was found starting with element 'air:SearchAirLeg'. One of '{"http://www.travelport.com/schema/common_v28_0":BillingPointOfSaleInfo}' is expected. 1000 WEBSVC Data Validation failed on request message. E3815CFB0A0764774CBF3A1DE81499D0 LastElement AvailabilitySearchReq /SOAP:Fault /SOAP:Body /SOAP:Envelope
vivekjyotipramanik commented 9 years ago

Hi Hamdaan,

The XML request you are using is wrong. The billingPointOfsaleInfo is missing in your request. Please use the below code and put your TargetBranch and other details and also use Departure time in future which you are using a past date and it should work fine. After running the code, please review the XML generated and you should receive good response. Please find below the complete code. Please let me know how it goes. Thanks.

<?php 
/* 
* uAPI sample communication in php language 
* 
* This example requires the cURL library to be installed and working. 
* 
* Please note, in the sample code below, the variable $CREDENTIALS is created by binding your username and password together with a colon e.g. 
* 
* $auth = base64_encode("Universal API/API1234567:mypassword"); 
* 
* The variable $TARGETBRANCH should be set to the TargetBranch provided by Travelport. 
* 
* (C) 2015 Travelport, Inc. 
* This code is for illustration purposes only. 
*/
$TARGETBRANCH = 'Put your TargetBranch/WAB received in Welcome leter here';
$CREDENTIALS = 'Put your Username received in Welcome letter here:Put your password in Welcome letter here'; 
$Provider = '1G';
$message = <<<EOM
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <air:AvailabilitySearchReq TraceId="trace" AuthorizedBy="user" TargetBranch="$TARGETBRANCH" xmlns:air="http://www.travelport.com/schema/air_v29_0" xmlns:com="http://www.travelport.com/schema/common_v29_0">
         <com:BillingPointOfSaleInfo OriginApplication="UAPI"/>
         <air:SearchAirLeg>
            <air:SearchOrigin>
               <com:Airport Code="DEN"/>
            </air:SearchOrigin>
            <air:SearchDestination>
               <com:Airport Code="SFO"/>
            </air:SearchDestination>
            <air:SearchDepTime PreferredTime="2015-06-27">
            </air:SearchDepTime>            
         </air:SearchAirLeg>
         <air:AirSearchModifiers MaxSolutions="1">
            <air:PreferredProviders>
               <com:Provider Code="$Provider"/>
            </air:PreferredProviders>
         </air:AirSearchModifiers>
      </air:AvailabilitySearchReq>
   </soapenv:Body>
</soapenv:Envelope>
EOM;

$file = "001-".$Provider."_AirAvailabilityReq.xml"; // file name to save the request xml for test only(if you want to save the request/response)
prettyPrint($message,$file);//call function to pretty print xml

$auth = base64_encode("$CREDENTIALS"); 
$soap_do = curl_init("https://apac.universal-api.pp.travelport.com/B2BGateway/connect/uAPI/AirService");
/*("https://americas.universal-api.pp.travelport.com/B2BGateway/connect/uAPI/AirService");*/
$header = array(
"Content-Type: text/xml;charset=UTF-8", 
"Accept: gzip,deflate", 
"Cache-Control: no-cache", 
"Pragma: no-cache", 
"SOAPAction: \"\"",
"Authorization: Basic $auth", 
"Content-length: ".strlen($message),
); 
//curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 30); 
//curl_setopt($soap_do, CURLOPT_TIMEOUT, 30); 
curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($soap_do, CURLOPT_POST, true ); 
curl_setopt($soap_do, CURLOPT_POSTFIELDS, $message); 
curl_setopt($soap_do, CURLOPT_HTTPHEADER, $header); 
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true);
$return = curl_exec($soap_do);
curl_close($soap_do);

$file = "001-".$Provider."_AirAvailabilityRsp.xml"; // file name to save the response xml for test only(if you want to save the request/response)
$content = prettyPrint($return,$file);
parseOutput($content);
//outputWriter($file, $return);
//print_r(curl_getinfo($soap_do));

//Pretty print XML
function prettyPrint($result,$file){
    $dom = new DOMDocument;
    $dom->preserveWhiteSpace = false;
    $dom->loadXML($result);
    $dom->formatOutput = true;      
    //call function to write request/response in file   
    outputWriter($file,$dom->saveXML());    
    return $dom->saveXML();
}

//function to write output in a file
function outputWriter($file,$content){  
    file_put_contents($file, $content); // Write request/response and save them in the File
}

function parseOutput($content){ //parse the Search response to get values to use in detail request
    $AirAvailabilitySearchRsp = $content; //use this if response is not saved anywhere else use above variable
    //echo $AirAvailabilitySearchRsp;
    $xml = simplexml_load_String("$AirAvailabilitySearchRsp", null, null, 'SOAP', true);    

    if($xml)
        echo "Processing! Please wait!";
    else{
        trigger_error("Encoding Error!", E_USER_ERROR);
    }

    $Results = $xml->children('SOAP',true);
    foreach($Results->children('SOAP',true) as $fault){
        if(strcmp($fault->getName(),'Fault') == 0){
            trigger_error("Error occurred request/response processing!", E_USER_ERROR);
        }
    }

    $count = 0;
    $fileName = "flights.txt";
    if(file_exists($fileName)){
        file_put_contents($fileName, "");
    }
    foreach($Results->children('air',true) as $nodes){
        foreach($nodes->children('air',true) as $hsr){
            if(strcmp($hsr->getName(),'AirSegmentList') == 0){
                foreach($hsr->children('air',true) as $hp){
                    if(strcmp($hp->getName(),'AirSegment') == 0){
                        $count = $count + 1;
                        file_put_contents($fileName,"\r\n"."Air Segment ".$count."\r\n"."\r\n", FILE_APPEND);
                        foreach($hp->attributes() as $a => $b   ){
                                $GLOBALS[$a] = "$b";
                                //echo "$a"." : "."$b";
                                file_put_contents($fileName,$a." : ".$b."\r\n", FILE_APPEND);
                        }                                               
                    }                   
                }
            }
            //break;
        }
    }
    $Token = 'Token';
    $TokenKey = 'TokenKey';
    $fileName = "tokens.txt";
    if(file_exists($fileName)){
        file_put_contents($fileName, "");
    }
    foreach($Results->children('air',true) as $nodes){
        foreach($nodes->children('air',true) as $hsr){
            if(strcmp($hsr->getName(),'HostTokenList') == 0){           
                foreach($hsr->children('common_v29_0', true) as $ht){
                    if(strcmp($ht->getName(), 'HostToken') == 0){
                        $GLOBALS[$Token] = $ht[0];
                        foreach($ht->attributes() as $a => $b){
                            if(strcmp($a, 'Key') == 0){
                                file_put_contents($fileName,$TokenKey.":".$b."\r\n", FILE_APPEND);
                            }
                        }                       
                        file_put_contents($fileName,$Token.":".$ht[0]."\r\n", FILE_APPEND);
                    }
                }
            }
        }
    }

    echo "\r\n"."Processing Done. Please check results in files.";

}

?>
hamdaanhassan commented 9 years ago

i think it works bro ^^

http://pixelport.bugs3.com/air_sample_php.php http://pixelport.bugs3.com/flights.txt http://pixelport.bugs3.com/001-1G_AirAvailabilityRsp.xml http://pixelport.bugs3.com/001-1G_AirAvailabilityReq.xml

vivekjyotipramanik commented 9 years ago

Hi Hamdaan,

It is great to know. Please let me know if we can close the issue. Thanks.

Thanks & Regards Vivekjyoti Pramanik

hamdaanhassan commented 9 years ago

Hi vivek ,

Thank you very much for helping .

I want to know more about travelport please .

do we have to create a form to search flights ? this is a sample air . can we create a search ?

I don't know how it works . can you explain me ?

Thanks , Hamdaan

vivekjyotipramanik commented 9 years ago

Hi Hamdaan,

Sure, Please find below the link. You can find all about Travelport Universal API here. Please let me know how it goes. Thanks.

https://support.travelport.com/webhelp/uapi/uAPI.htm

Thanks & Regards Vivekjyoti Pramanik

hamdaanhassan commented 9 years ago

Hi vivek ,

confusion . i have tried to understand what it sayin . its very difficult . can you tell me the steps to design a search form and integrate with the air xml api please ?

Thanks hamdaan

vivekjyotipramanik commented 9 years ago

Hi Hamdaan,

Sure. To provide you with an overview, You can create a simple PHP Search form with options to select Origin,Destination,Departure Time, Return Time, Specific Airlines, One way, round trip and many more. On Submit of the form you can take the values submitted by the user and assign the values in PHP Session variables. After this you can call the php page with Air Search logic and after retrieving the values from the session you can input the values in the XML message in the php page and run the request. Once the response is returned, you can parse the response and show the Search results it in a different php page. Please let me know how it goes. Thanks.

Thanks & Regards Vivekjyoti Pramanik