soapclient nusoap_client ejemplos ejemplo php soap soap-client

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);