Сохранение как заказ, когда транзакция PayPal отменена пользователем

magento.stackexchange https://magento.stackexchange.com/questions/100324

Вопрос

Как сохранить заказ в таблице заказов в любом состоянии при отмене платежа через стандарт PayPal.

Это было полезно?

Решение

Потратив на это несколько часов, я впервые узнал, что magento 1.9 включает в себя PayPal Express наряду со стандартом PayPal.поэтому, проясняя это, я просто деактивировал экспресс через изменения sql и перезапись блоков (имея в виду некоторый Внешние источники).Возвращаясь к тому моменту, нам нужно переопределить действие отмены PayPal.Это может получить наблюдатель sales_order_payment_cancel, остальные приведенные ниже коды также объясняют другой процесс.Надеюсь, это кому-то поможет.

локальный/Stackoverflow/Paypalstandard/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Stackoverflow_Paypalstandard>
            <version>0.1.0</version>
        </Stackoverflow_Paypalstandard>
    </modules>
    <global>
        <models>
            <custom_paypalstandard>
                <class>Stackoverflow_Paypalstandard_Model</class>
            </custom_paypalstandard>
        </models>
        <blocks>
            <custom_paypalstandard>
                <class>Stackoverflow_Paypalstandard_Block</class>
            </custom_paypalstandard>
            <paypal>
                <rewrite>
                    <standard_redirect>Stackoverflow_Paypalstandard_Block_Standard_Redirect</standard_redirect>
                    <adminhtml_system_config_fieldset_location>Stackoverflow_Paypalstandard_Block_Adminhtml_System_Config_Fieldset_Location</adminhtml_system_config_fieldset_location>
                </rewrite>
            </paypal>
        </blocks>
        <events>
            <sales_order_payment_cancel>
                <observers>
                    <after_placing_order>
                        <class>custom_paypalstandard/observer</class>
                        <method>implementOrderStatus</method>
                    </after_placing_order>
                </observers>
            </sales_order_payment_cancel>
        </events>
    </global>
</config>

локальный/Stackoverflow/Paypalstandard/Block/Adminhtml/System/Config/Fieldset/Location.php

Это часть отмены активации PayPal Express. Для этого см. Некоторый связь.

локальный/Stackoverflow/Paypalstandard/Блокировать/Standard/Redirect.php

class Stackoverflow_Paypalstandard_Block_Standard_Redirect extends Mage_Paypal_Block_Standard_Redirect
{
    public function _toHtml()
    {
        $standard = Mage::getModel('paypal/standard');

        $form = new Varien_Data_Form();
        $form->setAction($standard->getConfig()->getPaypalUrl())
            ->setId('paypal_standard_checkout')
            ->setName('paypal_standard_checkout')
            ->setMethod('POST')
            ->setUseContainer(true);
        foreach ($standard->getStandardCheckoutFormFields() as $field=>$value) {
            $form->addField($field, 'hidden', array('name'=>$field, 'value'=>$value));
        }
        $idSuffix = Mage::helper('core')->uniqHash();
        $submitButton = new Varien_Data_Form_Element_Submit(array(
            'value'    => $this->__('Click here if you are not redirected within 10 seconds...'),
        ));
        $id = "submit_to_paypal_button_{$idSuffix}";
        $submitButton->setId($id);
        $form->addElement($submitButton);
        $html = '<html><body>';
        $html.= $this->__('You will be redirected to the PayPal website in a few seconds.');
        $html.= $form->toHtml();
        $html.= '<script type="text/javascript">document.getElementById("paypal_standard_checkout").submit();</script>';
        $html.= '</body></html>';

        return $html;
    }
}

локальный/Stackoverflow/Paypalstandard/Model/Observer.php


class Stackoverflow_Paypalstandard_Model_Observer
{

 public function implementOrderStatus($observer)
    {
        $payment = $observer->getEvent()->getPayment();
        $order = $payment->getOrder();
        $order->setActionFlag(Mage_Sales_Model_Order::ACTION_FLAG_CANCEL, false);
        $orderIds = Mage::getSingleton('adminhtml/session')->getNonCancelledOrders();
        if (!$orderIds) {
            $orderIds = array($order->getId());
        } else {
            $orderIds[] = $order->getId();
        }
        Mage::getSingleton('adminhtml/session')->setNonCancelledOrders($orderIds);
    }
}

и т. д./модули/Stackoverflow_Paypalstandard.xml


<config>
    <modules>
        <Stackoverflow_Paypalstandard>
            <active>true</active>
            <codePool>local</codePool>
        </Stackoverflow_Paypalstandard>
    </modules>
</config>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top