У нас возникли некоторые проблемы с настройкой PHP SOAP Client для использования Royal Mail Tracking API. У нас есть учетная запись, настроенная с помощью Royal Mail, и у нас есть идентификаторы и секреты. Мы можем заставить его работать с SOAPUI, но при попытке реализовать его в PHP мы всегда получаем ошибку «Неверная версия». У нас есть файл WSDL локально (который предоставляется Royal Mail через портал разработчиков), это работает с SOAPUI, но не с PHP SOAP Client. Мы надеялись, что кто-то сможет увидеть, что мы делаем что-то неправильно. Я отправлю код ниже, но не укажу наш секрет и идентификатор из кода.
<?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('Ymd\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;
Мы попытались использовать SOAP_1_1 и SOAP_1_2 для «soap_version», но он всегда возвращается с ошибкой «Неверная версия».
Надеюсь, кто-то может помочь.
Вам нужно установить ключ header
внутри массива http
так:
'stream_context' => stream_context_create( [ 'http' => [ 'header' => implode( "\r\n", [ 'Accept: application/soap+xml', 'X-IBM-Client-Id: ' . $clientId, 'X-IBM-Client-Secret: ' . $clientSecret, ] ), ], ] )