PayPal 트랜잭션이 사용자가 취소 할 때 주문으로 저장하십시오
-
28-09-2020 - |
문제
PayPal 표준을 통해 지불이 취소 될 때 어떤 상태에서도 테이블 주문을 저장하는 방법.
해결책
이 때 몇 시간을 보내면 처음에는 PayPal 표준과 함께 PayPal Express가 포함되어 있음을 처음 알게되었습니다. 그래서이 분명히 SQL 변경 사항을 통해 Express를 비활성화하고 ( 일부 외부 소스. PayPal 취소 조치를 위해 오버라이드가 필요한 시점으로 되돌아갑니다. 이것은 관찰자 sales_order_payment_cancel
에 의해 얻을 수 있으며, 아래의 코드의 나머지는 다른 프로세스도 설명합니다. 이것이 누군가를 도울 수 있기를 바랍니다.
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
이것은 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 / stackoverflow_paypalstandard.xml
<config>
<modules>
<Stackoverflow_Paypalstandard>
<active>true</active>
<codePool>local</codePool>
</Stackoverflow_Paypalstandard>
</modules>
</config>
.