FedEx nakliye yöntemini kullanarak programlı sipariş oluşturmaya çalışıyorum. Diğer yöntemler iyi çalışıyor. FedEx gibi hata alıyorsanız lütfen nakliye yöntemini belirtin. Hata ayıklamadan sonra ağırlık ve değerin sıfır olduğunu biliyorum ama ürün ağırlığı ve değerinden bahsettim.
Kod:
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;
}
}
FedEx hata ayıklama günlüğü:
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} []
Sipariş verisi :
$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]
]
];
Bu konuda bana yardımcı olun Sabit oran ve ücretsiz gönderim çalıştı ama FedEx çalışmıyor.
1
mükemmel bir üründe ağırlık ayarladınız ancak teklifin herhangi bir paket ağırlığını belirlemediniz.Bu Fedex'e göre geçersiz bir paket ağırlığı teklifi döndürür. Şuna bak
—
Mudit-cedcommerce
Veri ağırlığı değerinin veritabanına kaydedildiğini kontrol ettiniz mi?
—
Anas Mansuri