Verão como a ordem quando paypal transação cancelada pelo usuário
-
28-09-2020 - |
Pergunta
Como salvar a ordem a ordem de tabela em qualquer estado, quando o pagamento é cancelado através do paypal padrão.
Solução
Depois de passar algumas horas neste primeiro, eu vim a saber que o magento 1.9 inclui paypal Express, junto com o paypal padrão.para tornar isto claro, eu só desactivado o expresso via sql alterações e bloco reescreve (referindo-se alguns fontes externas).voltando para o ponto que precisa de uma substituição para o paypal cancelamento ação.Isso pode ser obtido por um observador sales_order_payment_cancel
, o resto dos seguintes códigos de explicar o processo.Espero que isso deve ajudar alguém.
local/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>
local/Stackoverflow/Paypalstandard/Block/Adminhtml/System/Config/Fieldset/Location.php
Esta é uma peça de substituição para desativar o paypal express - para isso, por favor consulte Alguns o link.
local/Stackoverflow/Paypalstandard/Block/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;
}
}
local/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);
}
}
etc/modules/Stackoverflow_Paypalstandard.xml
<config>
<modules>
<Stackoverflow_Paypalstandard>
<active>true</active>
<codePool>local</codePool>
</Stackoverflow_Paypalstandard>
</modules>
</config>