Magento - 创建新的付款方式模块的问题

时间:2015-01-12 01:44:55

标签: php magento

我正在使用Magento 1.9.0.1

我正在使用自定义扩展程序添加额外的付款方式。 一切似乎都与扩展程序一起使用 - 付款方式显示正确,但当我尝试"下订单"时出现此错误选择了我的自定义方法。

这是我得到的错误:

  

处理您的请求时出错

     

出于安全原因,默认情况下禁用异常打印。

     

错误日志记录编号:321152034690

以下是报告:

a:5:{i:0;s:150:"Cannot send headers; headers already sent in /home/sportsdi/public_html/beta/app/code/local/Myname/Mygateway/controllers/PaymentController.php, line 1";i:1;s:1061:"#0 /home/sportsdi/public_html/beta/lib/Zend/Controller/Response/Abstract.php(115): Zend_Controller_Response_Abstract->canSendHeaders(true)
#1 /home/sportsdi/public_html/beta/app/code/core/Mage/Core/Model/App.php(1246): Zend_Controller_Response_Abstract->setHeader('Content-Type', 'text/html; char...')
#2 /home/sportsdi/public_html/beta/app/code/core/Mage/Core/Controller/Varien/Front.php(80): Mage_Core_Model_App->getResponse()
#3 /home/sportsdi/public_html/beta/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(202): Mage_Core_Controller_Varien_Front->getResponse()
#4 /home/sportsdi/public_html/beta/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#5 /home/sportsdi/public_html/beta/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#6 /home/sportsdi/public_html/beta/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#7 /home/sportsdi/public_html/beta/index.php(87): Mage::run('', 'store')
#8 {main}";s:3:"url";s:28:"/mygateway/payment/redirect/";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:7:"default";}

以下是我所得到的:/home/sportsdi/public_html/beta/app/code/local/Myname/Mygateway/controllers/PaymentController.php:

<?php
class Myname_Mygateway_PaymentController extends Mage_Core_Controller_Front_Action {
    // The redirect action is triggered when someone places an order
    public function redirectAction() {
        $this->loadLayout();
        $block = $this->getLayout()->createBlock('Mage_Core_Block_Template','mygateway',array('template' => 'mygateway/redirect.phtml'));
        $this->getLayout()->getBlock('content')->append($block);
        $this->renderLayout();
    }

    // The response action is triggered when your gateway sends back a response after processing the customer's payment
    public function responseAction() {
        if($this->getRequest()->isPost()) {

            /*
            /* Your gateway's code to make sure the reponse you
            /* just got is from the gatway and not from some weirdo.
            /* This generally has some checksum or other checks,
            /* and is provided by the gateway.
            /* For now, we assume that the gateway's response is valid
            */

            $validated = true;
            $orderId = '123'; // Generally sent by gateway

            if($validated) {
                // Payment was successful, so update the order's state, send order email and move to the success page
                $order = Mage::getModel('sales/order');
                $order->loadByIncrementId($orderId);
                $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true, 'Gateway has authorized the payment.');

                $order->sendNewOrderEmail();
                $order->setEmailSent(true);

                $order->save();

                Mage::getSingleton('checkout/session')->unsQuoteId();

                Mage_Core_Controller_Varien_Action::_redirect('checkout/onepage/success', array('_secure'=>true));
            }
            else {
                // There is a problem in the response we got
                $this->cancelAction();
                Mage_Core_Controller_Varien_Action::_redirect('checkout/onepage/failure', array('_secure'=>true));
            }
        }
        else
            Mage_Core_Controller_Varien_Action::_redirect('');
    }

    // The cancel action is triggered when an order is to be cancelled
    public function cancelAction() {
        if (Mage::getSingleton('checkout/session')->getLastRealOrderId()) {
            $order = Mage::getModel('sales/order')->loadByIncrementId(Mage::getSingleton('checkout/session')->getLastRealOrderId());
            if($order->getId()) {
                // Flag the order as 'cancelled' and save it
                $order->cancel()->setState(Mage_Sales_Model_Order::STATE_CANCELED, true, 'Gateway has declined the payment.')->save();
            }
        }
    }
}

你能帮我找出问题并解决它吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

如果模块中有任何echo语句,那么也会出现此错误,如果找到则在模块中找到echo,然后将其删除。

答案 1 :(得分:0)

拥有&#34; echo&#34;除非您打开输出缓冲,否则语句将导致此问题。如果你仍想看到回声的结果,那么就行了

ob_start();

在相关文件的顶部会显示您要查找的结果。

更多信息:http://php.net/manual/en/function.ob-start.php