2015-12-04 27 views
10

Sto tentando di inviare una richiesta SOAP in PHP. Ho il mio URL del servizio, e quando ho check in SOAP UI, posso vedere il seguenteCome inviare una richiesta SOAP in 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> 

Così sto cercando di usare questo per accedere. Al momento, sto cercando qualcosa di simile al seguente

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

Tuttavia, ho sempre ricevuto una reazione all'anomalia che l'accesso non è riuscito. Devo chiamare il metodo di accesso o qualcosa del genere? Davvero solo in cerca di un consiglio se sto facendo le cose correttamente.

Grazie

+3

I documenti per il servizio che si sta tentando di colpire potrebbero avere una spiegazione dei loro servizi RESTful e di come utilizzarlo. Puoi condividere quale API stai cercando di colpire? Forse qualcuno ha scritto wrapper che potresti usare per semplificare il tuo lavoro. – zedfoxus

+0

Sfortunatamente è un'API privata, i documenti non sono disponibili a meno che non acceda. I documenti mostrano solo note molto semplici. Ho cercato e non ci sono wrapper da nessuna parte. –

+0

È possibile che manchi il parametro 'metodo' richiesto nella richiesta? – Val

risposta

6

Secondo l'XML si dovrebbe cercare di trasmettere la variabile curl_post_data come una stringa URL codificato. come urlencode('ApiKey=somekey&ApiSecret=somesecret') e in secondo luogo cercare di impostare il tipo di contenuto della richiesta di 'application/x-www-form-urlencoded'

7

Non si imposta l'intestazione Content-Type raccontando il formato del contenuto che hai postato:

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

In caso contrario, da PHP5 verso l'alto, si raccomanda l'utilizzo di http_build_query:

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

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

Speranza che ti aiuta, 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); 
Problemi correlati