Peso e valore di spedizione Fedex non vengono impostati durante la creazione dell'ordine a livello di codice


12

Sto provando a creare un ordine a livello di codice usando il metodo di spedizione FedEx. Altri metodi stanno funzionando bene. Quando sto impostando FedEx ottenendo l'errore come per favore specifica il metodo di spedizione. Dopo il debug vengo a sapere che peso e valore sono pari a zero ma ho menzionato il peso e il valore del prodotto.

Codice :

create.php

<?php
namespace yourmodule\namespace\Helper;
class Create extends \Magento\Framework\App\Helper\AbstractHelper
{
     /**
    * @param Magento\Framework\App\Helper\Context $context
    * @param Magento\Store\Model\StoreManagerInterface $storeManager
    * @param Magento\Catalog\Model\Product $product
    * @param Magento\Framework\Data\Form\FormKey $formKey $formkey,
    * @param Magento\Quote\Model\Quote $quote,
    * @param Magento\Customer\Model\CustomerFactory $customerFactory,
    * @param Magento\Sales\Model\Service\OrderService $orderService,
    */
    public function __construct(
        \Magento\Framework\App\Helper\Context $context,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Catalog\Model\Product $product,
        \Magento\Framework\Data\Form\FormKey $formkey,
        \Magento\Quote\Model\QuoteFactory $quote,
        \Magento\Quote\Model\QuoteManagement $quoteManagement,
        \Magento\Customer\Model\CustomerFactory $customerFactory,
        \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
        \Magento\Sales\Model\Service\OrderService $orderService,
        \Magento\Quote\Model\Quote\Address\Rate $shippingRate
    ) {
        $this->_storeManager = $storeManager;
        $this->_product = $product;
        $this->_formkey = $formkey;
        $this->quote = $quote;
        $this->quoteManagement = $quoteManagement;
        $this->customerFactory = $customerFactory;
        $this->customerRepository = $customerRepository;
        $this->orderService = $orderService;
        $this->shippingRate = $shippingRate;
        parent::__construct($context);
    }

    /**
     * Create Order On Your Store
     * 
     * @param array $orderData
     * @return array
     * 
    */
    public function createMageOrder($orderData) {
        $store=$this->_storeManager->getStore();
        $websiteId = $this->_storeManager->getStore()->getWebsiteId();
        $customer=$this->customerFactory->create();
        $customer->setWebsiteId($websiteId);
        $customer->loadByEmail($orderData['email']);// load customet by email address
        if(!$customer->getEntityId()){
            //If not avilable then create this customer 
            $customer->setWebsiteId($websiteId)
                    ->setStore($store)
                    ->setFirstname($orderData['shipping_address']['firstname'])
                    ->setLastname($orderData['shipping_address']['lastname'])
                    ->setEmail($orderData['email']) 
                    ->setPassword($orderData['email']);
            $customer->save();
        }
        $quote=$this->quote->create(); //Create object of quote
        $quote->setStore($store); //set store for which you create quote
        // if you have allready buyer id then you can load customer directly 
        $customer= $this->customerRepository->getById($customer->getEntityId());
        $quote->setCurrency();
        $quote->assignCustomer($customer); //Assign quote to customer

        //add items in quote
        foreach($orderData['items'] as $item){
            $product=$this->_product->load($item['product_id']);
            //$product->setPrice($item['price']);
             $product->setWeight(20);
            $quote->addProduct(
                $product,
                intval($item['qty'])
            );
        }

        //Set Address to quote
        $quote->getBillingAddress()->addData($orderData['shipping_address']);
        $quote->getShippingAddress()->addData($orderData['shipping_address']);

        // Collect Rates and Set Shipping & Payment Method

        $shippingAddress=$quote->getShippingAddress();

        /*$shippingAddress->setCollectShippingRates(true)
                        ->collectShippingRates()
                        ->setShippingMethod('fedex_FEDEX_GROUND'); //shipping method

        */
        //$this->shippingRate
          //  ->setCode('fedex_FEDEX_GROUND');
            //->getPrice(1);
        //$shippingAddress = $cart->getShippingAddress();
        //@todo set in order data
        $shippingAddress->setCollectShippingRates(true)
            ->collectShippingRates()
            ->setShippingMethod('fedex_FEDEX_GROUND'); //shipping method
        //$quote->getShippingAddress()->addShippingRate($this->shippingRate);       
        $quote->setPaymentMethod('checkmo'); //payment method
        $quote->setInventoryProcessed(false); //not effetc inventory
        $quote->save(); //Now Save quote and your quote is ready

        // Set Sales Order Payment
        $quote->getPayment()->importData(['method' => 'checkmo']);

        // Collect Totals & Save Quote
        $quote->collectTotals()->save();

        // Create Order From Quote
        $order = $this->quoteManagement->submit($quote);

        $order->setEmailSent(0);
        $increment_id = $order->getRealOrderId();
        if($order->getEntityId()){
            $result['order_id']= $order->getRealOrderId();
        }else{
            $result=['error'=>1,'msg'=>'Your custom message'];
        }
        return $result;
    }
}

