Я полный новичок в программировании на PHP, но мне было поручено написать пример клиента PHP для веб-сервисов, который использует веб-сервис моей компании, написанный на Java. У нас есть два вида услуг. Те, которые требуют аутентификации и те, которые не требуют. Я использовал библиотеку wsdl2php для успешного взаимодействия с нашими сервисами, которые не нуждаются в аутентификации. Наши безопасные службы требуют, чтобы я добавил в свой запрос заголовок SOAP, который выглядит следующим образом:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sen="https://webservices.averittexpress.com/SendWebImageService">
<soapenv:Header xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns:authnHeader soapenv:mustUnderstand="0" xmlns:ns="http://webservices.averittexpress.com/authn">
<Username>xxxxxxxx</Username>
<Password>xxxxxxxx</Password>
</ns:authnHeader>
</soapenv:Header>
У меня проблема в том, что я понятия не имею, как это сделать с помощью wsdl2php или, если это вообще возможно. Вот файл PHP, который я сейчас использую для тестирования.
<?php
require_once 'LTLRateQuoteService.php';
$rqs = new LTLRateQuoteService();
$info = new ShipmentInfo();
$HeaderSecurity = array("authnHeader"=>array("UserName"=>"xxxxxx",
"Password"=>"xxxxxx",));
$header[] = new SoapHeader("http://schemas.xmlsoap.org/soap/encoding",
"Header",$HeaderSecurity);
$rqs->__setSoapHeaders($header);
$args = new AvtLTLRateQuoteRequest();
$args->AccountNumber = '1234578';
$args->OriginCity = 'Cookeville';
$args->OriginState = 'TN';
$args->OriginZip = '38501';
$args->DestinationCity = 'Morristown';
$args->DestinationState = 'TN';
$args->DestinationZip = '37814';
$args->ShipDate = '12/12/2011';
$args->Customer = 'S';
$args->PaymentType = 'P';
$info->NumPieces = '1';
$info->NumHandling = '1';
$info->CubicFeet = '1';
$info->Items = '1';
$info->TotalItem = '1';
$info->TotalWeight = '100';
$args->ShipmentInfo = $info;
$grq = new getLTLRate();
$grq->arg0 = $args;
$response = $rqs->getLTLRate($grq);
$details = $response->return;
print 'Total Freight Charge: ' . $details->TotalFreightCharge . ' ';
?>
Мне нужно как-то прикрепить имя пользователя и пароль к заголовку по этому запросу и не знаю, как это сделать. Я посмотрел на сайте wsdl2php и там очень мало с точки зрения документации о том, как использовать библиотеку. Любая помощь будет оценена.
Спасибо
Andrew