iOS應用下整合攜程api(酒店和飛機票)
阿新 • • 發佈:2019-02-04
最近一個專案中要使用酒店查詢和飛機票預定,我這一通折騰,好在皇天不負有心人,最後終於一一搞定。選擇了攜程,為什麼呢?目前國內有幾家規模比較大的,例如:去哪兒,藝龍旅行,和攜程。瞭解了一圈,最後發現,攜程的api免費的。所以我就選擇了攜程。如果你對攜程api有什麼疑慮,或者不清楚,不知道怎麼使用的,請留言,我會盡快回復你的。目前網上的資料(ios用的)比較少,所以我就寫了這篇部落格讓大家儘量少走些彎路。
1>首先在使用攜程api的時候你需要明白什麼是soap?
SOAP(SimpleObjectaccessPRotocal,簡單物件訪問協議)技術有助於實現大量異構程式和平臺之間的互操作性,從而使存在的應用能夠被廣泛的使用者所訪問。SOAP是把成熟的基於HTTP的WEB技術與
2>作為ios開發者,當我們請求時需要xml格式的請求體就比較蛋疼了。今天帶大家先簡單看看soap,簡單物件訪問協議,或者叫做簡單交換協議。我的理解就是我們在請求的時候發一個請求,這個請求帶上xml格式請求體。然後呢,伺服器在接受到我們xml請求體後,返回給我們一個xml結果。然後我們開始解析。就是這樣的一個請求的過程。
2.1>那麼有些同學可能會問了,怎麼封裝xml請求體呢?
下面就是xml請求體了
NSString *soapBody = @"<?xml version=\"1.0\" encoding=\"utf-8\"?>" "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" "<soap:Body>" "<Request xmlns=\"http://ctrip.com/\">" "<requestXML>AllianceID=\"你的聯盟id\" SID=\"你的站點id\" TimeStamp=\"1416436597\" Signature=\"你的簽名\" RequestType=\"OTA_Ping\" AsyncRequest=\"false\" Timeout=\"0\" MessagePriority=\"3\"</requestXML>" "</Request>" "</soap:Body>" "</soap:Envelope>";
3>那怎樣post給伺服器呢?
我們平常所說的xml請求體就是一個data,NSData,首先我們需要將字串轉換成為data,然後post給伺服器。這樣伺服器在收到請求後就會迴應我們。例如:
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:WebServicesURL]]; NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[message length]]; // 新增請求的詳細資訊,與請求報文前半部分的各欄位對應 [request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [request addValue: @"http://ctrip.com/Request" forHTTPHeaderField:@"SOAPAction"]; [request addValue: msgLength forHTTPHeaderField:@"Content-Length"]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:[message dataUsingEncoding:NSUTF8StringEncoding]]; NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:self]; if (connection) { soapData=[[NSMutableData alloc] init]; } [connection start];
4>好了,到了現在基本上已經完成了請求的步驟,剩下的就是解析了。我們可以在- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data方法中列印data,如果有值就說明我們請求成功了。
解析的話大家去網上搜索KissXml,可以借鑑下,寫的不錯。