jed*_*ipt 2 php xml soap laravel-4
我正在寻找一种方法来更改命名空间:“ns1”到“ret”,使用 SoapUI 测试以下 XML,并将命名空间设置为“ret”并且请求成功。我已经“谷歌搜索”,并在 SO 中搜索了其他相关问题的答案,但没有运气。所以,我有点不顾一切地想找到答案......
这是生成的要发送到请求的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://retailexpress.com.au/">
<SOAP-ENV:Header>
<ns1:ClientHeader>
<ns1:ClientID>Random-hash-clientID</ns1:ClientID>
<ns1:UserName>Username</ns1:UserName>
<ns1:Password>Password</ns1:Password>
</ns1:ClientHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:CustomerGetBulkDetails>
<ns1:LastUpdated>2000-01-01T00:00:00.000Z</ns1:LastUpdated>
<ns1:OnlyCustomersWithEmails>1</ns1:OnlyCustomersWithEmails>
</ns1:CustomerGetBulkDetails>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)
虽然,我们必须使用相同的命名空间 (ret) 请求似乎有点奇怪,但这就是它的方式......
这是用于生成上述内容的 PHP 代码:
$rexHost = '<domain of retail express>';
$rexApi = '<URI of retail express API / wsdl path>';
$rexUser = 'Username';
$rexPassword = 'Password';
$rexApiClient = 'Random-hash-clientID';
$rexApiHost = 'http://retailexpress.com.au/';
$client = new SoapClient($rexHost.$rexApi, array('trace' => true));
$auth = new stdClass();
$auth->ClientID = $rexApiClient;
$auth->UserName = $rexUser;
$auth->Password = $rexPassword;
$header = new SoapHeader($rexApiHost, 'ClientHeader', $auth, false);
$client->__setSoapHeaders($header);
$lastUpdate = '2000-01-01T00:00:00.000Z'; //hardcoded for test
$params = array();
$params[] = new SoapVar($lastUpdate, XSD_DATETIME, null, null, 'LastUpdated', $rexApiHost);
$params[] = new SoapVar(1, XSD_INTEGER, null, null, 'OnlyCustomersWithEmails', $rexApiHost);
try {
$users = null;
return $users = $client->CustomerGetBulkDetails( new SoapVar($params, SOAP_ENC_OBJECT));
} catch (Exception $e) {
Log::info($e->getMessage());
Log::info($client->__getLastRequest()); //laravel logger, where I got the generated SOAP XML request
return false;
}
Run Code Online (Sandbox Code Playgroud)
ns1不是命名空间,而是它的别名。http://retailexpress.com.au/是命名空间。命名空间定义xmlns:ns1="http://retailexpress.com.au/"为当前元素及其后代定义了一个别名。命名空间必须是唯一且稳定的。使用定义和别名允许将复杂的 URI 用作命名空间和用于序列化的简短、可读的别名。
以下三个示例均由XML 解析器解析CustomerGetBulkDetails为命名空间中http://retailexpress.com.au/的元素:
<ns1:CustomerGetBulkDetails xmlns:ns1="http://retailexpress.com.au/"/><ret:CustomerGetBulkDetails xmlns:ret="http://retailexpress.com.au/"/><CustomerGetBulkDetails xmlns="http://retailexpress.com.au/"/>换句话说,如果 XML/SOAP 实现正常工作,那么命名空间使用哪个别名(ns1或)并不重要ret。
| 归档时间: |
|
| 查看次数: |
5042 次 |
| 最近记录: |