[ maddog_srb @ 09.07.2013. 19:44 ] @
Treba da generisem ovakav zahtev:

Code:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:min="http://sitename.com/Name1">
<soapenv:Header/>
    <soapenv:Body>
        <min:GetServicesByServiceTypeId>123</min:GetServicesByServiceTypeId>
       </soapenv:Body>
</soapenv:Envelope>



Medjutim koristeci SoapClient ovako:
Code:

    ini_set('soap.wsdl_cache_enabled', 0);
    ini_set('soap.wsdl_cache_ttl', 0);
        
    error_reporting(0);
        
    
    $url        = "https://some.subdomain.sitename.com/Name1.wsdl";
    //kada stavim putanju do sertifikata pukne i ode u catch do reda $client->__getLastRequest() ali posle toga nema nista! Nikakva poruka! Ako stavim nepostojeci sertifikat onda vraca XML iz greske :S
    
    $local_cert    = dirname(dirname(__FILE__)) . "\\third_party\\certificate.p12"; 
    $password    = '********';
        
        $data = array(
            "trace" => 1, 
            "exception" => 0,
            "local_cert" => $local_cert,
            "passphrase" => $password 
        );
        
    
        try{            
            $client = new SoapClient($url, $data);
        
            echo '<pre>';
            print_r($client->__getFunctions());
        
            print_r($client->GetServicesByServiceType(array('GetServicesByServiceTypeId' => 123)));
        }catch(SoapFault $e){        
            echo 'Request : <br/><xmp>', 
            $client->__getLastRequest(), 
            '</xmp><br/><br/> Error Message : <br/>', 
            $e->getMessage(); 
        }


Ovo je greska koja mi se javlja u catch bloku:
Code:

Request : <br/><xmp><?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://sitename.com/Name1"><SOAP-ENV:Body><ns1:GetServicesByServiceTypeId>1</ns1:GetServicesByServiceTypeId></SOAP-ENV:Body></SOAP-ENV:Envelope>
</xmp><br/><br/> Error Message : <br/>Could not connect to host




Zanima me da nije greska mozda sto ja SoapClient kreiram sa adresom: "https://some.subdomain.sitename.com/Name1.wsdl"
a u samom wsdl-u je adresa: "http://sitename.com/Name1"?

Ako neko moze da pomogne bio bih zahvalan. Takodje da li je problem sto ovi tagovi dobijeni sa __getLastRequest() uopste nisu isti kao potreban zahtev, ili je to nesto interno. Nemam iskustva sa ovim Soap-om i wsdl-om :( Da li je greska do mog pristupa, ili je na serveru... HVALA NA BILO KAKVIM INFORMACIJAMA.
[ kiklop74 @ 10.07.2013. 21:33 ] @
SoapClient podrzava certificate samo u pem formatu i certifikat mora da bude ucitan u varijablu a ne postavljanjem putanje.

Code:

new soapclient("somewsdl", array('local_cert'=>file_get_contents('<somepath>/key.pem'),'passphrase'=>'password')); 


[ maddog_srb @ 11.07.2013. 18:11 ] @
Hvala na odgovoru, vec sam mislio da mi ni na ovu temu niko nece odgovoriti posto mi od kraja 2011-te niko nije odgovorio ni na jednu :) Mada postavio sam samo 6-7 tema ne vise. Salu na stranu u medjuvremenu sam shvatio da mora .pem format, tako da sada uspevam da se konektujem. Medjutim morao sam da navedem i "location" kao parametar SoapClient-a, bez njega nije htelo.

Sto se tice file_get_contents, vec sam bio probao na taj nacin, medjutim kada radim tako dobijam gresku "SOAP-ENV:ClientNot Authenticated", a kada samo navedem putanju do .pem fajla, onda dobijam gresku "Invalid AccountId", koja mi ima vise smisla, jer sam isprobavao sa random podacima. Da li je moguce da je to razlicita opcija zbog toga sto ja ovo isprobavam iz lokala na Win7 pomocu XAMPP-a... Zanima me da bih znao pri publish-u da obratim paznju na ovaj deo... Ali svakako cu probati i jedno i drugo.

Hvala na odgovoru, javicu da li sam na kraju uspeo da generisem potreban zahtev.
[ maddog_srb @ 16.08.2013. 18:20 ] @
Evo posle mesec dana sam dobio odgovor iz supporta, i rekli su da su resili problem (znaci bilo je nesto do njih) ali i dalje ne radi :)

Code:

REQUEST:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://WEBSITE.com/Minimal"><SOAP-ENV:Body><ns1:GetServicesByServiceTypeId>61</ns1:GetServicesByServiceTypeId></SOAP-ENV:Body></SOAP-ENV:Envelope>

REQUEST HEADERS:
POST /Minimal/ HTTP/1.1
Host: uat1.external.WEBSITE.com
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.5.0
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://WEBSITE.com/Minimal/GetServicesByServiceType"
Content-Length: 279


RESPONSE HEADERS:
HTTP/1.1 500 Internal Service Error
Date: Fri, 16 Aug 2013 16:34:38 GMT
Server: Apache/2.2.15 (Red Hat)
X-Powered-By: PHP/5.3.3
Content-Length: 284
Connection: close
Content-Type: text/xml; charset=utf-8

Response:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Client</faultcode><faultstring>Not Authenticated</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>


To je moj zahtev i njihov odgovor, jedino sto mi pada na pamet je da ns1 u mom zahtevu se ne poklapa sa Host header-om... da li to ima veze? Evo jos jednom kako kreiram SoapClient:

Code:

        // Create the SoapClient instance 
        $url        = "https://uat1.external.WEBSITE.com/Minimal.wsdl";
        $local_cert    = file_get_contents(dirname(dirname(__FILE__)) . "cert.pem");
        $password    = '************';
        
        $data = array(
            "trace" => 1, 
            "exception" => 0,
            "local_cert" => $local_cert,
            "passphrase" => $password,
            "location" => "https://uat1.external.WEBSITE.com/Minimal/",
            'cache_wsdl' => WSDL_CACHE_NONE,
            'soap_version'=> SOAP_1_1    
        );
        
    
        try{
                
            $client = new SoapClient($url, $data);

            ...