Ich erstelle programmgesteuert eine Bestellung mit Code, den ich vor einiger Zeit geschrieben habe und der bei Verwendung der kostenlosen Versandmethode (dh freeshipping_freeshipping
) korrekt funktioniert.
Jetzt versuche ich jedoch, die Bestellung mithilfe einer Versandmethode aufzugeben (die aus einem Modul von WebShopApps stammt ).
$shipping_address->setCollectShippingRates(true)->collectShippingRates()
->setShippingMethod($delivery)
->setPaymentMethod($payment);
Wo $delivery
ist der Versandartcode? Wenn ich die Bestellung aufgebe, erhalte ich eine Fehlermeldung
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 ...')
Beim Navigieren zu dieser Datei ( Quote.php
) in Zeile 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
}
}
....
Um dies zu lösen, habe ich eine Bestellung über Adminhtml erstellt und Quote.php
zu Testzwecken geändert , um:
echo ($method . " and " . $rate);die();
Ich bekomme dann eine leere Seite mit der Methode, die Magento erwartet, sowie der Rate (die leer ist), aber die Bestellung wird immer noch gut erstellt. Die Methode, die Magento ausgibt, entspricht genau dem Wert, den meine $delivery
Variable festgelegt hat.
Was mache ich falsch?