我正在使用magento 1.8.0.0在本地工作。我成功地创建了一种自定义付款方式。该方法出现在结账期间“付款信息”的付款方式列表中。问题是,当我选择它时,它会自动带来一张信用卡表格,这不是我想要的。我想要的是选择它,一旦我点击“继续”按钮,我就会被重定向到另一个包含我自己的表格的php页面。
答案 0 :(得分:0)
OP解决方案。
对于想要重定向到网关并希望网关重定向回控制器的操作方法的人,以下是工作原理:
在文件app/code/local/Yourcompany/Yourmodule/Model/PaymentMethod.php
中,执行以下操作:
class Yourcompany_Yourmodule_Model_PaymentMethod extends Mage_Payment_Model_Method_Abstract{
protected $_code = "yourmodule";
protected $_isGateway = true;
protected $_canAuthorize = true;
protected function _getCheckout() {
return Mage::getSingleton('checkout/session'); }
public function getOrderPlaceRedirectUrl() { return Mage::getUrl(yourmodule/index/youraction', array('_secure' => true)); }}
在return Mage::getUrl(yourmodule/index/youraction', array('_secure' => true));
行中,"索引"意味着我的控制器php文件名为IndexController.php。您可以根据需要更改名称。
在文件app/code/local/Yourcompany/Yourmodule/controllers/IndexController.php
中,您可以编写如下代码:
class Yourcompany_Yourmodule_IndexController extends Mage_Core_Controller_Front_Action{
public function indexAction() {
$this->loadLayout();
$block = $this->getLayout()->createBlock('Mage_Core_Block_Template','yourmodule',array('template' => 'yourmodule/redirect.phtml'));
$this->getLayout()->getBlock('content')->append($block);
$this->renderLayout(); }
/*In the response action, you may code like this*/
public function responseAction() {
$status=$_REQUEST['param1'];
$orderNo=$_REQUEST['param2'];
if(somecondition)
{
/*update order status */
$ordera = Mage::getModel('sales/order')->loadByIncrementId($orderNo);
$ordera->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, true)->save();
$this->_redirect("checkout/onepage/success");
}
else
{
$this->_redirect("checkout/cart/");
}
} }
indexAction()重定向到模板redirect.phtml文件。此文件将收集一些要发送到网关的参数(订单号,客户名称,总金额等)。你可以把这个phtml文件放在这里:
app/design/frontend/base/default/template/yourmodule/redirect.phtml
其内容可编码如下:
<?php
$orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
$order = Mage::getSingleton('sales/order')->loadByIncrementId($orderId);
$order_amount=$order->getGrandTotal();
$customerData = Mage::getSingleton('customer/session')->getCustomer();
$customerAddressId = Mage::getSingleton('customer/session')->getCustomer()->getDefaultBilling(); //oder getDefaultShipping
$address = Mage::getModel('customer/address')->load($customerAddressId);
$customer_name=$address->getFirstname().' '.$address->getLastname();
$customer_email=$customerData->getEmail();
?>
<form name="myjs" method="post" action="http://yourgatewayaddreshere">
<input type="hidden" name="customername" value="<?php echo $customer_name; ?>">
<input type="hidden" name="customermail" value="<?php echo $customer_email; ?>">
<input type="hidden" name="TotalMoney" value="<?php echo $order_amount; ?>">
</form>
<script type="text/javascript">
document.myjs.submit();
</script>