Magento 1.8.0.0: добавить пользовательский способ оплаты, перенаправляющий на новую страницу

#magento #methods #payment #checkout #redirect

#magento #методы #оплата #Оформить покупку #перенаправление

Вопрос:

Я работаю локально с magento 1.8.0.0. Мне удалось создать пользовательский способ оплаты. Метод отображается в списке способов оплаты в разделе «Платежная информация» во время оформления заказа. Проблема в том, что когда я выбираю его, он автоматически выводит форму кредитной карты, а это не то, что я хочу. Я хочу выбрать его, и как только я нажму кнопку «Продолжить», я буду перенаправлен на другую страницу php, содержащую мою собственную форму.

Комментарии:

1. Вы хотите перенаправить на какой-либо шлюз?

2. Или на любую страницу пользовательской формы на сайте?

3. Привет, MTM! Я хочу перенаправить на шлюз.

4. будете ли вы перенаправлять их при размещении заказа на сайте или перед размещением заказа?

5. У меня просто есть код, который перенаправляет на шлюз, работает должным образом. Проблема в том, что я не знаю, где их разместить в Magento, чтобы, когда кто-то выбирает мой пользовательский способ оплаты, он / она перенаправлялся на этот шлюз. Спасибо.

Ответ №1:

Решение от 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)); «index» означает, что мой 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>