2016-02-10 24 views
5

Royal Mail Tracking API'sini kullanmak için PHP SOAP İstemcisi kurma ile ilgili bazı sorunlar yaşıyoruz. Royal Mail ile kurulmuş bir hesabımız var ve kimliğimiz ve sırlarımız var. SOAPUI kullanarak çalışmaya başlayabiliriz ancak PHP'de uygulamaya çalışırken her zaman "Yanlış Sürüm" hatası alıyoruz. Yerel olarak WSDL dosyasına sahibiz (Royal Mail, geliştirici portalları aracılığıyla sağlanmıştır), SOAPUI ile birlikte çalışır, ancak PHP SOAP İstemcisi değildir. Birinin yanlış bir şey yapıp yapmadığımızı görebileceğini umuyorduk. Kodu aşağıya göndereceğim ancak şifremizi ve kimliğimizi koddan çıkaracağız.PHP ve Royal Mail Tracking API'si

<?php 
ini_set('soap.wsdl_cache_enabled', 0); 
ini_set('soap.wsdl_cache_ttl', 900); 
ini_set('default_socket_timeout', 15); 

$trackingNumber = 'F111111111JD'; 
$time = gmdate('Y-m-d\TH:i:s'); 

$intHeaders = [ 
    'dateTime' => $time, 
    'version' => '1.0', 
    'identification' => [ 
     'applicationId' => '***********', 
     'transactionId' => 123456 
    ] 
]; 

$wsdl = 'WSDL/Tracking_API_V1_1_1.wsdl'; 

$options = array(
    'uri'=>'http://schemas.xmlsoap.org/soap/envelope/', 
    'style'=>SOAP_RPC, 
    'use'=>SOAP_ENCODED, 
    'soap_version'=>SOAP_1_2, 
    'cache_wsdl'=>WSDL_CACHE_NONE, 
    'connection_timeout'=>15, 
    'trace'=>true, 
    'encoding'=>'UTF-8', 
    'exceptions'=>true, 
    'stream_context' => stream_context_create([ 
     "http" => [ 
      'Accept' => 'application/soap+xml', 
      'X-IBM-Client-Secret' => '****', 
      'X-IBM-Client-Id'=> '****' 
     ] 
    ]) 
); 
try { 
    $soap = new SoapClient($wsdl, $options); 
    $data = $soap->getSingleItemHistory(['integrationHeader' => $intHeaders, 'trackingNumber' => $trackingNumber]); 
} 
catch(Exception $e) { 
    die($e->getMessage()); 
} 

var_dump($data); 
die; 

Biz 'soap_version' için SOAP_1_1 ve SOAP_1_2 kullanarak denedim ama her zaman geri "Yanlış Versiyon" hatası ile geliyor.

Birisi size yardımcı olabilir.

cevap

7

Öyle gibi http dizinin içine header anahtarı ayarlamak gerekir:

'stream_context' => stream_context_create(
    [ 
     'http' => 
      [ 
       'header'   => implode(
        "\r\n", 
        [ 
         'Accept: application/soap+xml', 
         'X-IBM-Client-Id: ' . $clientId, 
         'X-IBM-Client-Secret: ' . $clientSecret, 
        ] 
       ), 
      ], 
    ] 
) 
+0

Çok teşekkür ederim. Bu bizim için çalıştı. Cevabınız ve siteye erişiminiz olmadığından cevabınıza geç cevap verdiğim için üzgünüm. – Flyingearl

+0

@alexbibie, sen benim günümü kurtardın. Uyguladığım banka api'lerinden birinde benzer senaryoyu 2 gün boyunca kafamla beceriyordum. – Anon30

İlgili konular