2012-04-05 59 views
0

我目前正在Magento基于“One Page Checkout”创建一个结帐页面 - 或者,我清空onepage.phtml并从头开始。Magento:从结算页面中删除JavaScript

订单被放置和一切,但用户永远不会到第三方支付页面;一些付款方式返回一个空白页面,而其他返回错误代码“Klarna :: setConfig中的错误:缺少配置字段:秘密”

我怀疑涉及到一些缺少的JavaScript,所以我的最终问题是:是否可以在没有JavaScript的情况下使结账工作,在这种情况下,如何执行?

如果相关,这里是我用来创建订单(放置在onepage.phtml的顶部)的PHP代码。

<?php 
    $checkout = Mage::getSingleton('checkout/type_onepage'); 

    //STEP(1) 
    $checkout->saveCheckoutMethod('guest'); 

    //STEP(2) 
    $checkout->saveBilling($_POST['billing'], false); 

    //STEP(3) 
    $checkout->saveShipping($_POST, false); 

    //STEP(4) 
    $checkout->saveShippingMethod('flatrate_flatrate'); 

    //STEP(5) 
    $checkout->savePayment($_POST['payment']); 

    //STEP(6) 
    $checkout->saveOrder(); 
?> 

预先感谢您!

+1

这是不可能的。 Magento签出几乎完全基于原型,您需要编写自己的方法来替换他们在JavaScript中执行的步骤以将其删除。 – 2012-04-05 15:31:09

+0

好的。但是,在结帐过程中,究竟是在JavaScript中做了什么? – Ivar 2012-04-06 08:17:45

回答

0

是的,你可以下订单没有任何JS。对于支持与savePayment方法后,一些重定向URL付款方式,你必须添加此行:

$redirectUrl = $checkout->getQuote() 
    ->getPayment() 
    ->getCheckoutRedirectUrl(); 
if ($redirectUrl) { 
    return $this->getResponse()->setRedirect($redirectUrl); 
} 

和saveOrder后补充一点:

$redirectUrl = $checkout->getRedirectUrl(); 
if ($redirectUrl) { 
    $this->_redirect($redirectUrl); 
} 

你也必须使用try {...}赶上() {...} block for error handling:

try { 
    $checkout = Mage::getSingleton('checkout/type_onepage'); 

    //STEP(1) 
    $checkout->saveCheckoutMethod('guest'); 

    //STEP(2) 
    $checkout->saveBilling($_POST['billing'], false); 

    //STEP(3) 
    $checkout->saveShipping($_POST, false); 

    //STEP(4) 
    $checkout->saveShippingMethod('flatrate_flatrate'); 

    //STEP(5) 
    $checkout->savePayment($_POST['payment']); 

    //STEP(6) 
    $checkout->saveOrder(); 
} catch (Mage_Core_Exception $e) { 
    Mage::getSingleton('checkout/session')->addError($e->getMessage()); 
} catch (Exception $e) { 
    Mage::logException($e); 
    Mage::getSingleton('checkout/session')->addError(Mage::helper('checkout')->__('Unable to process your order. Please try again later')); 
}