Speichern als Bestellung, wenn Paypal-Transaktion vom Benutzer abgebrochen wird
-
28-09-2020 - |
Frage
So speichern Sie die Order-to-Order-Tabelle in einem beliebigen Status, wenn die Zahlung über paypal Standard storniert wird.
Lösung
Nachdem ich einige Stunden damit verbracht hatte, erfuhr ich zum ersten Mal, dass Magento 1.9 paypal Express zusammen mit paypal Standard enthält.um dies klarzustellen, habe ich den Express einfach über SQL-Änderungen und Blockumschreibungen deaktiviert (siehe einige b. externe Quellen).um auf den Punkt zurückzukommen, brauchen wir eine Überschreibung für die Paypal-Stornierungsaktion.Dies kann von einem Beobachter erhalten werden sales_order_payment_cancel
, der Rest der folgenden Codes erklärt auch andere Prozesse.Hoffe, das sollte jemandem helfen.
lokal/ 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>
lokal / Stapelüberlauf / Paypalstandard / Blockieren / Adminhtml / System / Konfiguration / Feldsatz / Speicherort.PHP
Dies ist ein Teil der Überschreibung, um den paypal Express zu deaktivieren - dazu siehe Einige verknüpfen.
lokal / Stapelüberlauf / Paypalstandard / Blockieren / Standard / Umleiten.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;
}
}
lokal / Stapelüberlauf / Paypalstandard / Modell / Beobachter.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/Module/Stackoverflow_Paypalstandard.XML
<config>
<modules>
<Stackoverflow_Paypalstandard>
<active>true</active>
<codePool>local</codePool>
</Stackoverflow_Paypalstandard>
</modules>
</config>