我试图在JavaScript中创建SOAP请求,但是我得到了错误的响应。
这是我的要求:
callSOAP() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', 'https://webapi.allegro.pl/service.php', true);
var sr =
'<?xml version="1.0" encoding="utf-8"?>' +
'<SOAP-ENV:Envelope ' +
'xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" ' +
'xmlns:main="https://webapi.allegro.pl/service.php" ' +
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
'xmlns:xsd="http://www.w3.org/2001/XMLSchema">' +
'<SOAP-ENV:Body>' +
'<main:DoGetCountriesRequest>' +
'<main:countryCode>1</main:countryCode>' +
'<main:webapiKey>xxxxxxxx</main:webapiKey>' +
'</main:DoGetCountriesRequest>' +
'</SOAP-ENV:Body>' +
'</SOAP-ENV:Envelope>';
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
console.log(xmlhttp.response);
}
};
xmlhttp.setRequestHeader('Content-Type', 'text/xml');
xmlhttp.send(sr);
}
我试着打电话给DoGetCountriesRequest&#39;方法,但响应是状态代码500,并带有消息&#39;无效的XML&#39;。
这是在JavaScript中调用SOAP方法的正确方法吗?我的要求有什么问题?
答案 0 :(得分:0)
您似乎将请求发送到?wsdl
端点 - 从xmlhttp.open()
方法调用中的网址中删除该请求,然后将其发送到服务本身。
您的SOAP消息似乎也格格不入 - 您过早关闭了SOAP-ENV:Envelope
开头标记 - 它还需要包围您的xmlns:xsi
和xmlns:xsd
命名空间定义:
'<?xml version="1.0" encoding="utf-8"?>' +
'<SOAP-ENV:Envelope ' +
'xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:main="https://webapi.allegro.pl/service.php"' +
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
'xmlns:xsd="http://www.w3.org/2001/XMLSchema">' + ...
跟进编辑
您的countryCode和webapiKey开头标记中有一些双引号需要删除,看起来消息本身不符合WSDL - WSDL中的操作doGetCountries
需要DoGetCountriesRequest
个对象。尝试类似:
var sr =
'<?xml version="1.0" encoding="utf-8"?>' +
'<SOAP-ENV:Envelope ' +
'xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" ' +
'xmlns:main="https://webapi.allegro.pl/service.php" ' +
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
'xmlns:xsd="http://www.w3.org/2001/XMLSchema">' +
'<SOAP-ENV:Body>' +
'<main:DoGetCountriesRequest>' +
'<main:countryCode>1</main:countryCode>' +
'<main:webapiKey>xxxxxxxx</main:webapiKey>' +
'</main:DoGetCountriesRequest>' +
'</SOAP-ENV:Body>' +
'</SOAP-ENV:Envelope>';