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

如何用PHP实现XML格式SOAP POST请求并获取可读响应

修正PHP调用SOAP接口的两处问题,获取正确可读响应

针对你遇到的两个问题,直接给你修正方案和完整代码:

1. 修正请求体中的和参数

你需要完全照搬Postman中能正常工作的请求体里的<From>和<To>值,确保参数的格式、内容和Postman里的完全一致——比如如果是特定的编码格式、ID字符串或者日期格式,不能有任何拼写或格式错误。比如Postman里的请求体片段是:

<From>正确的来源值</From>
<To>正确的目标值</To>

那PHP代码里的SOAP Envelope就要原封不动把这两个节点的内容替换正确。

2. 处理gzip压缩响应解决乱码

接口返回的是gzip压缩后的内容,PHP不会自动解压,所以需要两步处理:

  • 请求头里明确指定Accept-Encoding: gzip, deflate(和Postman保持一致)
  • 收到响应后,判断响应头里的Content-Encoding是否为gzip,若是则用gzdecode()解压内容

完整修正后的PHP代码示例

<?php
$url = 'https://apps8.tflite.com/PublicServiceU/Public.svc/asmx';

// 替换成Postman中能正常工作的SOAP请求体,确保<From>和<To>参数正确
$soapBody = <<<XML
<?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>
    <!-- 这里替换成接口要求的具体方法节点,确保<From>和<To>正确 -->
    <YourSoapMethodName xmlns="http://tempuri.org/">
      <From>正确的From值</From>
      <To>正确的To值</To>
      <!-- 其他必要参数 -->
    </YourSoapMethodName>
  </soap:Body>
</soap:Envelope>
XML;

$ch = curl_init($url);

// 设置请求头,和Postman一致
$headers = [
    'Content-Type: text/xml; charset=utf-8',
    'Accept-Encoding: gzip, deflate',
    'SOAPAction: "http://tempuri.org/IPublic/YourSoapMethodName"', // 替换成实际的SOAPAction值
    'Content-Length: ' . strlen($soapBody)
];

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $soapBody);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 若需要忽略SSL证书(如果环境有问题),可以打开下面一行
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$contentEncoding = curl_getinfo($ch, CURLINFO_CONTENT_ENCODING);

curl_close($ch);

// 处理gzip压缩响应
if ($contentEncoding === 'gzip') {
    $response = gzdecode($response);
}

// 输出可读的XML响应
header('Content-Type: text/xml');
echo $response;
?>

注意事项

  • 替换代码中的YourSoapMethodName为接口实际的SOAP方法名,SOAPAction的值也要和Postman里的完全一致
  • 确保<From>和<To>的内容和Postman中成功请求的完全相同,包括大小写、特殊字符等
  • 如果gzdecode()报错,可能是PHP没有启用zlib扩展,需要在php.ini中开启extension=zlib

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:54:39