1. 程式人生 > >iOS應用下整合攜程api(酒店和飛機票)

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

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

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

SOAP(SimpleObjectaccessPRotocal,簡單物件訪問協議)技術有助於實現大量異構程式和平臺之間的互操作性,從而使存在的應用能夠被廣泛的使用者所訪問。SOAP是把成熟的基於HTTP的WEB技術與

xml的靈活性和可擴充套件性組合在了一起。

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,可以借鑑下,寫的不錯。