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?
Antworten:
Sie sollten $ quote-> getShippingAddress () -> collectTotals () hinzufügen. vor Ihrem obigen Code. Es wird klappen :
quelle
Oben hat es für mich funktioniert.
quelle
Dies scheint völlig unabhängig vom WebShopApps-Anbieter selbst zu sein. Es scheint, dass für Ihre Anfrage keine Versandkosten zurückgegeben werden.
Können Sie untersuchen, ob Ihre Versandadresse und Ihr Angebotsobjekt beim programmgesteuerten Erstellen korrekt ausgefüllt sind? Ich empfehle, mit einem anderen Magento-Anbieter wie Tablerates zu testen, da der Träger free_shipping keine Felder in der Anfrage verwendet, um die Versandkosten zurückzugeben.
quelle
für jeden Angebotsposten:
Dann können Sie die Freeshipping-Methode für Ihr Angebot festlegen
quelle