Jump to content

CTT Webservice | Soap


MrMathew
 Share

Recommended Posts

Olá a todos,Tenho andado aqui ás voltas a tentar implementar, sem sucesso, o Webservice dos CTT via SOAP em PHP para gerar um envio. Deveria restornar dos CTT um XML com o tracking number, mas não retorna nada.

Precisava de uma ajuda para perceber o que estou a fazer de errado. 

Os CTT enviaram-me alguns exemplos de requests, acompanhado do url do Webservice que deveria usar para testar: 
http://logistica.cttexpresso.pt:8082/CTTExpressoWSQ/CTTShipmentProviderWS.svc, 

mais a SOAPAction: 
http://tempuri.org/ICTTShipmentProviderWS/CreateShipment\.

Já testei via CURL e __doRequest mas sem sucesso. O request é efetuado, fica ali a remoer durante alguns segundos e não devolve no final qualquer tipo de dados.

Exemplo de um dos requests que me enviaram para testes:
 

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:ctt="http://schemas.datacontract.org/2004/07/CTTExpressoWS" xmlns:ctt1="http://schemas.datacontract.org/2004/07/CTTExpressoWS.Models.ShipmentProvider" xmlns:ctt2="http://schemas.datacontract.org/2004/07/CTTExpressoWS.Models.ShipmentProvider.SEPs">

 <soapenv:Header/>
 <soapenv:Body>
    <tem:CreateShipment>
       <!--Optional:-->
       <tem:Input>
          <ctt:AuthenticationID>###########</ctt:AuthenticationID>
          <ctt:DeliveryNote>
             <ctt1:ClientId>#####</ctt1:ClientId>
             <ctt1:ContractId>###</ctt1:ContractId>
             <ctt1:DistributionChannelId>##</ctt1:DistributionChannelId>
              <!--Optional:-->
                   <ctt1:ExtData>?</ctt1:ExtData>
             <ctt1:ShipmentCTT>
                <!--Zero or more repetitions:-->
                <ctt1:ShipmentCTT>
                   <!--Optional:-->
                   <ctt1:HasSenderInformation>false</ctt1:HasSenderInformation>
                   <ctt1:ReceiverData>
                      <ctt1:Address>####</ctt1:Address>
                      <ctt1:City>####</ctt1:City>                  
                      <ctt1:ContactName>####</ctt1:ContactName>
                      <ctt1:Country>####</ctt1:Country>                        
                      <ctt1:Door>####</ctt1:Door>
                      <ctt1:Email>####</ctt1:Email>                      
                      <ctt1:Name>####</ctt1:Name>                
                      <ctt1:NonPTZipCode>####</ctt1:NonPTZipCode>
                      <ctt1:NonPTZipCodeLocation>####</ctt1:NonPTZipCodeLocation>                        
                      <ctt1:Phone>####</ctt1:Phone>
                      <ctt1:Type>Receiver</ctt1:Type>
                      </ctt1:ReceiverData>
                   <!--Optional:-->
                   <ctt1:SenderData>
                      <ctt1:Address>Morada do remetente</ctt1:Address>
                      <ctt1:City>Local do remente</ctt1:City>
                      <ctt1:ContactName>Nome do remetente</ctt1:ContactName>
                      <ctt1:Country>PT</ctt1:Country>
                      <ctt1:Door>3</ctt1:Door>
                      <ctt1:Email>Email do remetente para receber alertar</ctt1:Email>
                      <ctt1:MobilePhone>Telefonedo remetente para receber alertar</ctt1:MobilePhone>
                      <ctt1:Name>Nome do remetente</ctt1:Name>
                      <ctt1:NonPTZipCodeLocation>Lisboa</ctt1:NonPTZipCodeLocation>
                      <ctt1:PTZipCode3>###</ctt1:PTZipCode3>
                      <ctt1:PTZipCode4>###</ctt1:PTZipCode4>
                      <ctt1:PTZipCodeLocation>Lisboa</ctt1:PTZipCodeLocation>
                      <ctt1:Phone>###</ctt1:Phone>
                      <ctt1:Type>Sender</ctt1:Type>
                   </ctt1:SenderData>
             <ctt1:ShipmentData>
                         <ctt1:ClientReference>###</ctt1:ClientReference>
                         <ctt1:ExportType>#</ctt1:ExportType>        
                         <ctt1:IsDevolution>false</ctt1:IsDevolution>
                         <ctt1:Observations>International</ctt1:Observations>
                         <ctt1:Quantity>1</ctt1:Quantity>
                         <ctt1:UPUCode>Samples</ctt1:UPUCode>
                         <ctt1:Weight>1000</ctt1:Weight>                                                                                                            
                   </ctt1:ShipmentData>  
                </ctt1:ShipmentCTT>
             </ctt1:ShipmentCTT>
             <ctt1:SubProductId>###</ctt1:SubProductId>
          </ctt:DeliveryNote>
          <ctt:RequestID>###</ctt:RequestID>
          <!--Optional:-->
          <ctt:UserID>#</ctt:UserID>
       </tem:Input>
    </tem:CreateShipment>
 </soapenv:Body>
