You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Objective-C中调用指定支付类Soap API?附接口详情

在Objective-C中调用支付类SOAP API的实现方案

我来帮你梳理下在Objective-C里调用这两个SOAP支付接口的具体实现步骤,直接上可落地的代码和说明:

通用前提说明

SOAP请求本质是基于HTTP的XML请求,核心步骤就是:

  • 构建符合接口要求的SOAP Envelope(XML格式)
  • 发送POST请求到指定接口地址
  • 解析返回的XML响应,提取需要的业务参数

下面针对两个接口分别给出实现示例:


1. 调用GetPaymentModeData接口(获取可用支付方式)

请求参数说明

需要传入三个必填参数:

  • OrderId:订单ID
  • LoyaltyRequestId:会员请求ID
  • MemberId:会员ID

实现代码

// 1. 填充实际业务参数
NSString *orderId = @"你的订单ID";
NSString *loyaltyRequestId = @"你的会员请求ID";
NSString *memberId = @"你的会员ID";

// 2. 构建SOAP请求体(严格匹配接口的XML结构)
NSString *soapMessage = [NSString stringWithFormat:@"<?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>"
                         "<GetPaymentModeData xmlns=\"http://mobile.cinemaxxtheater.com/WebService/\">"
                         "<OrderId>%@</OrderId>"
                         "<LoyaltyRequestId>%@</LoyaltyRequestId>"
                         "<MemberId>%@</MemberId>"
                         "</GetPaymentModeData>"
                         "</soap:Body>"
                         "</soap:Envelope>", orderId, loyaltyRequestId, memberId];

// 3. 配置HTTP请求
NSURL *url = [NSURL URLWithString:@"http://mobile.cinemaxxtheater.com/WebService/你的完整接口路径"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[soapMessage length]];

[request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"http://mobile.cinemaxxtheater.com/WebService/GetPaymentModeData" forHTTPHeaderField:@"SOAPAction"];
[request addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];

// 4. 发送请求并处理响应
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    if (error) {
        NSLog(@"请求出错:%@", error.localizedDescription);
        return;
    }
    
    // 先打印原始响应,方便调试
    NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"原始响应XML:%@", responseString);
    
    // 解析响应参数:ErrDesc和PaymentModeList
    // 这里需要根据接口返回的实际XML结构编写解析逻辑,示例用NSXMLParser实现
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
    parser.delegate = self; // 记得实现NSXMLParserDelegate协议来遍历节点
    [parser parse];
}];
[task resume];

响应解析提示

返回的XML中需要重点提取:

  • ErrDesc:值为"0"表示请求成功,其他字符串为错误详情
  • PaymentModeList:一组支付方式节点,需要遍历提取每个方式的名称、ID等信息

2. 调用PaymentCheckoutProcess接口(处理支付)

请求参数说明

需要传入五个必填参数:

  • OrderId:订单ID
  • UserEmail:用户邮箱
  • UserMobileNo:用户手机号
  • CardNumber:银行卡号(生产环境务必加密传输)
  • GrossAmount:支付金额

实现代码

// 1. 填充实际业务参数
NSString *orderId = @"你的订单ID";
NSString *userEmail = @"用户邮箱";
NSString *userMobileNo = @"用户手机号";
NSString *cardNumber = @"用户卡号"; // 注意:生产环境必须加密后再传输!
NSString *grossAmount = @"支付金额";

// 2. 构建SOAP请求体
NSString *soapMessage = [NSString stringWithFormat:@"<?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>"
                         "<PaymentCheckoutProcess xmlns=\"http://mobile.cinemaxxtheater.com/WebService/\">"
                         "<OrderId>%@</OrderId>"
                         "<UserEmail>%@</UserEmail>"
                         "<UserMobileNo>%@</UserMobileNo>"
                         "<CardNumber>%@</CardNumber>"
                         "<GrossAmount>%@</GrossAmount>"
                         "</PaymentCheckoutProcess>"
                         "</soap:Body>"
                         "</soap:Envelope>", orderId, userEmail, userMobileNo, cardNumber, grossAmount];

// 3. 配置HTTP请求
NSURL *url = [NSURL URLWithString:@"http://mobile.cinemaxxtheater.com/WebService/你的完整接口路径"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[soapMessage length]];

[request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"http://mobile.cinemaxxtheater.com/WebService/PaymentCheckoutProcess" forHTTPHeaderField:@"SOAPAction"];
[request addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];

// 4. 发送请求并处理响应
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    if (error) {
        NSLog(@"请求出错:%@", error.localizedDescription);
        return;
    }
    
    NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"原始响应XML:%@", responseString);
    
    // 解析响应参数:OrderId、PaymentTransId、ErrDesc
    // 同样根据实际XML结构编写解析逻辑,也可以用第三方XML库简化转换
}];
[task resume];

重要注意事项

  • 银行卡号属于敏感信息,生产环境必须使用HTTPS传输,且对卡号进行加密处理,绝对不能明文传输
  • 务必根据接口返回的实际XML结构调整解析逻辑,上面的代码仅提供通用框架
  • 如果觉得原生XML解析繁琐,可以使用TBXML、XMLDictionary等第三方库简化XML到字典的转换

内容的提问来源于stack exchange,提问作者swati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:41:49