Can you post all the relevant code so we can try to help you out?
FedEx api integration
Hello , i need to integrate fedex api into my project . I found JeremyDunn package for this , but on every request i receive message '1000 authentication failed' . I am using FedEx testing credentials keys.
Can someone help me . Thanks in advance.
@REALRANDYALLEN - <?php
namespace App\Http\Controllers;
use FedEx\RateService\Request;
use FedEx\RateService\ComplexType;
use FedEx\RateService\SimpleType;
require_once ('credentials.php');
class TestController extends Controller
{
public function test()
{
$rateRequest = new ComplexType\RateRequest();
$rateRequest->WebAuthenticationDetail->UserCredential->Key = FEDEX_KEY;
$rateRequest->WebAuthenticationDetail->UserCredential->Password = FEDEX_PASSWORD;
$rateRequest->ClientDetail->AccountNumber = FEDEX_ACCOUNT_NUMBER;
$rateRequest->ClientDetail->MeterNumber = FEDEX_METER_NUMBER;
$rateRequest->TransactionDetail->CustomerTransactionId = 'testing rate service request';
$rateRequest->Version->ServiceId = 'crs';
$rateRequest->Version->Major = 24;
$rateRequest->Version->Minor = 0;
$rateRequest->Version->Intermediate = 0;
$rateRequest->ReturnTransitAndCommit = true;
$rateRequest->RequestedShipment->PreferredCurrency = 'USD';
$rateRequest->RequestedShipment->Shipper->Address->StreetLines = ['10 Fed Ex Pkwy'];
$rateRequest->RequestedShipment->Shipper->Address->City = 'Memphis';
$rateRequest->RequestedShipment->Shipper->Address->StateOrProvinceCode = 'TN';
$rateRequest->RequestedShipment->Shipper->Address->PostalCode = 38115;
$rateRequest->RequestedShipment->Shipper->Address->CountryCode = 'US';
$rateRequest->RequestedShipment->Recipient->Address->StreetLines = ['13450 Farmcrest Ct'];
$rateRequest->RequestedShipment->Recipient->Address->City = 'Herndon';
$rateRequest->RequestedShipment->Recipient->Address->StateOrProvinceCode = 'VA';
$rateRequest->RequestedShipment->Recipient->Address->PostalCode = 20171;
$rateRequest->RequestedShipment->Recipient->Address->CountryCode = 'US';
$rateRequest->RequestedShipment->ShippingChargesPayment->PaymentType = SimpleType\PaymentType::_SENDER;
$rateRequest->RequestedShipment->RateRequestTypes = [SimpleType\RateRequestType::_PREFERRED, SimpleType\RateRequestType::_LIST];
$rateRequest->RequestedShipment->PackageCount = 2;
$rateRequest->RequestedShipment->RequestedPackageLineItems = [new ComplexType\RequestedPackageLineItem(), new ComplexType\RequestedPackageLineItem()];
$rateRequest->RequestedShipment->RequestedPackageLineItems[0]->Weight->Value = 2;
$rateRequest->RequestedShipment->RequestedPackageLineItems[0]->Weight->Units = SimpleType\WeightUnits::_LB;
$rateRequest->RequestedShipment->RequestedPackageLineItems[0]->Dimensions->Length = 10;
$rateRequest->RequestedShipment->RequestedPackageLineItems[0]->Dimensions->Width = 10;
$rateRequest->RequestedShipment->RequestedPackageLineItems[0]->Dimensions->Height = 3;
$rateRequest->RequestedShipment->RequestedPackageLineItems[0]->Dimensions->Units = SimpleType\LinearUnits::_IN;
$rateRequest->RequestedShipment->RequestedPackageLineItems[0]->GroupPackageCount = 1;
$rateRequest->RequestedShipment->RequestedPackageLineItems[1]->Weight->Value = 5;
$rateRequest->RequestedShipment->RequestedPackageLineItems[1]->Weight->Units = SimpleType\WeightUnits::_LB;
$rateRequest->RequestedShipment->RequestedPackageLineItems[1]->Dimensions->Length = 20;
$rateRequest->RequestedShipment->RequestedPackageLineItems[1]->Dimensions->Width = 20;
$rateRequest->RequestedShipment->RequestedPackageLineItems[1]->Dimensions->Height = 10;
$rateRequest->RequestedShipment->RequestedPackageLineItems[1]->Dimensions->Units = SimpleType\LinearUnits::_IN;
$rateRequest->RequestedShipment->RequestedPackageLineItems[1]->GroupPackageCount = 1;
$rateServiceRequest = new Request();
$rateServiceRequest->getSoapClient()->__setLocation(Request::TESTING_URL);
$rateReply = $rateServiceRequest->getGetRatesReply($rateRequest);
dd($rateReply);
if (!empty($rateReply->RateReplyDetails)) {
foreach ($rateReply->RateReplyDetails as $rateReplyDetail) {
var_dump($rateReplyDetail->ServiceType);
if (!empty($rateReplyDetail->RatedShipmentDetails)) {
foreach ($rateReplyDetail->RatedShipmentDetails as $ratedShipmentDetail) {
var_dump($ratedShipmentDetail->ShipmentRateDetail->RateType . ": " . $ratedShipmentDetail->ShipmentRateDetail->TotalNetCharge->Amount);
}
}
echo "<hr />";
}
}
var_dump($rateReply);
}
}
It may just be that your credentials are not being set properly when referencing them from credentials.php....as a test try hard coding them in your test controller just to see if you get a different response:
// hard code all these instead of using the constants as a test
$rateRequest->WebAuthenticationDetail->UserCredential->Key = FEDEX_KEY;
$rateRequest->WebAuthenticationDetail->UserCredential->Password = FEDEX_PASSWORD;
$rateRequest->ClientDetail->AccountNumber = FEDEX_ACCOUNT_NUMBER;
$rateRequest->ClientDetail->MeterNumber = FEDEX_METER_NUMBER;
@REALRANDYALLEN - Thanks for advice , i tried this solution but result is the same .
ERROR prof 1000 Authentication Failed.
what does credentials.php contain?
@SNAPEY - In this file i put informations about fedex keys. FEDEX_KEY , FEDEX_PASSWORD , FEDEX_ACCOUNT_NUMBER , FEDEX_METER_NUMBER.
Yes thats great, but how ?
You probably should not have these in your code, better to store them in a database table or other file that can be easily changed when the client gets new credentials or wants a second deployment
@SNAPEY - I just moved Fedex keys information into the .env file. If you have any suggestions if you have experience with the integration of the FedEx, I really can not find what I'm doing wrong.
Thank you .
A quick Google search showed someone dealing with a similar issue: https://stackoverflow.com/questions/29728882/fedex-api-authentication-failed
Hopefully that helps somewhat.
Please or to participate in this conversation.