首页 > 代码库 > 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=http://www.mamicode.com/[[NSMutableData alloc] init];>
4>好了,到了现在基本上已经完成了请求的步骤,剩下的就是解析了。我们可以在- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data方法中打印data,如果有值就说明我们请求成功了。

解析的话大家去网上搜索KissXml,可以借鉴下,写的不错。

iOS应用下集成携程api(酒店和飞机票)