Salvataggio come ordine quando la transazione PayPal annullata dall'utente
-
28-09-2020 - |
Domanda
Come salvare l'ordine per ordinare la tabella in qualsiasi stato quando il pagamento viene annullato tramite PayPal Standard.
Soluzione
Dopo aver trascorso alcune ore su questo, per la prima volta sono venuto a sapere che il Magento 1.9 include PayPal Express insieme allo standard PayPal. Quindi, rendendolo chiaro, ho appena disattivato l'espresso tramite modifiche allo SQL e la riscrittura del blocco (riferendosi alcune fonti esterne ). Tornando al punto abbiamo bisogno di un'override per l'azione di cancellazione PayPal. Questo può essere ottenuto da un Observer sales_order_payment_cancel
, il resto dei codici sotto spiega anche l'altro processo. Spero che questo dovrebbe aiutare qualcuno.
.
locale / 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>
.
.Locale / Stackoverflow / PayPalstandard / Block / Adminhtml / System / config / fieldset / location.php
Questa è una parte dell'override per disattivare il PayPal Express - per questo fare riferimento a alcuni link.
.Locale / 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;
}
}
.
.
.Locale / Stackoverflow / PayPalstandard / Modello / 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>
.