2015-12-04 8 views
10

Ich versuche eine SOAP-Anfrage in PHP zu erstellen. Ich habe meine Dienst-URL, und wenn ich es in SOAP UI überprüfen, kann ich folgendesSo geben Sie eine SOAP-Anfrage in PHP aus

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

Also das ich versuche sehen zu verwenden, sich anzumelden. Im Moment versuche ich etwas wie die folgenden

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

Ich bekomme jedoch immer eine Fehlermeldung, dass die Anmeldung fehlgeschlagen ist. Muss ich die Anmeldemethode oder etwas aufrufen? Wirklich nur auf der Suche nach einem Rat, ob ich die Dinge richtig mache.

Dank

+3

Docs für den Service, den Sie versuchen zu treffen, haben möglicherweise eine Erklärung ihrer RESTful-Dienste und wie sie zu verwenden ist. Können Sie teilen, welche API Sie versuchen zu treffen? Vielleicht hat jemand Wrapper geschrieben, mit denen Sie Ihre Arbeit vereinfachen können. – zedfoxus

+0

Leider ist es eine private API, Dokumente sind nicht verfügbar, es sei denn, Sie loggen sich ein. Dokumente zeigen nur sehr grundlegende Anmerkungen. Ich habe gesucht und es gibt keine Wrapper überall. –

+0

Ist es möglich, dass Ihnen in Ihrer Anfrage der erforderliche Parameter 'method' fehlt? – Val

Antwort

6

XML Nach sollten Sie versuchen, Ihre curl_post_data Variable als URL kodierter String zu senden. wie urlencode('ApiKey=somekey&ApiSecret=somesecret') und zweitens versuchen, den Inhaltstyp Ihrer Anfrage auf ‚application/x-www-form-urlencoded

7

Sie setzen nicht die Content-Type Header das Format des Inhalts sagen Sie auf dem Laufenden:

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

Andernfalls von php5 nach oben, wird die Verwendung von http_build_query empfohlen:

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

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

Hoffnung es Ihnen hilft, 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); 
Verwandte Themen