PHP7 SoapClient 问题

标签 php web-services soap soap-client php-7

我最近从 PHP5.4 升级到 PHP7。天哪,这是一个变化,但这不是重点。

升级后我遇到了 SoapService 的问题。

这是我的 SoapRequest 在 PHP5.4 上的样子:

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="urn:usaepay" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
<env:Body>
    <ns1:searchTransactions env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
    <Token xsi:type="ns1:ueSecurityToken">
        <ClientIP xsi:type="xsd:string">*redacted*</ClientIP>
        <PinHash xsi:type="ns1:ueHash">
            <HashValue xsi:type="xsd:string">*redacted*</HashValue>
            <Seed xsi:type="xsd:string">*redacted*</Seed>
            <Type xsi:type="xsd:string">sha1</Type>
        </PinHash>
        <SourceKey xsi:type="xsd:string">*redacted*</SourceKey>
    </Token>
    <Search enc:itemType="ns1:SearchParam" enc:arraySize="3" xsi:type="ns1:SearchParamArray">
        <item xsi:type="ns1:SearchParam">
            <Field xsi:type="xsd:string">created</Field>
            <Type xsi:type="xsd:string">gt</Type>
            <Value xsi:type="xsd:string">2016-07-26</Value>
        </item>
        <item xsi:type="ns1:SearchParam">
            <Field xsi:type="xsd:string">created</Field>
            <Type xsi:type="xsd:string">lt</Type>
            <Value xsi:type="xsd:string">2016-07-27</Value>
        </item>
        <item xsi:type="ns1:SearchParam">
            <Field xsi:type="xsd:string">response</Field>
            <Type xsi:type="xsd:string">eq</Type>
            <Value xsi:type="xsd:string">A</Value>
        </item>
    </Search>
    <MatchAll xsi:type="xsd:boolean">true</MatchAll>
    <Start xsi:type="xsd:integer">0</Start>
    <Limit xsi:type="xsd:integer">9999</Limit>
    <Sort xsi:type="xsd:string">TransID</Sort>
</ns1:searchTransactions>
</env:Body>
</env:Envelope>

下面是请求在 PHP7 上运行完全相同的一段代码时的样子:

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="urn:usaepay" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
<env:Body>
    <ns1:searchTransactions env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
    <Token xsi:type="ns1:ueSecurityToken">
        <ClientIP xsi:type="xsd:string">*redacted*</ClientIP>
        <PinHash xsi:type="ns1:ueHash">
            <HashValue xsi:type="xsd:string">*redacted*</HashValue>
            <Seed xsi:type="xsd:string">*redacted*</Seed>
            <Type xsi:type="xsd:string">sha1</Type>
        </PinHash>
        <SourceKey xsi:type="xsd:string">*redacted*</SourceKey>
    </Token>
    <Search enc:itemType="ns2:Map" enc:arraySize="3" xsi:type="ns1:SearchParamArray">
        <item xsi:type="ns2:Map">
            <item>
                <key xsi:type="xsd:string">Field</key>
                <value xsi:type="xsd:string">created</value>
            </item>
            <item>
                <key xsi:type="xsd:string">Type</key>
                <value xsi:type="xsd:string">gt</value>
            </item>
            <item>
                <key xsi:type="xsd:string">Value</key>
                <value xsi:type="xsd:string">2016-07-26</value>
            </item>
        </item>
        <item xsi:type="ns2:Map">
            <item>
                <key xsi:type="xsd:string">Field</key>
                <value xsi:type="xsd:string">created</value>
            </item>
            <item>
                <key xsi:type="xsd:string">Type</key>
                <value xsi:type="xsd:string">lt</value>
            </item>
            <item>
                <key xsi:type="xsd:string">Value</key>
                <value xsi:type="xsd:string">2016-07-26</value>
            </item>
        </item>
        <item xsi:type="ns2:Map">
            <item>
                <key xsi:type="xsd:string">Field</key>
                <value xsi:type="xsd:string">response</value>
            </item>
            <item>
                <key xsi:type="xsd:string">Type</key>
                <value xsi:type="xsd:string">eq</value>
            </item>
            <item>
                <key xsi:type="xsd:string">Value</key>
                <value xsi:type="xsd:string">A</value>
            </item>
        </item>
    </Search>
    <MatchAll xsi:type="xsd:boolean">true</MatchAll>
    <Start xsi:type="xsd:integer">0</Start>
    <Limit xsi:type="xsd:integer">9999</Limit>
    <Sort xsi:type="xsd:string">created</Sort>
</ns1:searchTransactions>
</env:Body>
</env:Envelope>

这里是相关的PHP代码:(注意$sec)是经过编辑的安全信息。

$param = array(
            array('Field' => 'created', 'Type' => 'gt', 'Value' => date('Y-m-d', strtotime('2016-07-26'))), 
            array('Field' => 'created', 'Type' => 'lt', 'Value' => date('Y-m-d', strtotime('2016-07-26'))),
            array('Field' => 'response', 'Type' => 'eq', 'Value' => 'A')
            );

$matchAll = true;
$start = 0;
$limit = 9999;
$sort = 'TransID';

$this->advClient = new SoapClient($this->adv_wsdl, array('trace' => 1, 'exceptions' => 1, 'cache_wsdl' => WSDL_CACHE_BOTH, 'soap_version' => SOAP_1_2));
$result = $this->advClient->searchTransactions($sec, $searchParam, $matchAll, $start, $limit, $sort);

我最终得到的是一个错误。我认为问题是在 PHP7 中它包装并添加了额外的“项目”标签。然而,一些功能仍然没有问题。还有其他人遇到过这个吗?

最佳答案

有趣的是,我使用了 wsdltophp.com 并为 WSDL 创建了一个类,一切正常。

关于PHP7 SoapClient 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38637941/

相关文章:

java - 避免将对象中的某些属性包含在 WSDL 中

WCF BodyStyle WrappedRequest 不适用于传入的 JSON 参数?

java - 调用 SOAP 方法时出错 : Error deserializing message

php - 从 SQL Server 检索时某些图像的一部分丢失

php - 替换 rawurlencode 中的实体,即 < >“

php - 使 Wordpress wp_delete_attachment 从预定义的自定义文件夹中删除文件

c# - 将服务引用添加到 SOAP 服务不会生成异步方法

php - 在 PHP 中获取对象的内存大小?

c# - Windows Phone 获取服务器源代码

python - Spyne/RPClib - 如何响应 ComplexModel?