iOS應用下整合攜程api(酒店和飛機票)

來源:互聯網
上載者:User

標籤:soap   xml請求體   xml解析   攜程api   酒店api   

最近一個項目中要使用酒店查詢和飛機票預定,我這一通折騰,好在皇天不負有心人,最後終於一一搞定。選擇了攜程,為什麼呢?目前國內有幾家規模比較大的,例如:去哪兒,藝龍旅行,和攜程。瞭解了一圈,最後發現,攜程的api免費的。所以我就選擇了攜程。如果你對攜程api有什麼疑慮,或者不清楚,不知道怎麼使用的,請留言,我會儘快回複你的。目前網上的資料(ios用的)比較少,所以我就寫了這篇部落格讓大家盡量少走些彎路。

1>首先在使用攜程api的時候你需要明白什麼是soap?

SOAP(SimpleObjectaccessPRotocal,簡易物件存取通訊協定 (SOAP))技術有助於實現大量異構程式和平台之間的互通性,從而使存在的應用能夠被廣泛的使用者所訪問。SOAP是把成熟的基於HTTP的WEB技術與xml的靈活性和可擴充性組合在了一起。


2>作為ios開發人員,當我們請求時需要xml格式的請求體就比較蛋疼了。今天帶大家先簡單看看soap,簡易物件存取通訊協定 (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,可以借鑒下,寫的不錯。

iOS應用下整合攜程api(酒店和飛機票)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.