Я загрузил образец кода, чтобы запросить курс с веб-сайта Fedex … Я поместил файл WSDL в нужное место, у меня есть номер acct, пароль, номер счетчика и ключ. Когда я запускаю скрипт, я получаю эту ошибку:
Ошибка при обработке транзакции.
ОШИБКА
профессор
1000
Ошибка аутентификации
Сценарий, который они дают, выглядит следующим образом, и да, я действительно заменяю XXX и YYY везде, где он говорит:
<?php // Copyright 2009, FedEx Corporation. All rights reserved. // Version 7.0.0 require_once('fedex-common.php5'); $newline = "<br />"; //The WSDL is not included with the sample code. //Please include and reference in $path_to_wsdl variable. $path_to_wsdl = "RateService_v7.wsdl"; ini_set("soap.wsdl_cache_enabled", "0"); $client = new SoapClient($path_to_wsdl, array('trace' => 1)); // Refer to http://us3.php.net/manual/en/ref.soap.php for more information $request['WebAuthenticationDetail'] = array('UserCredential' => array('Key' => 'XXX', 'Password' => 'YYY')); // Replace 'XXX' and 'YYY' with FedEx provided credentials $request['ClientDetail'] = array('AccountNumber' => 'XXX', 'MeterNumber' => 'YYY');// Replace 'XXX' with your account and meter number $request['TransactionDetail'] = array('CustomerTransactionId' => ' *** Rate Request v7 using PHP ***'); $request['Version'] = array('ServiceId' => 'crs', 'Major' => '7', 'Intermediate' => '0', 'Minor' => '0'); $request['ReturnTransitAndCommit'] = true; $request['RequestedShipment']['DropoffType'] = 'REGULAR_PICKUP'; // valid values REGULAR_PICKUP, REQUEST_COURIER, ... $request['RequestedShipment']['ShipTimestamp'] = date('c'); $request['RequestedShipment']['ServiceType'] = 'FEDEX_GROUND'; // valid values STANDARD_OVERNIGHT, PRIORITY_OVERNIGHT, FEDEX_GROUND, ... $request['RequestedShipment']['PackagingType'] = 'YOUR_PACKAGING'; // valid values FEDEX_BOX, FEDEX_PAK, FEDEX_TUBE, YOUR_PACKAGING, ... $request['RequestedShipment']['Shipper'] = array('Address' => array( 'StreetLines' => array('10 Fed Ex Pkwy'), // Origin details 'City' => 'Memphis', 'StateOrProvinceCode' => 'TN', 'PostalCode' => '38115', 'CountryCode' => 'US')); $request['RequestedShipment']['Recipient'] = array('Address' => array ( 'StreetLines' => array('13450 Farmcrest Ct'), // Destination details 'City' => 'Herndon', 'StateOrProvinceCode' => 'VA', 'PostalCode' => '20171', 'CountryCode' => 'US')); $request['RequestedShipment']['ShippingChargesPayment'] = array('PaymentType' => 'SENDER', 'Payor' => array('AccountNumber' => 'XXX', // Replace 'XXX' with payor's account number 'CountryCode' => 'US')); $request['RequestedShipment']['RateRequestTypes'] = 'ACCOUNT'; $request['RequestedShipment']['RateRequestTypes'] = 'LIST'; $request['RequestedShipment']['PackageCount'] = '2'; $request['RequestedShipment']['PackageDetailSpecified'] = true; $request['RequestedShipment']['PackageDetail'] = 'INDIVIDUAL_PACKAGES'; // Or PACKAGE_SUMMARY $request['RequestedShipment']['RequestedPackageLineItems'] = array('0' => array('Weight' => array('Value' => 2.0, 'Units' => 'LB'), 'Dimensions' => array('Length' => 10, 'Width' => 10, 'Height' => 3, 'Units' => 'IN')), '1' => array('Weight' => array('Value' => 5.0, 'Units' => 'LB'), 'Dimensions' => array('Length' => 20, 'Width' => 20, 'Height' => 10, 'Units' => 'IN'))); try { $response = $client ->getRates($request); if ($response -> HighestSeverity != 'FAILURE' && $response -> HighestSeverity != 'ERROR') { printRequestResponse($client); } else { echo 'Error in processing transaction.'. $newline. $newline; foreach ($response -> Notifications as $notification) { if(is_array($response -> Notifications)) { echo $notification -> Severity; echo ': '; echo $notification -> Message . $newline; } else { echo $notification . $newline; } } } writeToLog($client); // Write to log file } catch (SoapFault $exception) { printFault($exception, $client); } ?>
Я не совсем уверен, почему он не работает, я читал об использовании прокси, но я не совсем уверен, как я буду использовать его в этом случае? Не следует ли использовать SOAP и WSDL, чтобы не использовать CURL, материал типа Connect Connect?
Если вы используете SoapUI ( http://www.soapui.org/ ), чтобы связаться с WSDL, какой ответ вы получите?
(SoapUI позволяет вам тестировать SOAP / Wsdl без программирования, поэтому вы можете проверить правильность вызовов, если они есть, то проблема в коде.)
У меня также была такая же проблема, я вводил пароль, который я использовал для входа в систему, но нам нужно ввести пароль, который будет отправлен ваш адрес электронной почты после регистрации для информации тестовой учетной записи с помощью FEDEX:
Убедитесь, что значения, введенные вами ниже, верны:
if($var == 'shipaccount') Return 'Your Account Number'; if($var == 'meter') Return 'Your meter number'; if($var == 'key') Return 'Your key'; //These values wiil be shown in the page after registering for the test account if($var == 'password') Return 'Your Password'; // This will be sent to you by Fedex to your mail this is not your account password using to login
Согласитесь с Aditya Kumar или проверьте в своем файле wsdl внизу. есть код
<s1:address location="https://wsbeta.fedex.com:443/web-services/ship"/>
измените его на
<s1:address location="https://ws.fedex.com:443/web-services/ship"/>
Редактируйте файл fedex-common.php5, заменив 'XXX' вашей информацией в следующих параметрах
if($var == 'shipaccount') Return 'YOUR TEST ACCOUNT NUMBER HERE'; if($var == 'billaccount') Return 'YOUR TEST ACCOUNT NUMBER HERE'; if($var == 'meter') Return 'YOUR TEST METER NUMBER HERE'; if($var == 'key') Return 'YOUR TEST KEY HERE'; if($var == 'password') Return 'YOUR TEST PASSWORD HERE';
Надеюсь, это поможет кому-то.
в файле библиотеки fedex-common.php5 измените следующие поля на предоставленные учетные данные:
if($var == 'shipaccount') Return '123456'; if($var == 'billaccount') Return '123456'; if($var == 'dutyaccount') Return '123456'; if($var == 'accounttovalidate') Return '123456'; if($var == 'meter') Return '654321'; if($var == 'key') Return 'ASDE324dfe'; if($var == 'password') Return 'K2wedrf4ASDE324dfe';
в wsdlfile ShipService_v * .wsdl изменить следующее:
<s1:address location="https://ws.fedex.com:443/web-services/ship"/>
Надеюсь, это сработает для вас.
Я столкнулся с этой проблемой ранее и нашел решение, наконец, после обсуждения с Техническим персоналом FedEx. Посмотрите, почему мы сталкиваемся с такой ошибкой из-за теста Test Test, который мы создали на веб-сайте разработчика. Одна вещь, которую мы должны иметь в виду, что номер тестового счета начинается с «6» – это «Производство» и «Начать ключ» с «5» – это правильный тестовый ключ. Пожалуйста, проверьте свой тестовый ключ, когда вы получите проблему аутентификации с кодом ошибки 1000.
Другой причиной, кроме этого, может быть, что конечная точка вашего Fedex Webservice отличается от прежней « https://wsbeta.fedex.com/web-services/track », это URL-адрес режима Sandbox, а в рабочей среде url должен быть таким, https://ws.fedex.com/web-services/track ". В URL-адресе для производства нет «бета-версии», поэтому, пожалуйста, проверьте конечную точку.