#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>