Tôi đang tạo một đơn đặt hàng theo chương trình với mã tôi đã viết trước đây có chức năng chính xác, khi sử dụng phương thức giao hàng miễn phí (nghĩa là freeshipping_freeshipping
)
Tuy nhiên, hiện tôi đang cố gắng đặt hàng bằng phương thức giao hàng (từ mô-đun của WebShopApps ).
$shipping_address->setCollectShippingRates(true)->collectShippingRates()
->setShippingMethod($delivery)
->setPaymentMethod($payment);
Trong trường hợp $delivery
là mã phương pháp vận chuyển. Khi tôi đặt hàng, tôi nhận được một lỗi
a:5:{i:0;s:33:"Please specify a shipping method.";i:1;s:1554:"#0 /chroot/home/site/site/html/app/code/core/Mage/Sales/Model/Service/Quote.php(303): Mage::throwException('Please specify ...')
Khi điều hướng đến tệp này ( Quote.php
) trên dòng 303:
protected function _validate()
{
if (!$this->getQuote()->isVirtual()) {
$address = $this->getQuote()->getShippingAddress();
$addressValidation = $address->validate();
if ($addressValidation !== true) {
Mage::throwException(
Mage::helper('sales')->__('Please check shipping address information. %s', implode(' ', $addressValidation))
);
}
$method= $address->getShippingMethod();
$rate = $address->getShippingRateByCode($method);
if (!$this->getQuote()->isVirtual() && (!$method || !$rate)) {
Mage::throwException(Mage::helper('sales')->__('Please specify a shipping method.')); //this is line 303
}
}
....
Để thử và giải quyết vấn đề này, tôi đã đi theo con đường tạo đơn hàng thông qua adminhtml và sửa đổi Quote.php
cho mục đích thử nghiệm, thành:
echo ($method . " and " . $rate);die();
Sau đó tôi được cung cấp một trang trống với phương thức mà Magento đang mong đợi cũng như tỷ lệ (trống), nhưng thứ tự vẫn được tạo tốt. Phương thức Magento in ra cũng chính là giá trị chính xác mà $delivery
biến của tôi đã đặt.
Tôi đang làm gì sai?