チェックアウトのどこかでそのキーがfalseに設定されている場合、セッションでキーを設定するコードがチェックアウトにあり、請求ページに送り返す必要があります。私はそのコードを持っていますが、サードパーティのサービスを呼び出し、セッションでこのキーが欠落しているために間違って戻ってくるため、通常はオブザーバーの後に実行されるコードを使用することもできません
これが私のコードです。必要なものはすべて揃っていますが、応答がすぐに発生する必要があります。ディスパッチされたイベント行が起動された後は、応答のみがブラウザーに返されます。
public function checkForOrdKey(Varien_Event_Observer $observer)
{
$controllerAction = $observer->getControllerAction();
$request = $controllerAction->getRequest();
$controllerName = $request->getControllerName();
$stepData = $this->_getCheckoutSession()->getStepData();
$ordKeyRemoved = $this->_getCheckoutSession()->getOrdKeyRemoved();
// if it is the checkout onepage controller or inventory controller don't do anything
if (isset($controllerName) && $controllerName === "onepage" && $stepData['shipping']['complete'] && $ordKeyRemoved) {
$this->_getCheckoutSession()->setStepData('shipping', 'complete', false);
$result['goto_section'] = 'billing';
Mage::app()->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
$this->_getCheckoutSession()->setOrdKeyRemoved(false);
}
}