作为订单作为用户取消的PayPal交易
-
28-09-2020 - |
题
如何在通过PayPal标准取消付款时在任何状态下保存订单以订购表。
解决方案
在花费几个小时后,我首先知道Magento 1.9包括PayPal Express以及PayPal标准。因此,使得这清楚我刚刚通过SQL更改和阻止重写(参考一些外部源)。返回到PayPal取消行动需要覆盖的那一点。这可以通过观察者世代古典etagcode获得,其余的下面的代码也解释了其他过程。希望这应该帮助某人。
本地/ 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 / 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 / stactoverflow_paypalstandard.xml
<config>
<modules>
<Stackoverflow_Paypalstandard>
<active>true</active>
<codePool>local</codePool>
</Stackoverflow_Paypalstandard>
</modules>
</config>
.