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

如何在PHP中使用Curl调用指定SOAP类型的车辆信息Web Service?

在PHP中使用Curl访问该Web Service的方法

当然可以用Curl来访问这个Web Service啦!这是PHP里处理HTTP请求最常用的工具之一。下面我会一步步给你讲怎么实现,包括构造SOAP请求、配置Curl选项以及解析响应的完整代码:

核心思路

这个API是SOAP类型的Web服务,所以我们需要构造符合SOAP规范的XML请求体,再通过Curl发送POST请求到指定的沙箱URL。

完整代码示例

<?php
// 沙箱API地址
$apiUrl = 'http://api.lankagate.gov.lk:8280/GetOnGoingVehicleNoDMT/1.0';

// 设置请求参数:vehicleCategory可选1或4,这里可以根据需求替换
$vehicleCategory = 1;

// 构造SOAP请求XML,注意命名空间要和API响应里的保持一致
$soapRequest = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <GetOnGoingVehicleNoRequest xmlns="http://schemas.conversesolutions.com/xsd/dmticta/v1">
      <vehicleCategory>$vehicleCategory</vehicleCategory>
    </GetOnGoingVehicleNoRequest>
  </soap:Body>
</soap:Envelope>
XML;

// 初始化Curl会话
$ch = curl_init($apiUrl);

// 配置Curl请求选项
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $soapRequest);
// 设置请求头,SOAP服务通常要求Content-Type为text/xml
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: text/xml; charset=utf-8',
    // 部分SOAP服务需要SOAPAction头,若请求失败可尝试调整或注释掉这一行
    'SOAPAction: "http://schemas.conversesolutions.com/xsd/dmticta/v1/GetOnGoingVehicleNo"'
]);
// 沙箱环境暂时关闭SSL验证(生产环境请务必开启)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// 设置返回响应内容而非直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 执行请求并获取响应
$response = curl_exec($ch);

// 检查Curl执行过程中是否出现错误
if(curl_errno($ch)){
    echo 'Curl执行错误: ' . curl_error($ch);
    exit;
}

// 获取HTTP响应状态码
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// 关闭Curl资源
curl_close($ch);

// 处理成功响应(状态码200)
if($httpCode == 200){
    // 解析XML响应内容
    $xml = simplexml_load_string($response);
    // 注册命名空间,方便后续用XPath提取数据
    $xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/');
    $xml->registerXPathNamespace('ns', 'http://schemas.conversesolutions.com/xsd/dmticta/v1');
    
    // 提取当前可用车牌号码
    $vehicleNo = $xml->xpath('//ns:OngoingVehicleNo')[0];
    echo '当前可用车牌: ' . $vehicleNo;
    
    // 可选:提取错误码和响应消息(如果存在的话)
    $errorCode = $xml->xpath('//ns:ErrorCode')[0] ?? null;
    $responseMsg = $xml->xpath('//ns:ResponseMessage')[0] ?? null;
    if($errorCode){
        echo '<br>错误码: ' . $errorCode;
    }
    if($responseMsg){
        echo '<br>响应消息: ' . $responseMsg;
    }
} else {
    echo '请求失败,HTTP状态码: ' . $httpCode;
    echo '<br>响应内容: ' . $response;
}
?>

关键注意事项

  • 命名空间匹配:请求XML里的命名空间必须和API响应示例中的一致,否则服务无法正确识别你的请求参数。
  • SOAPAction头:部分SOAP服务要求必须携带这个头来指定要调用的方法,如果测试时请求失败,可以检查API文档确认正确的SOAPAction值。
  • SSL验证设置:沙箱环境关闭SSL验证是为了测试方便,生产环境请务必开启(将CURLOPT_SSL_VERIFYPEER设为true,CURLOPT_SSL_VERIFYHOST设为2),避免安全风险。
  • XML解析:使用SimpleXML扩展解析响应时,注册命名空间后,用XPath可以更方便地定位到需要的数据节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:16:46