Hãy xác định một phương thức vận chuyển, khi lập trình tạo đơn hàng


7

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 $deliverylà 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.phpcho 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à $deliverybiến của tôi đã đặt.

Tôi đang làm gì sai?


1
Vui lòng kiểm tra giao hàng miễn phí được kích hoạt trong quản trị viên
Amit Bera

Giao hàng miễn phí được bật
Moose

Bạn đã thử thiết lập phương thức giao hàng trước khi gọi collShippingRates () chưa?
David Manners

Câu trả lời:


2

Bạn nên thêm $ quote-> getShippingAddress () -> collTotals (); trước mã trên của bạn. Nó sẽ hoạt động:

/* Important*/
 $quote->getShippingAddress()->collectTotals();// if not will show Please specify shipping methods.
 /* Important*/

$shipping_address->setCollectShippingRates(true)->collectShippingRates()
        ->setShippingMethod($delivery)
        ->setPaymentMethod($payment);

2
cố quá. tỷ lệ không được tính để tỷ lệ luôn trả về false / trống. Magento 1.9.x
Osify

1
$shipping_method = "flatrate_flatrate";
$shipping_address->setShippingMethod($shipping_method)    
$shipping_address->setCollectShippingRates(true)->collectShippingRates();

$quoteObj->collectTotals()->save();

Ở trên làm việc cho tôi.


thêm giải pháp của bạn vào sales_quote_collect_totals_b Before mang đến cho tôi Lỗi nghiêm trọng: Mức lồng tối đa của hàm '500' đạt được, hủy bỏ!
rbncha

2
đã thử, không hoạt động ... setCollectShippingRates tốc độ không được tính toán để tỷ lệ luôn trả về false / trống. Magento 1.9.x
Osify

0

Điều này dường như hoàn toàn không liên quan đến chính nhà mạng của WebShopApps, có vẻ như không có giá vận chuyển nào được trả lại cho yêu cầu của bạn.

Bạn có thể điều tra xem liệu đối tượng vận chuyển và trích dẫn của bạn có được điền chính xác khi bạn lập trình tạo chúng không? Tôi đề nghị thử nghiệm với một Magento khác trong nhà cung cấp dịch vụ được xây dựng như Tablerates, vì nhà cung cấp free_shipping không sử dụng bất kỳ trường nào theo yêu cầu để trả lại giá vận chuyển.


0

cho mỗi mục báo giá:

$quoteItem->setFreeShipping(true);

sau đó bạn có thể đặt phương thức chuyển sang trích dẫn của bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.