プログラムで注文を作成する場合は、「配送方法を指定してください」


7

先ほど書いたコードを使用してプログラムで注文を作成しています。これは、送料無料の方法を使用するときに正しく機能します(つまりfreeshipping_freeshipping

しかし、私は今、配送方法(これはWebShopAppsによるモジュールからのもの)を使用して注文しようとしています。

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

$delivery配送方法コードはどこですか。注文するとエラーが発生する

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 ...')

Quote.php303行目でこのファイル()に移動する場合:

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
        }
    }
    ....

これを試して解決するために、私はAdminhtmlを介して注文を作成し、Quote.phpテストのために変更するというルートをたどりました。

echo ($method . " and " . $rate);die();

次に、Magentoが期待しているメソッドとレート(これは空白)の空白ページが表示されますが、注文は引き続き正常に作成されます。Magentoが出力するメソッドも、$delivery変数が設定した値とまったく同じです。

何が悪いのですか?


1
管理者で送料無料が有効になっていることを確認してください
アミットベラ

送料無料が有効
Moose

collectShippingRates()を呼び出す前に配送方法を設定してみましたか?
David Manners 2014年

回答:


2

$ quote-> getShippingAddress()-> collectTotals();を追加する必要があります。上記のコードの前。それが動作します :

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

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

2
も試しました。レートは計算されないため、レートは常にfalse / emptyを返します。Magento 1.9.x
Osify 2016

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

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

上記は私のために働きました。


ソリューションをsales_quote_collect_totals_beforeに追加すると、致命的なエラーが発生します:関数のネストの最大レベル '500'に達したため、中止します!
rbncha 2015年

2
動作しませんでした... setCollectShippingRatesレートは計算されないため、レートは常にfalse /空を返します。Magento 1.9.x
Osify 2016

0

これはWebShopAppsの運送業者自体とはまったく関係がないようです。リクエストに対して配送料が返されていないようです。

プログラムで作成するときに、shippingAddressオブジェクトとquoteオブジェクトが正しく入力されているかどうかを調査できますか?free_shipping運送業者は配送料を返すリクエストのフィールドを使用しないため、Tableratesなどの組み込みの運送業者の別のMagentoでテストすることをお勧めします。


0

各見積もり項目:

$quoteItem->setFreeShipping(true);

その後、見積もりに無料配送方法を設定できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.