php - 付款被拒绝后恢复 magento 报价

标签 php magento

我正在创建一个执行以下操作的 magento 支付扩展程序:

当用户在商家网站上点击结账时,他会被重定向到一个网站(如 paypal),并在该网站上输入他的支付数据。如果付款方式失败,用户将被重定向到商家网站。

但是,报价似乎不再有效。

有哪些可能性可以让最终用户重复使用他的报价?

一些可能性是:

  • 如果用户返回,则复制报价
  • 检索报价并将其设置为事件状态,以便再次显示

这是我在支付模型中使用的一些代码:

初始化支付方式为pending_payment

/**
 * Instantiate state to pending_payment
 * @param
 * @param
 */
public function initialize($paymentAction, $stateObject)
{
    $state = Mage_Sales_Model_Order::STATE_PENDING_PAYMENT;
    $stateObject->setState($state);
    $stateObject->setStatus(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT);
    $stateObject->setIsNotified(false);
}

重定向到支付方式(url 将重定向到远程主机)

/**
 * Checkout redirect URL getter for onepage checkout
 *
 * @see Mage_Checkout_OnepageController::savePaymentAction()
 * @see Mage_Sales_Model_Quote_Payment::getOrderPlaceRedirectUrl()
 * @return string
 */

public function getOrderPlaceRedirectUrl()
{
    return Mage::getUrl('pay/payment/redirect');
}

万一支付失败,用户将在 url/pay/payment/fail 返回(我已经知道如何为此创建一个 Controller ,我唯一的问题是重新激活报价)。

最佳答案

我找到了如何做到这一点(许多模块也这样做:Paypal、Authorizenet、Stripe)

您只需先取消该订单(使用 registerCancellation 方法),然后加载报价,将 setIsActive 设置为 1 并删除 ReservedOrderId 字段。

public function cancelAction()
{
    $session = Mage::getSingleton('checkout/session');
    if ($session->getLastRealOrderId())
    {
        $order = Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());
        if ($order->getId())
        {
            //Cancel order
            if ($order->getState() != Mage_Sales_Model_Order::STATE_CANCELED)
            {
                $order->registerCancellation("Canceled by Payment Provider")->save();
            }
            $quote = Mage::getModel('sales/quote')
                ->load($order->getQuoteId());
            //Return quote
            if ($quote->getId())
            {
                $quote->setIsActive(1)
                    ->setReservedOrderId(NULL)
                    ->save();
                $session->replaceQuote($quote);
            }

            //Unset data
            $session->unsLastRealOrderId();
        }
    }

    return $this->getResponse()->setRedirect( Mage::getUrl('checkout/onepage'));
}

关于php - 付款被拒绝后恢复 magento 报价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30260706/

相关文章:

php - 并行运行 Node.js 和 apache 的技术方面

php - 使用laravel强制下载文件

php - 仅使用mysql查询从第二个表中获取第一个表作为数组的记录

Magento - 从分层导航中检索当前系列中的最高产品价格

html - @media 标签不适用于 phtml 文件

php - 将 Symfony 4 部署到 Heroku

javascript - 使用 header 重定向时给 div 一个样式

javascript - 一页结账在 Magento 版本中不起作用1.7.0.2

Magento:如何从用户 ID 获取用户角色

php - Magento 2 - 添加样本数据后的 'Area code not set:'