Registro debug FedEx:

array (
  'request' => 
  array (
    'WebAuthenticationDetail' => 
    array (
      'UserCredential' => 
      array (
        'Key' => '****',
        'Password' => '****',
      ),
    ),
    'ClientDetail' => 
    array (
      'AccountNumber' => 'XXXXXX',
      'MeterNumber' => '****',
    ),
    'Version' => 
    array (
      'ServiceId' => 'crs',
      'Major' => '10',
      'Intermediate' => '0',
      'Minor' => '0',
    ),
    'RequestedShipment' => 
    array (
      'DropoffType' => 'REGULAR_PICKUP',
      'ShipTimestamp' => '2017-06-27T06:09:23+00:00',
      'PackagingType' => 'YOUR_PACKAGING',
      'TotalInsuredValue' => 
      array (
        'Amount' => 0,
        'Currency' => 'USD',
      ),
      'Shipper' => 
      array (
        'Address' => 
        array (
          'PostalCode' => '90034',
          'CountryCode' => 'US',
        ),
      ),
      'Recipient' => 
      array (
        'Address' => 
        array (
          'PostalCode' => '11701',
          'CountryCode' => 'US',
          'Residential' => false,
          'City' => 'Ave Forest Hills',
        ),
      ),
      'ShippingChargesPayment' => 
      array (
        'PaymentType' => 'SENDER',
        'Payor' => 
        array (
          'AccountNumber' => 'XXXXX',
          'CountryCode' => 'US',
        ),
      ),
      'CustomsClearanceDetail' => 
      array (
        'CustomsValue' => 
        array (
          'Amount' => 0,
          'Currency' => 'USD',
        ),
      ),
      'RateRequestTypes' => 'LIST',
      'PackageCount' => '1',
      'PackageDetail' => 'INDIVIDUAL_PACKAGES',
      'RequestedPackageLineItems' => 
      array (
        0 => 
        array (
          'Weight' => 
          array (
            'Value' => 0.0,
            'Units' => 'LB',
          ),
          'GroupPackageCount' => 1,
        ),
      ),
      'ServiceType' => 'SMART_POST',
      'SmartPostDetail' => 
      array (
        'Indicia' => 'PRESORTED_STANDARD',
        'HubId' => NULL,
      ),
    ),
  ),
  'result' => 
  stdClass::__set_state(array(
     'HighestSeverity' => 'ERROR',
     'Notifications' => 
    stdClass::__set_state(array(
       'Severity' => 'ERROR',
       'Source' => 'crs',
       'Code' => '809',
       'Message' => 'Package 1 - Weight is missing or invalid. ',
       'LocalizedMessage' => 'Package 1 - Weight is missing or invalid. ',
       'MessageParameters' => 
      stdClass::__set_state(array(
         'Id' => 'PACKAGE_INDEX',
         'Value' => '1',
      )),
    )),
     'Version' => 
    stdClass::__set_state(array(
       'ServiceId' => 'crs',
       'Major' => 10,
       'Intermediate' => 0,
       'Minor' => 0,
    )),
  )),
) {"is_exception":false} []

OrderData:

$orderData = [
     'email'        => 'ram10test@gmail.com', //buyer email id
     'shipping_address' =>[
            'firstname'    => 'Ramki ', //address Details
            'lastname'     => 'ram',
                    'street' => '10119 Ascan Ave Forest Hills',
                    'city' => 'Ave Forest Hills',
            'country_id' => 'US',
            'region' => '43',
            'postcode' => '11701',
            'telephone' => 'XXXX',
            'fax' => '32423',
            'save_in_address_book' => 1
                 ],
   'items'=> [ //array of product which order you want to create
              ['product_id'=>'2','qty'=>1]
            ]
];

Aiutatemi su questo ho provato forfettariamente e la spedizione gratuita funziona ma FedEx non funziona.


1
hai impostato il peso in un prodotto che è perfetto ma non hai impostato alcun peso del pacchetto del preventivo. A causa di ciò Fedex restituisce un peso del pacchetto non valido del preventivo. Quindi, imposta il peso prima di chiamare una funzione "-> collectShippingRates ()" e ri -controllare
Mudit-cedcommerce

hai verificato che il valore del peso del prodotto sia stato salvato nel database?
Anas Mansuri,

Risposte:


0

Vai al catalogo, seleziona il prodotto e aggiungi peso nel campo dell'attributo peso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.