</soapenv:Envelope>

Teste 1 via CURL:

<?php
 $soapUrl = "http://logistica.cttexpresso.pt:8082/CTTExpressoWSQ/CTTShipmentProviderWS.svc";

 $xml_post_string = <<<EOT

 <?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:ctt="http://schemas.datacontract.org/2004/07/CTTExpressoWS" xmlns:ctt1="http://schemas.datacontract.org/2004/07/CTTExpressoWS.Models.ShipmentProvider" xmlns:ctt2="http://schemas.datacontract.org/2004/07/CTTExpressoWS.Models.ShipmentProvider.SEPs">
 <soapenv:Header/>
<soapenv:Body>
<tem:CreateShipment>
....
....
....
 EOT;
    $headers = array(
                 "Content-type: text/xml;charset=\"utf-8\"",
                 "Accept: text/xml",
                 "Cache-Control: no-cache",
                 "Pragma: no-cache",
                 "SOAPAction: http://tempuri.org/ICTTShipmentProviderWS/CreateShipment",
                 "Content-length: ".strlen($xml_post_string),
             );
$url = $soapUrl;
     // PHP cURL  for https connection with auth
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($ch, CURLOPT_TIMEOUT, 10);
     curl_setopt($ch, CURLOPT_POST, true);
     curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request
     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

     $response = curl_exec($ch);
     curl_close($ch);

     $parser = simplexml_load_string($response);
     echo $parser;
 ?>


Teste 2 via __doRequest

<?php
$client = new SoapClient(null, array('uri'=>'', 'location'=>''));

 $request = <<<EOT
 <?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:ctt="http://schemas.datacontract.org/2004/07/CTTExpressoWS" xmlns:ctt1="http://schemas.datacontract.org/2004/07/CTTExpressoWS.Models.ShipmentProvider" xmlns:ctt2="http://schemas.datacontract.org/2004/07/CTTExpressoWS.Models.ShipmentProvider.SEPs">
 <soapenv:Header/>
<soapenv:Body>
<tem:CreateShipment>
....
....
....
 EOT;
$url = "http://logistica.cttexpresso.pt:8082/CTTExpressoWSQ/CTTShipmentProviderWS.svc";
$action = "http://connecting.website.com/WSDL_Service/GetPrice"
$response = $client->__doRequest($request,$url,$action,SOAP_1_1);
echo("Response:\n");
var_dump($response);
?>


Agradeço qualquer ajuda do que posso estar a fazer de errado.

Link to comment
Share on other sites

Já tentaste falar com a equipa dos CTT para ver o que se passa do lado deles?
Se o teu pedido é válido e chega lá, deles devem ter um log/registo para perceber o que está a acontecer.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

O suporte deles em linguagens fora daquelas em que eles trabalham, é praticamente Nulo.
A resposta deles é que o exemplo deles em C# está a funcionar. Mesmo depois de ter dito que usava PHP para programar o Webservice.
Mesmo depois de lhes enviar os meus exemplo, recebia respostas deles do tipo:

Tentar adicionar: client.DefaultRequestHeaders.Add("SOAPAction", "\"http://tempuri.org/ICTTShipmentProviderWS/CreateShipment\""); 

A minha questão aqui coloca-se, se alguém puder ajudar, é se o código do Webservice em SOAP que estou a utilizar, é o 'típico' código para efetuar um request a um Webservice, 
ou se estou a fazer algo de errado. Obg.

 

Link to comment
Share on other sites

Viva,

Implementei essa interface no ano passado, curiosamente em C#, mas não recebi qualquer exemplo para servir de base.

Depois de partir alguma pedra nos parâmetros (não contaram a história toda, nem do serviço, nem dos serviços subscritos pelo cliente) sei que funcionou sem problemas até que na semana passada houve um caso em que o servidor deles passou a não responder atempadamente (timeout).

(podes ter tido o azar de na altura do teste o servidor deles estar com problemas)

Já experimentaste testar/usar o serviço deles apenas com o SOAPUI? só para ter a certeza que funciona com os parâmetros que tens e responde conforme o esperado?

 

  • Vote 1
Link to comment
Share on other sites

Trabalho com comercio electronico a muitos anos, desisti dos CTT por este motivo. Recomendo considerares transportadoras, a partir de 2kg fica ate mais barato.

Link to comment
Share on other sites

Bom dia

estou a tentar desenvolver uma série de integrações com transportadores. tenho a integração com a TNT praticamente concluída e aguardo resposta dos CTT e DPD que não enviam documentação nem credenciais nem por nada...

@Nelson Santosconsegues facultar alguma informação sobre a integração com os CTT para ir adiantando serviço?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.