我使用了 php.net 并按照文档在 php 中使用 SoapClient 创建 SOAP 请求,但我无法弄清楚如何在正确的位置使用标题正确格式化请求。当我的脚本运行时,这会导致“使用的验证类型无效”错误。
我需要形成的示例请求是:
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Header>
<ServiceAuthHeader xmlns="http://voicepad.com/DataServices_Vivek/DataServices">
<Username>string</Username>
<Password>string</Password>
</ServiceAuthHeader>
</soap12:Header>
<soap12:Body>
<GetData xmlns="http://voicepad.com/DataServices_Vivek/DataServices">
<sQueryType>string</sQueryType>
<StartDate>string</StartDate>
<EndDate>string</EndDate>
<PhoneNumber>string</PhoneNumber>
</GetData>
</soap12:Body>
</soap12:Envelope>
我最后一次尝试使用 php 发出请求是:
$client = new SoapClient("url", array( 'trace' => TRUE, 'exceptions'=>0 ));
$header = new SoapHeader( 'soap12', 'ServiceAuthHeader', array('Username' => "$s_uname", 'Password' => "$s_pass"));
$client->__setSoapHeaders(array($header));
$result = $client->GetData(array('PhoneNumber'=>'##########'));
print_r($result);
此代码生成的请求是这样的:
<soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://voicepad.com/DataServices_Vivek/DataServices" xmlns:ns2="soap12">
<soap-env:header>
<ns2:serviceauthheader>
<item>
<key>
Username
</key>
<value>
*********
</value>
</item>
<item>
<key>
Password
</key>
<value>
*********
</value>
</item>
</ns2:serviceauthheader>
</soap-env:header>
<soap-env:body>
<ns1:getdata>
<ns1:phonenumber>
###########
</ns1:phonenumber>
</ns1:getdata>
</soap-env:body>
</soap-env:envelope>
正如你所看到的,这个请求是错误的,但它也是我能够得到的关闭。这是我进行的唯一一次试验,我至少让用户名和密码显示在请求的标题中。我迷路了,请帮助!