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

来源:互联网 发布:网络医托 编辑:程序博客网 时间:2024/04/29 01:13

最近一个项目中要使用酒店查询和飞机票预定,我这一通折腾,好在皇天不负有心人,最后终于一一搞定。选择了携程,为什么呢?目前国内有几家规模比较大的,例如:去哪儿,艺龙旅行,和携程。了解了一圈,最后发现,携程的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,可以借鉴下,写的不错。

2 0
原创粉丝点击