gpt4 book ai didi

magento 将结账付款重定向到第 3 方网关

转载 作者:行者123 更新时间:2023-12-01 23:11:09 25 4
gpt4 key购买 nike

我正在尝试实现我的新付款方式,它工作正常。但我的要求有点不同。我需要将用户重定向到支付网关页面。这就是我正在尝试实现的方式。
当用户点击 Place Order 时,我的 Namespace_Bank_Model_Payment >> 授权方法被调用。我的网关说发送初始请求,根据给定网关的详细信息发送 URL 和付款 ID。在此 URL 上,用户必须重定向到客户实际付款的位置。我在 Controller 成功和错误中有两个操作来处​​理最终响应。
由于在 ajax 请求中调用了此代码,因此我无法将用户重定向到另一个网站。有人可以指导我如何完成它吗?

这是我的代码。我已经实现了 getOrderPlaceRedirectUrl() 方法。
这是我的课::

<?php


class Namespace_Hdfc_Model_Payment extends Mage_Payment_Model_Method_Abstract
{
protected $_isGateway = true;
protected $_canAuthorize = true;
protected $_canUseCheckout = true;

protected $_code = "hdfc";


/**
* Order instance
*/
protected $_order;
protected $_config;
protected $_payment;
protected $_redirectUrl;

/**
* @return Mage_Checkout_Model_Session
*/
protected function _getCheckout()
{
return Mage::getSingleton('checkout/session');
}

/**
* Return order instance loaded by increment id'
*
* @return Mage_Sales_Model_Order
*/
protected function _getOrder()
{
return $this->_order;
}


/**
* Return HDFC config instance
*
*/
public function getConfig()
{
if(empty($this->_config))
$this->_config = Mage::getModel('hdfc/config');

return $this->_config;
}


public function authorize(Varien_Object $payment, $amount)
{
if (empty($this->_order))
$this->_order = $payment->getOrder();

if (empty($this->_payment))
$this->_payment = $payment;

$orderId = $payment->getOrder()->getIncrementId();
$order = $this->_getOrder();
$billingAddress = $order->getBillingAddress();

$tm = Mage::getModel('hdfc/hdfc');



$qstr = $this->getQueryString();
// adding amount
$qstr .= '&amt='.$amount;
//echo 'obj details:';
//print_r(get_class_methods(get_class($billingAddress)));
// adding UDFs
$qstr .= '&udf1='.$order->getCustomerEmail();
$qstr .= '&udf2='.str_replace(".", '', $billingAddress->getName() );
$qstr .= '&udf3='.str_replace("\n", ' ', $billingAddress->getStreetFull());
$qstr .= '&udf4='.$billingAddress->getCity();
$qstr .= '&udf5='.$billingAddress->getCountry();
$qstr .= '&trackid='.$orderId;

// saving transaction into database;

$tm->setOrderId($orderId);
$tm->setAction(1);
$tm->setAmount($amount);
$tm->setTransactionAt( now() );
$tm->setCustomerEmail($order->getCustomerEmail());
$tm->setCustomerName($billingAddress->getName());
$tm->setCustomerAddress($billingAddress->getStreetFull());
$tm->setCustomerCity($billingAddress->getCity());
$tm->setCustomerCountry($billingAddress->getCountry());
$tm->setTempStatus('INITIAL REQUEST SENT');
$tm->save();

Mage::Log("\n\n queryString = $qstr");

// posting to server

try{
$response = $this->_initiateRequest($qstr);
// if response has error;
if($er = strpos($response,"!ERROR!") )
{
$tm->setErrorDesc( $response );
$tm->setTempStatus('TRANSACTION FAILED WHILE INITIAL REQUEST RESPONSE');
$tm->save();
$this->_getCheckout()->addError( $response );
return false;
}


$i = strpos($response,":");
$paymentId = substr($response, 0, $i);
$paymentPage = substr( $response, $i + 1);

$tm->setPaymentId($paymentId);
$tm->setPaymentPage($paymentPage);
$tm->setTempStatus('REDIRECTING TO PAYMENT GATEWAY');
$tm->save();

// prepare url for redirection & redirect it to gateway

$rurl = $paymentPage . '?PaymentID=' . $paymentId;

Mage::Log("url to redicts:: $rurl");

$this->_redirectUrl = $rurl; // saving redirect rl in object

// header("Location: $rurl"); // this is where I am trying to redirect as it is an ajax call so it won't work
//exit;
}
catch (Exception $e)
{
Mage::throwException($e->getMessage());
}

}

public function getOrderPlaceRedirectUrl()
{
Mage::Log('returning redirect url:: ' . $this->_redirectUrl ); // not in log
return $this->_redirectUrl;
}

}
现在 getOrderPlaceRedirectUrl() 被调用了。我可以看到 Mage::log 消息。但网址不存在。我的意思是 $this->_redirectUrl 的值在函数调用时不存在。
还有一件事,我不打算向客户展示任何页面,例如“您正在被重定向”。

最佳答案

Magento 支持这种类型的支付网关作为标准,并直接支持将用户重定向到第三方站点进行支付。

在您的付款模型中,即扩展 Mage_Payment_Model_Method_Abstract 的模型,您需要实现以下方法:

function getOrderPlaceRedirectUrl() {
return 'http://www.where.should.we.pay.com/pay';

通常,您将用户重定向到站点上的某个页面,例如 /mymodule/payment/redirect,然后在 Controller 的操作中处理重定向逻辑。这使您的支付模型保持干净和无状态,同时允许您收到某种“您现在正在被转移到支付网关”消息。

在 session 变量中保存决定重定向到哪里所需的一切,通常也是 Mage::getSingleton('checkout/session')

Magento 对 Paypal 标准有一个非常可靠的实现,即使是困惑的。你可以在 app/code/core/Mage/Paypal/{Model/Standard.php,controllers/StandardController.php} 中查看他们是如何做的。

关于magento 将结账付款重定向到第 3 方网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6058430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com