2015-12-04 16 views
10

Próbuję wysłać żądanie SOAP w PHP. Mam usług URL, a kiedy to sprawdzić w SOAP UI, widzę następująceJak wysłać żądanie SOAP w PHP

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

Więc staram się to wykorzystać, aby się zalogować. W tej chwili próbuję coś podobnego do następującego: Jednak zawsze otrzymuję odpowiedź o błędzie, że logowanie nie powiodło się. Czy muszę wywołać metodę logowania lub coś takiego? Naprawdę tylko szukam porady, czy robię to poprawnie.

Dzięki

+3

Dokumenty dotyczące usługi, którą próbujesz trafić, mogą zawierać wyjaśnienie ich usług REST i sposobu ich używania. Czy możesz udostępnić interfejs API, który chcesz uderzyć? Być może ktoś napisał opakowania, które można wykorzystać do uproszczenia pracy. – zedfoxus

+0

Niestety jest to prywatny interfejs API, dokumenty nie są dostępne, chyba że się zalogujesz. Dokumenty zawierają bardzo proste notatki. Szukałem i nie ma żadnych opakowań. –

+0

Czy jest możliwe, że brakuje ci wymaganego parametru 'method' w żądaniu? – Val

Odpowiedz

6

Według XML należy spróbować wysłać zmienną curl_post_data jako URL zakodowany ciąg. jak urlencode('ApiKey=somekey&ApiSecret=somesecret') a po drugie spróbować ustawić typ zawartości żądania do „application/x-www-form-urlencoded

7

Nie ustawić nagłówek Content-Type mówiąc format opublikowanej treści:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
         'Content-Type: application/x-www-form-urlencoded')); 

W przeciwnym razie, z PHP5 w górę, korzystanie z http_build_query zaleca się:

$curl_post_data = array(
    "ApiKey" => 'somekey', 
    "ApiSecret" => 'somesecret', 
); 

curl_setopt($curl, CURLOPT_POSTFIELDS, 
      http_build_query($curl_post_data)); 

nadzieję, że to pomaga, Thierry

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