SOAP WSDL 请求 - 方法 returns 错误请求错误
SOAP WSDL request - Method returns bad request error
我正在尝试拨打肥皂电话,但 returns 出现 "Bad request" 错误。
示例调用是:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://centric.eu/services/CS/Trade/Standard/WS/" xmlns:cen="http://schemas.datacontract.org/2004/07/Centric.CS.Trade.Standard.WS.StockService.Contract.Request">
<soapenv:Header>
<ws:Security soapenv:mustUnderstand="1" xmlns:ws="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<ws:UsernameToken>
<ws:Username>username</ws:Username>
<ws:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">pass</ws:Password>
</ws:UsernameToken>
</ws:Security>
</soapenv:Header>
<soapenv:Body>
<ws:GetStock>
<ws:request>
<cen:StockRequests>
<!--Zero or more repetitions:-->
<cen:StockRequest>
<cen:CustomerNo>123</cen:CustomerNo>
<cen:Division>AGU_NL</cen:Division>
<cen:Item>113504</cen:Item>
<cen:Language>NL</cen:Language>
<cen:Login>123</cen:Login>
</cen:StockRequest>
</cen:StockRequests>
</ws:request>
</ws:GetStock>
</soapenv:Body>
</soapenv:Envelope>
我使用以下代码:
$soapclient = new \SoapClient($url, array(
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 9,
'trace' => true,
'exceptions' => 1,
'cache_wsdl' => 1,
));
$xml = '
<ws:Security soapenv:mustUnderstand="1" xmlns:ws="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<ws:UsernameToken>
<ws:Username>'.$username.'</ws:Username>
<ws:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">'.$password.'</ws:Password>
</ws:UsernameToken>
</ws:Security>
';
$soapheader = new \SoapHeader(
'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd',
'Security',
new \SoapVar($xml, XSD_ANYXML),
true);
$soapclient->__setSoapHeaders($soapheader);
try {
$soapclient->__soapCall('GetStock',
array(
'CustomerNo' => 123,
'Division' => 'AGU_NL',
'Item' => '113504',
'Language' => 'NL',
'Login' => '123',
)
);
} catch(\SoapFault $e) {
echo '<pre>';
print_r($e->getMessage());
echo '</pre>';
}
我得到的响应是:错误代码:HTTP,错误字符串:Bad Request
我不完全确定我是否正确创建了请求并调用了方法。
任何帮助将不胜感激
谢谢
你收到错误请求的原因是你没有很好地格式化你的请求,如果你的请求之间没有空格,请尝试制作
您最好不要尝试手动构建 xml。改为尝试以下方法:
$url = 'https://webservices.abcb2b.eu/Centric/CS/Trade/csprod/StockService.svc?wsdl';
$username = 'username';
$password = 'pass';
$client = new SoapClient($url, array('trace' => 1, "exception" => 0));
$wssNamespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
$usernameToken = new SoapVar(array(
new SoapVar(array(
new SoapVar($username, XSD_STRING, null, null, 'Username', $wssNamespace),
new SoapVar($password, XSD_STRING, null, null, 'Password', $wssNamespace)
), SOAP_ENC_OBJECT, null, null, 'UsernameToken', $wssNamespace)
), SOAP_ENC_OBJECT, null, null, null, $wssNamespace);
$client->__setSoapHeaders(new SoapHeader($wssNamespace, 'Security', $usernameToken));
try {
$client->GetStock(array(
'request' => array(
'StockRequests' => array(
'StockRequest' => array(
'CustomerNo' => 123,
'Division' => 'AGU_NL',
'Item' => '113504',
'Language' => 'NL',
'Login' => '123',
)
)
)
));
} catch(\SoapFault $e) {
echo '<pre>';
print_r($e->getMessage());
echo '</pre>';
}
我正在尝试拨打肥皂电话,但 returns 出现 "Bad request" 错误。
示例调用是:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://centric.eu/services/CS/Trade/Standard/WS/" xmlns:cen="http://schemas.datacontract.org/2004/07/Centric.CS.Trade.Standard.WS.StockService.Contract.Request">
<soapenv:Header>
<ws:Security soapenv:mustUnderstand="1" xmlns:ws="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<ws:UsernameToken>
<ws:Username>username</ws:Username>
<ws:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">pass</ws:Password>
</ws:UsernameToken>
</ws:Security>
</soapenv:Header>
<soapenv:Body>
<ws:GetStock>
<ws:request>
<cen:StockRequests>
<!--Zero or more repetitions:-->
<cen:StockRequest>
<cen:CustomerNo>123</cen:CustomerNo>
<cen:Division>AGU_NL</cen:Division>
<cen:Item>113504</cen:Item>
<cen:Language>NL</cen:Language>
<cen:Login>123</cen:Login>
</cen:StockRequest>
</cen:StockRequests>
</ws:request>
</ws:GetStock>
</soapenv:Body>
</soapenv:Envelope>
我使用以下代码:
$soapclient = new \SoapClient($url, array(
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 9,
'trace' => true,
'exceptions' => 1,
'cache_wsdl' => 1,
));
$xml = '
<ws:Security soapenv:mustUnderstand="1" xmlns:ws="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<ws:UsernameToken>
<ws:Username>'.$username.'</ws:Username>
<ws:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">'.$password.'</ws:Password>
</ws:UsernameToken>
</ws:Security>
';
$soapheader = new \SoapHeader(
'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd',
'Security',
new \SoapVar($xml, XSD_ANYXML),
true);
$soapclient->__setSoapHeaders($soapheader);
try {
$soapclient->__soapCall('GetStock',
array(
'CustomerNo' => 123,
'Division' => 'AGU_NL',
'Item' => '113504',
'Language' => 'NL',
'Login' => '123',
)
);
} catch(\SoapFault $e) {
echo '<pre>';
print_r($e->getMessage());
echo '</pre>';
}
我得到的响应是:错误代码:HTTP,错误字符串:Bad Request 我不完全确定我是否正确创建了请求并调用了方法。
任何帮助将不胜感激
谢谢
你收到错误请求的原因是你没有很好地格式化你的请求,如果你的请求之间没有空格,请尝试制作
您最好不要尝试手动构建 xml。改为尝试以下方法:
$url = 'https://webservices.abcb2b.eu/Centric/CS/Trade/csprod/StockService.svc?wsdl';
$username = 'username';
$password = 'pass';
$client = new SoapClient($url, array('trace' => 1, "exception" => 0));
$wssNamespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
$usernameToken = new SoapVar(array(
new SoapVar(array(
new SoapVar($username, XSD_STRING, null, null, 'Username', $wssNamespace),
new SoapVar($password, XSD_STRING, null, null, 'Password', $wssNamespace)
), SOAP_ENC_OBJECT, null, null, 'UsernameToken', $wssNamespace)
), SOAP_ENC_OBJECT, null, null, null, $wssNamespace);
$client->__setSoapHeaders(new SoapHeader($wssNamespace, 'Security', $usernameToken));
try {
$client->GetStock(array(
'request' => array(
'StockRequests' => array(
'StockRequest' => array(
'CustomerNo' => 123,
'Division' => 'AGU_NL',
'Item' => '113504',
'Language' => 'NL',
'Login' => '123',
)
)
)
));
} catch(\SoapFault $e) {
echo '<pre>';
print_r($e->getMessage());
echo '</pre>';
}