FedEx api を使用して料金サービスを見つけるのを手伝ってくれる人はいますか? 料金サービスを見つけるための 3 つのファイルがあります。
- fedex-common.php5
- RateWebServiceClient.php
- RateService_v14.wsdl
https://www.fedex.com/wpor/web/jsp/drclinks.jsp?links=wss/getstarted.html hereから 3 つのファイルすべてをダウンロードしました。RateWebServiceClient.php ファイルを実行すると、エラーが表示されます。
コード: 873 メッセージ: 指定されたアカウント番号はすべて一致する必要があります。
料金サービスを見つけるのを手伝ってください。これが私が使用したコードです
1.fedex-common.php5
<?php
// Copyright 2009, FedEx Corporation. All rights reserved.
define('TRANSACTIONS_LOG_FILE', '../fedextransactions.log'); // Transactions log file
/**
* Print SOAP request and response
*/
define('Newline',"<br />");
function printSuccess($client, $response) {
echo '<h2>Transaction Successful</h2>';
echo "\n";
printRequestResponse($client);
}
function printRequestResponse($client){
echo '<h2>Request</h2>' . "\n";
echo '<pre>' . htmlspecialchars($client->__getLastRequest()). '</pre>';
echo "\n";
echo '<h2>Response</h2>'. "\n";
echo '<pre>' . htmlspecialchars($client->__getLastResponse()). '</pre>';
echo "\n";
}
/**
* Print SOAP Fault
*/
function printFault($exception, $client) {
echo '<h2>Fault</h2>' . "<br>\n";
echo "<b>Code:</b>{$exception->faultcode}<br>\n";
echo "<b>String:</b>{$exception->faultstring}<br>\n";
writeToLog($client);
echo '<h2>Request</h2>' . "\n";
echo '<pre>' . htmlspecialchars($client->__getLastRequest()). '</pre>';
echo "\n";
}
/**
* SOAP request/response logging to a file
*/
function writeToLog($client){
if (!$logfile = fopen(TRANSACTIONS_LOG_FILE, "a"))
{
error_func("Cannot open " . TRANSACTIONS_LOG_FILE . " file.\n", 0);
exit(1);
}
fwrite($logfile, sprintf("\r%s:- %s",date("D M j G:i:s T Y"), $client->__getLastRequest(). "\n\n" . $client->__getLastResponse()));
}
/**
* This section provides a convenient place to setup many commonly used variables
* needed for the php sample code to function.
*/
function getProperty($var){
if($var == 'key') Return 'HxxJgDtsmXIZbKik';
if($var == 'password') Return 'ZyZK1pBXkxtwchIYnVBU4Z56R';
if($var == 'shipaccount') Return '510087208';
if($var == 'billaccount') Return '510051408 ';
if($var == 'dutyaccount') Return '';
if($var == 'freightaccount') Return '510087208';
if($var == 'trackaccount') Return '510087208';
if($var == 'meter') Return '100179026 ';
if($var == 'shiptimestamp') Return mktime(10, 0, 0, date("m"), date("d")+1, date("Y"));
if($var == 'spodshipdate') Return '2013-09-21';
if($var == 'serviceshipdate') Return '2013-09-26';
if($var == 'readydate') Return '2010-05-31T08:44:07';
if($var == 'closedate') Return date("Y-m-d");
if($var == 'pickupdate') Return date("Y-m-d", mktime(8, 0, 0, date("m") , date("d")+1, date("Y")));
if($var == 'pickuptimestamp') Return mktime(8, 0, 0, date("m") , date("d")+1, date("Y"));
if($var == 'pickuplocationid') Return 'XXX';
if($var == 'pickupconfirmationnumber') Return 'XXX';
if($var == 'dispatchdate') Return date("Y-m-d", mktime(8, 0, 0, date("m") , date("d")+1, date("Y")));
if($var == 'dispatchlocationid') Return 'XXX';
if($var == 'dispatchconfirmationnumber') Return 'XXX';
if($var == 'tag_readytimestamp') Return mktime(10, 0, 0, date("m"), date("d")+1, date("Y"));
if($var == 'tag_latesttimestamp') Return mktime(20, 0, 0, date("m"), date("d")+1, date("Y"));
if($var == 'expirationdate') Return '2013-05-24';
if($var == 'begindate') Return '2013-04-22';
if($var == 'enddate') Return '2013-04-25';
if($var == 'trackingnumber') Return 'XXX';
if($var == 'hubid') Return 'XXX';
if($var == 'jobid') Return 'XXX';
if($var == 'searchlocationphonenumber') Return '5555555555';
if($var == 'shipper') Return array(
'Contact' => array(
'PersonName' => 'Sender Name',
'CompanyName' => 'Sender Company Name',
'PhoneNumber' => '1234567890'
),
'Address' => array(
'StreetLines' => array('Address Line 1'),
'City' => 'Collierville',
'StateOrProvinceCode' => 'TN',
'PostalCode' => '38017',
'CountryCode' => 'US',
'Residential' => 1
)
);
if($var == 'recipient') Return array(
'Contact' => array(
'PersonName' => 'Recipient Name',
'CompanyName' => 'Recipient Company Name',
'PhoneNumber' => '1234567890'
),
'Address' => array(
'StreetLines' => array('Address Line 1'),
'City' => 'Herndon',
'StateOrProvinceCode' => 'VA',
'PostalCode' => '20171',
'CountryCode' => 'US',
'Residential' => 1
)
);
if($var == 'address1') Return array(
'StreetLines' => array('10 Fed Ex Pkwy'),
'City' => 'Memphis',
'StateOrProvinceCode' => 'TN',
'PostalCode' => '38115',
'CountryCode' => 'US'
);
if($var == 'address2') Return array(
'StreetLines' => array('13450 Farmcrest Ct'),
'City' => 'Herndon',
'StateOrProvinceCode' => 'VA',
'PostalCode' => '20171',
'CountryCode' => 'US'
);
if($var == 'searchlocationsaddress') Return array(
'StreetLines'=> array('240 Central Park S'),
'City'=>'Austin',
'StateOrProvinceCode'=>'TX',
'PostalCode'=>'78701',
'CountryCode'=>'US'
);
if($var == 'shippingchargespayment') Return array(
'PaymentType' => 'SENDER',
'Payor' => array(
'ResponsibleParty' => array(
'AccountNumber' => getProperty('billaccount'),
'Contact' => null,
'Address' => array('CountryCode' => 'US')
)
)
);
if($var == 'freightbilling') Return array(
'Contact'=>array(
'ContactId' => 'freight1',
'PersonName' => 'Big Shipper',
'Title' => 'Manager',
'CompanyName' => 'Freight Shipper Co',
'PhoneNumber' => '1234567890'
),
'Address'=>array(
'StreetLines'=>array(
'1202 Chalet Ln',
'Do Not Delete - Test Account'
),
'City' =>'Harrison',
'StateOrProvinceCode' => 'AR',
'PostalCode' => '72601-6353',
'CountryCode' => 'US'
)
);
}
function setEndpoint($var){
if($var == 'changeEndpoint') Return false;
}
function printNotifications($notes){
foreach($notes as $noteKey => $note){
if(is_string($note)){
echo $noteKey . ': ' . $note . Newline;
}
else{
printNotifications($note);
}
}
echo Newline;
}
function printError($client, $response){
print_r($client);
echo Newline;
print_r($response);
echo '<h2>Error returned in processing transaction</h2>';
echo "\n";
printNotifications($response -> Notifications);
printRequestResponse($client, $response);
}
function trackDetails($details, $spacer){
foreach($details as $key => $value){
if(is_array($value) || is_object($value)){
$newSpacer = $spacer. ' ';
echo '<tr><td>'. $spacer . $key.'</td><td> </td></tr>';
trackDetails($value, $newSpacer);
}elseif(empty($value)){
echo '<tr><td>'.$spacer. $key .'</td><td>'.$value.'</td></tr>';
}else{
echo '<tr><td>'.$spacer. $key .'</td><td>'.$value.'</td></tr>';
}
}
}
?>
…………
私の2番目のファイルは次のとおりです。
2.RateWebServiceClient.php
<?php
// Copyright 2009, FedEx Corporation. All rights reserved.
// Version 12.0.0
require_once('../../library/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 = "../../wsdl/RateService_v14.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' => getProperty('key'),
'Password' => getProperty('password')
)
);
$request['ClientDetail'] = array(
'AccountNumber' => getProperty('shipaccount'),
'MeterNumber' => getProperty('meter')
);
$request['TransactionDetail'] = array('CustomerTransactionId' => ' *** Rate Request v14 using PHP ***');
$request['Version'] = array(
'ServiceId' => 'crs',
'Major' => '14',
'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'] = 'INTERNATIONAL_PRIORITY'; // 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']['TotalInsuredValue']=array(
'Ammount'=>100,
'Currency'=>'USD'
);
$request['RequestedShipment']['Shipper'] = addShipper();
$request['RequestedShipment']['Recipient'] = addRecipient();
$request['RequestedShipment']['ShippingChargesPayment'] = addShippingChargesPayment();
$request['RequestedShipment']['RateRequestTypes'] = 'ACCOUNT';
$request['RequestedShipment']['RateRequestTypes'] = 'LIST';
$request['RequestedShipment']['PackageCount'] = '1';
$request['RequestedShipment']['RequestedPackageLineItems'] = addPackageLineItem1();
try {
if(setEndpoint('changeEndpoint')){
$newLocation = $client->__setLocation(setEndpoint('endpoint'));
}
$response = $client -> getRates($request);
if ($response -> HighestSeverity != 'FAILURE' && $response -> HighestSeverity != 'ERROR'){
$rateReply = $response -> RateReplyDetails;
echo '<table border="1">';
echo '<tr><td>Service Type</td><td>Amount</td><td>Delivery Date</td></tr><tr>';
$serviceType = '<td>'.$rateReply -> ServiceType . '</td>';
$amount = '<td>$' . number_format($rateReply->RatedShipmentDetails[0]->ShipmentRateDetail->TotalNetCharge->Amount,2,".",",") . '</td>';
if(array_key_exists('DeliveryTimestamp',$rateReply)){
$deliveryDate= '<td>' . $rateReply->DeliveryTimestamp . '</td>';
}else if(array_key_exists('TransitTime',$rateReply)){
$deliveryDate= '<td>' . $rateReply->TransitTime . '</td>';
}else {
$deliveryDate='<td> </td>';
}
echo $serviceType . $amount. $deliveryDate;
echo '</tr>';
echo '</table>';
printSuccess($client, $response);
}else{
printError($client, $response);
}
writeToLog($client); // Write to log file
} catch (SoapFault $exception) {
printFault($exception, $client);
}
function addShipper(){
$shipper = array(
'Contact' => array(
'PersonName' => 'Sender Name',
'CompanyName' => 'Sender Company Name',
'PhoneNumber' => '9012638716'
),
'Address' => array(
'StreetLines' => array('Address Line 1'),
'City' => 'Collierville',
'StateOrProvinceCode' => 'TN',
'PostalCode' => '38017',
'CountryCode' => 'US'
)
);
return $shipper;
}
function addRecipient(){
$recipient = array(
'Contact' => array(
'PersonName' => 'Recipient Name',
'CompanyName' => 'Company Name',
'PhoneNumber' => '9012637906'
),
'Address' => array(
'StreetLines' => array('Address Line 1'),
'City' => 'Richmond',
'StateOrProvinceCode' => 'BC',
'PostalCode' => 'V7C4V4',
'CountryCode' => 'CA',
'Residential' => false
)
);
return $recipient;
}
function addShippingChargesPayment(){
$shippingChargesPayment = array(
'PaymentType' => 'SENDER', // valid values RECIPIENT, SENDER and THIRD_PARTY
'Payor' => array(
'ResponsibleParty' => array(
'AccountNumber' => getProperty('billaccount'),
'CountryCode' => 'US'
)
)
);
return $shippingChargesPayment;
}
function addLabelSpecification(){
$labelSpecification = array(
'LabelFormatType' => 'COMMON2D', // valid values COMMON2D, LABEL_DATA_ONLY
'ImageType' => 'PDF', // valid values DPL, EPL2, PDF, ZPLII and PNG
'LabelStockType' => 'PAPER_7X4.75'
);
return $labelSpecification;
}
function addSpecialServices(){
$specialServices = array(
'SpecialServiceTypes' => array('COD'),
'CodDetail' => array(
'CodCollectionAmount' => array(
'Currency' => 'USD',
'Amount' => 150
),
'CollectionType' => 'ANY' // ANY, GUARANTEED_FUNDS
)
);
return $specialServices;
}
function addPackageLineItem1(){
$packageLineItem = array(
'SequenceNumber'=>1,
'GroupPackageCount'=>1,
'Weight' => array(
'Value' => 50.0,
'Units' => 'LB'
),
'Dimensions' => array(
'Length' => 108,
'Width' => 5,
'Height' => 5,
'Units' => 'IN'
)
);
return $packageLineItem;
}
?>
PHPでAPIを使用する他のソリューションがある場合も大歓迎です。