Tuesday, October 21, 2014

Magento Fedex methord not working for India



I have tried to ship with Fedex for India Reagan. And i face some challenges. Then i try to solve it, and i got some solution.
If your origin country is India and you are shipping destination also in India and other country.

For that you have to download RateService_v13.wsdl for fedex
you can get this file from this link

Download it and save it

app\code\core\Mage\Usa\etc\wsdl\FedEx\

Now go to the

app\code\core\Mage\Usa\Model\Shipping\Carrier\Fedex.php

and find

protected function _formRateRequest

Now change function body with

protected function _formRateRequest($purpose)
{
    $r = $this->_rawRequest;
    $ratesRequest = array(
        'WebAuthenticationDetail' => array(
            'UserCredential' => array(
                'Key'      => $r->getKey(),
                'Password' => $r->getPassword()
            )
        ),
        'ClientDetail' => array(
            'AccountNumber' => $r->getAccount(),
            'MeterNumber'   => $r->getMeterNumber()
        ),
        'Version' => $this->getVersionInfo(),
        'RequestedShipment' => array(                                
            'DropoffType'   => $r->getDropoffType(),
            'ShipTimestamp' => date('c'),                   
            'PackagingType' => $r->getPackaging(),
            'Shipper' => array(
                'AccountNumber' => $r->getAccount(),               
                'Address' => array(
                    'PostalCode'  => $r->getOrigPostal(),
                    'CountryCode' => $r->getOrigCountry()
                )
            ),
            'Recipient' => array(
                'AccountNumber' => $r->getAccount(),                 
                'Address' => array(
                    'PostalCode'  => $r->getDestPostal(),
                    'CountryCode' => $r->getDestCountry(),
                    'Residential' => (bool)$this->getConfigData('residence_delivery')
                )
            )
            )
        );

    if($r->getDestCountry()=='IN'){
        $ratesRequest['RequestedShipment']['ServiceType'] = 'STANDARD_OVERNIGHT';
        $ratesRequest['RequestedShipment']['CustomsClearanceDetail'] = array(
                        'DutiesPayment' => array(
                            'PaymentType' => 'SENDER',
                            'Payor' => array(
                                'ResponsibleParty' => array(
                                'AccountNumber' => $r->getAccount(),
                                'Contact' =>array(
                                    'ContactId' => 'sender Contact Id',
                                    'PersonName' => 'Sender Name',
                                    'Title' => 'ABC',
                                    'CompanyName' => 'Sender Company Name',
                                    'PhoneNumber' => '1234567890',
                                    'PhoneExtension' => '91',
                                    'PagerNumber' =>'12', 
                                    'FaxNumber' => '1234567890',
                                    'EMailAddress' => 'mahesh@camstech.com'),
                                'Address' => array('StreetLines' => 'Test Sender Address Line',                                                 
                                                'PostalCode' => $r->getOrigPostal(),
                                                'CountryCode' => $r->getOrigCountry())
                                 )                                          
                                        ),

                            ),
                        'DocumentContent' => 'NON_DOCUMENTS',
                        'CustomsValue' => array('Currency' => 'INR',
                                                'Amount' => '100'),
                        'CommercialInvoice' => array('Purpose' => 'SOLD')

                    );
        $ratesRequest['RequestedShipment']['RequestedPackageLineItems'] = array(
                                'SequenceNumber'=>1,
                                'GroupNumber'=>1,
                                'GroupPackageCount'=>1,
                                'Weight' => array(
                                    'Value' => 1.0,
                                    'Units' => 'KG'
                                ),
                                'Dimensions' => array(
                                    'Length' => 12,
                                    'Width' => 12,
                                    'Height' => 12,
                                    'Units' => 'IN'
                                )
                            );
    }else{
        $ratesRequest['RequestedShipment']['CustomsClearanceDetail'] = array(
                'CustomsValue' => array(
                    'Amount' => $r->getValue(),
                    'Currency' => $this->getCurrencyCode()
                )
            );
        $ratesRequest['RequestedShipment']['TotalInsuredValue'] = array(
                'Amount'  => $r->getValue(),
                'Currency' => $this->getCurrencyCode()
            );
        $ratesRequest['RequestedShipment']['ShippingChargesPayment'] = array(
                'PaymentType' => 'SENDER',
                'Payor' => array(
                    'AccountNumber' => $r->getAccount(),
                    'CountryCode'   => $r->getOrigCountry()
                )
            );
        $ratesRequest['RequestedShipment']['RateRequestTypes'] = 'LIST';
        $ratesRequest['RequestedShipment']['PackageCount']     = '1';
        $ratesRequest['RequestedShipment']['PackageDetail']    = 'INDIVIDUAL_PACKAGES';
        $ratesRequest['RequestedShipment']['RequestedPackageLineItems'] = array(
                '0' => array(
                    'Weight' => array(
                        'Value' => (float)$r->getWeight(),
                        'Units' => $this->getConfigData('unit_of_measure')
                    ),
                    'GroupPackageCount' => 1,
                )
            );               

        if ($purpose == self::RATE_REQUEST_GENERAL) {
            $ratesRequest['RequestedShipment']['RequestedPackageLineItems'][0]['InsuredValue'] = array(
                'Amount'  => $r->getValue(),
                'Currency' => $this->getCurrencyCode()
            );
        } else if ($purpose == self::RATE_REQUEST_SMARTPOST) {
            $ratesRequest['RequestedShipment']['ServiceType'] = self::RATE_REQUEST_SMARTPOST;           
            $ratesRequest['RequestedShipment']['SmartPostDetail'] = array(
                'Indicia' => ((float)$r->getWeight() >= 1) ? 'PARCEL_SELECT' : 'PRESORTED_STANDARD',
                'HubId' => $this->getConfigData('smartpost_hubid')
            );
        }
    }

    return $ratesRequest;
}