function soapRequest()
{
var soap_str='';
soap_str+='<?xml version="1.0" encoding="UTF-8"?>';
soap_str+='<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"';
soap_str+='xmlns:ns1="https://www.pagofacil.net/st/public/Wsstransaccion/?wsdl"';
soap_str+='xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"';
soap_str+='xmlns:xsd="http://www.w3.org/2001/XMLSchema"';
soap_str+='xmlns:ns2="http://xml.apache.org/xml-soap"';
soap_str+='xmlns:enc="http://www.w3.org/2003/05/soap-encoding">';
soap_str+='<env:Body>';
soap_str+=' <ns1:transaccion env:encodingStyle="http://www.w3.org/2003/05/soapencoding">';
soap_str+=' <param0 xsi:type="ns2:Map"><item><key xsi:type="xsd:string">nombre</key><value xsi:type="xsd:string">Juan A</value></item><item><key xsi:type="xsd:string">apellidos</key> <value xsi:type="xsd:string">Lopez Hernández</value></item> <item> <key xsi:type="xsd:string">numeroTarjeta</key> <value xsi:type="xsd:string">5579567890123456</value> </item> <item> <key xsi:type="xsd:string">cp</key> <value xsi:type="xsd:string">11560</value> </item> <item> <key xsi:type="xsd:string">cvt</key> <value xsi:type="xsd:string">123</value> </item> <item> <key xsi:type="xsd:string">monto</key> <value xsi:type="xsd:string">100</value> </item> <item> <key xsi:type="xsd:string">mesExpiracion</key> <value xsi:type="xsd:string">10</value> </item> <item> <key xsi:type="xsd:string">anyoExpiracion</key> <value xsi:type="xsd:string">15</value> </item> <item> <key xsi:type="xsd:string">idSucursal</key> <value xsi:type="xsd:int">1</value> </item> <item> <key xsi:type="xsd:string">idUsuario</key> <value xsi:type="xsd:int">1</value> </item> <item> <key xsi:type="xsd:string">idServicio</key> <value xsi:type="xsd:int">3</value> </item> <item> <key xsi:type="xsd:string">telefono</key> <value xsi:type="xsd:string">5550220910</value> </item> <item> <key xsi:type="xsd:string">celular</key> <value xsi:type="xsd:string">5550123456</value> </item> <item> <key xsi:type="xsd:string">calleyNumero</key> <value xsi:type="xsd:string">Anatole France 311</value> </item> <item> <key xsi:type="xsd:string">colonia</key> <value xsi:type="xsd:string">Polanco</value> </item> <item> <key xsi:type="xsd:string">municipio</key> <value xsi:type="xsd:string">Miguel Hidalgo</value> </item> <item> <key xsi:type="xsd:string">estado</key> <value xsi:type="xsd:string">Distrito Federal</value> </item> <item> <key xsi:type="xsd:string">pais</key> <value xsi:type="xsd:string">Mexico</value> </item> <item> <key xsi:type="xsd:string">email</key> <value xsi:type="xsd:string">comprador@correo.com</value> </item> <item> <key xsi:type="xsd:string">param1</key> <value xsi:type="xsd:string"/> </item> <item> <key xsi:type="xsd:string">param2</key> <value xsi:type="xsd:string">2</value> </item> <item> <key xsi:type="xsd:string">param3</key> <value xsi:type="xsd:string">3</value> </item> <item> <key xsi:type="xsd:string">param4</key> <value xsi:type="xsd:string"/> </item> <item> <key xsi:type="xsd:string">param5</key> <value xsi:type="xsd:string"/> </item> </param0> ';
soap_str+='</ns1:transaccion> </env:Body> </env:Envelope>';
var str=soap_str;
function createCORSRequest(method,url)
{
var xhr= new XMLHttpRequest();
if ("withCredentials" in xhr){
xhr.open(method,url,false);
}
else
{
//CORS not supported
console.log("CORS not supported");
alert("CORS not supported");
xhr=null;
}
return xhr;
}
var xhr= createCORSRequest("POST","https://www.pagofacil.net/st/public/Wsstransaccion/");
alert(xhr);
if(!xhr)
{
console.log("xhr issues");
return;
}
xhr.onload = function ()
{
var results = xhr.responseText;
console.log(results);
}
xhr.setRequestHeader('Content-Type','text/xml');
xhr.setRequestHeader("Access-Control-Allow-Origin","http://localhost:8000/");
alert(str);
xhr.send(str);
}
soapRequest();
&#13;
我收到以下错误。 1个注册:895个选项pagofacil.net/st/public/Wsstransaccion/ 500(内部服务错误) 2-register:895 XMLHttpRequest无法加载pagofacil.net/st/public/Wsstransaccion/。对预检请求的响应没有通过访问控制检查:否&#39;访问控制 - 允许 - 来源&#39;标头出现在请求的资源上。起源&#39; http://localhost:8000&#39;因此不允许访问。响应的HTTP状态代码为500。 3-register:895 Uncaught NetworkError:无法执行&#39;发送&#39; on&#39; XMLHttpRequest&#39;:无法加载&#39; pagofacil.net/st/public/Wsstransaccion /&#39;。
我尝试过REST,JSON Post,并且我遇到了与SOAP相同的CORS问题。 我甚至试图在mozilla上禁用CORS安全选项,但没有工作(同样的错误)。
我不是在寻找解决方案,但我想知道我在哪里可以寻找。 谢谢大家。
简而言之,pagofacil.net服务器不允许使用CORS。
答案 0 :(得分:0)
我认为原因是服务器不允许OPTIONS请求,表明它们不允许CORS。我有一个启用了CORS的服务器,并且运行curl 'https://...myserver.../' -I -X OPTIONS -H 'Access-Control-Request-Method: POST' -H 'Origin: http://localhost:8000/'
会返回以下标题:
HTTP/1.1 200 OK
Content-Length: 0
Server: Microsoft-IIS/7.0
Access-Control-Allow-Origin: *
X-Powered-By: ASP.NET
Date: Sat, 14 May 2016 07:06:00 GMT
Set-Cookie: SERVERID=mon03; path=/
Cache-control: private
这基本上说&#34;你可以从任何来源做出POST请求&#34;。
对您的服务器curl 'https://www.pagofacil.net/st/public/Wsstransaccion/' -I -X OPTIONS -H 'Access-Control-Request-Method: POST' -H 'Origin: http://localhost:8000/'
...返回
HTTP/1.1 500 Internal Service Error
Date: Sat, 14 May 2016 07:06:09 GMT
Server: Apache/2.2.3 (Red Hat)
X-Powered-By: PHP/5.2.17
Content-Length: 269
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Connection: close
Content-Type: text/xml; charset=utf-8
&#34;内部服务错误&#34;表示您无法执行OPTIONS请求,因此您无法执行您尝试执行的CORS请求。
如果服务器不允许CORS,除了请求它们启用CORS之外,您无能为力,或者通过您自己的代理服务器(您启用CORS)来路由您的呼叫。然后,此服务器可以向pagofacil
发送请求并将数据返回给您。