2013-02-08 16 views
9

PHP'nin yerleşik sabun işlevlerini kullanarak bir API'ye giriş yapmaya çalışıyorum. Böyle bir sonuç aldım. Bu, API sağlayıcısının gerektirdiği durumdur. Bu, API sağlayıcısının gerektirdiği şeydir. sabun: Zarf SOAP-ENV: Zarf PHP

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
    <Login xmlns="http://tempuri.org/Example/Service1"> 
      <objSecurity> 
       <WebProviderLoginId>test</WebProviderLoginId> 
       <WebProviderPassword>test</WebProviderPassword> 
       <IsAgent>false</IsAgent> 
      </objSecurity> 
      <OutPut /> 
      <ErrorMsg /> 
    </Login> 
</soap:Body> 
</soap:Envelope> 

&

, burada işlevlerini kullanarak üretmeyi başardı budur.

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/Example/Service1"> 
<SOAP-ENV:Body> 
    <ns1:Login> 
     <objSecurity> 
      <WebProviderLoginId>test</WebProviderLoginId> 
      <WebProviderPassword>test</WebProviderPassword> 
      <IsAgent>false</IsAgent> 
     </objSecurity> 
     <OutPut/> 
     <ErrorMsg/> 
    </ns1:Login> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

İstek göndermek için kullandığınız kod İşte.

<?php 
class objSecurity { 
function objSecurity($s, $i, $f) { 
    $this->WebProviderLoginId = $s; 
    $this->WebProviderPassword = $i; 
    $this->IsAgent = $f; 
} 
} 

class nextObject { 
function nextObject($objSecurity) { 
    $this->objSecurity=$pobjSecurity; 
    $this->OutPut=NULL; 
    $this->ErrorMsg=NULL; 
} 
} 

$url = 'http://example.com/sampleapi/test.asmx?WSDL'; 
$client = new SoapClient($url, array("soap_version" => SOAP_1_1,"trace" => 1)); 
$struct = new objSecurity('test', 'test', false); 
$data = new nextObject($struct); 
$soapstruct2 = new SoapVar($data, SOAP_ENC_OBJECT); 
print_r(
    $client->__soapCall(
     "Login", 
     array(new SoapParam($soapstruct2, "inputStruct")) 
    ) 
); 

echo $client->__getLastRequest(); 

?> 

Bunlar, bulduğum farklar.

Benim isteğimde xmlns:xsi eksik.

Gereksinim <soap:Envelope ile başlar, Ama isteğim <SOAP-ENV:Envelope ile başlar.

İsteğim için ekstra bir xmlns:ns1 var.

& İşlev adı etiketi ns1: ile başlar.

Lütfen isteğimi istenen biçimde yapma konusunda bana yardımcı olun.

SOAP hakkında fazla bir şey bilmiyorum ve CakePHP 2.3.0 ile PHP 5.3.13 sürümünü kullanıyorum. Üzgünüm, kötü ingilizcem için.

+0

** Ben sitesi bunun için bekleyen sadece 8 saat sonra burada yayınlanan edilebilir diyor ... :( – KrIsHnA

+0

bunu anladım gibi. Bilmiyorum fikir, beni cevabı ** var, ama Cevap, ama FYI, bu iki XML örneği, iyi bir XML işleyicisinin bakış açısından oldukça fazla eşdeğerdir – JLRishe

cevap

11

İşte çözüm. :)

<?php 
$url = 'http://example.com/sampleapi/test.asmx?WSDL'; 
$client = new SoapClient($url, array("soap_version" => SOAP_1_1,"trace" => 1)); 

$user_param = array (
    'WebProviderLoginId' => "test", 
    'WebProviderPassword' => "test", 
    'IsAgent' => false 
); 

$service_param = array (
    'objSecurity' => $user_param, 
    "OutPut" => NULL, 
    "ErrorMsg" => NULL 
); 

print_r(
    $client->__soapCall(
     "Login", 
     array($service_param) 
    ) 
); 

echo $client->__getLastRequest(); 

?> 

& isteği vardı: Bu bağlantıya

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/Example/Service1"> 
<SOAP-ENV:Body> 
    <ns1:Login> 
     <ns1:objSecurity> 
      <ns1:WebProviderLoginId>test</ns1:WebProviderLoginId> 
      <ns1:WebProviderPassword>test</ns1:WebProviderPassword> 
      <ns1:IsAgent>false</ns1:IsAgent> 
     </ns1:objSecurity> 
    </ns1:Login> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

teşekkürler. PHP SOAP Request not right

+0

Harika! Kendi sorunuzu çözdünüz, özveri (y) – Krish

İlgili konular