nusoap_client - Cómo emitir una solicitud SOAP en PHP
soapclient laravel (3)
Estoy tratando de emitir una solicitud SOAP en PHP. Tengo mi URL de servicio, y cuando la reviso en la interfaz de usuario SOAP, puedo ver lo siguiente
<application xmlns="http://somenamespace.com">
<doc xml:lang="en" title="https://someurl.com"/>
<resources base="https://someurl.com">
<resource path="sdk/user/session/logon/" id="Logon">
<doc xml:lang="en" title="Logon"/>
<param name="ApiKey" type="xs:string" required="false" default="" style="query" xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
<param name="ApiSecret" type="xs:string" required="false" default="" style="query" xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
<method name="POST" id="Logon">
<doc xml:lang="en" title="Logon"/>
<request>
<param name="method" type="xs:string" required="true" default="" style="query" xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
<representation mediaType="application/json"/>
<representation mediaType="application/xml"/>
<representation mediaType="text/xml"/>
<representation mediaType="application/x-www-form-urlencoded"/>
</request>
<response status="404 500">
<representation mediaType="text/html; charset=utf-8" element="html"/>
</response>
<response status="">
<representation mediaType="application/json"/>
<representation mediaType="application/xml"/>
<representation mediaType="text/xml"/>
<representation mediaType="application/x-www-form-urlencoded"/>
</response>
<response status="500">
<representation mediaType="application/vnd.marg.bcsocial.result-v1.9+json; charset=utf-8" element="log:Fault" xmlns:log="https://someurl.com/sdk/user/session/logon"/>
<representation mediaType="application/vnd.marg.bcsocial.result-v1.9+xml; charset=utf-8" element="web:Result_1" xmlns:web="https://someurl.com/Sdk/WebService"/>
</response>
<response status="200">
<representation mediaType="application/vnd.marg.bcsocial.api.index.options.list-v2.6+xml; charset=utf-8" element="web:ListOfApiIndexOptions_4" xmlns:web="https://someurl.com/Sdk/WebService"/>
<representation mediaType="" element="data"/>
</response>
</method>
</resource>
</resources>
</application>
Así que estoy tratando de usar esto para iniciar sesión. Por el momento, estoy intentando algo como lo siguiente
public function updateApi(){
$service_url = ''https://someurl.com/sdk/user/session/logon'';
$curl = curl_init($service_url);
$curl_post_data = array(
"ApiKey" => ''somekey'',
"ApiSecret" => ''somesecret'',
);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
$curl_response = curl_exec($curl);
curl_close($curl);
var_dump($curl_response);
}
Sin embargo, siempre recibo una respuesta de falla que indica que el inicio de sesión ha fallado. ¿Tengo que llamar al método de inicio de sesión o algo así? Realmente estoy buscando algún consejo sobre si estoy haciendo las cosas correctamente.
Gracias
No establece el encabezado Content-Type
indica el formato del contenido que publicó:
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
''Content-Type: application/x-www-form-urlencoded''));
De lo contrario, desde php5 hacia arriba, se recomienda el uso de http_build_query
:
$curl_post_data = array(
"ApiKey" => ''somekey'',
"ApiSecret" => ''somesecret'',
);
curl_setopt($curl, CURLOPT_POSTFIELDS,
http_build_query($curl_post_data));
Espero que te ayude, Thierry
Según el XML, debe intentar enviar su variable curl_post_data como una cadena codificada en URL. como urlencode(''ApiKey=somekey&ApiSecret=somesecret'')
y, en segundo lugar, intenta establecer el tipo de contenido de tu solicitud en '' application/x-www-form-urlencoded
''
$service_url = ''https://someurl.com/sdk/user/session/logon'';
$curl = curl_init($service_url);
$headers = ["Content-Type: application/json"]; // or other supported media type
$curl_post_data = array(
"ApiKey" => ''somekey'',
"ApiSecret" => ''somesecret'',
);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
curl_setopt($rest, CURLOPT_HTTPHEADER,$headers);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$curl_response = curl_exec($curl);
curl_close($curl);