Я создаю расширение с открытым исходным кодом для Magento. Это на очень ранних стадиях. Я борюсь с проблемой отмены заказов. Я нашел какое-то решение здесь
Magento - Как запустить код, если мой заказ отменен или возмещен .
Но всякий раз, когда я отменяю заказ, он не вызывает ни аннулирования (в случае только авторизации платежного действия), ни возврата (в случае платежа авторизации захвата).
Когда я использую возврат-возврат, он говорит, что заказ не может быть отменен.
Когда я использую authorize-void, он говорит, что заказ был отменен. Но функция Void () вообще не вызывалась. Я сохранил некоторые функции Mage :: Log () внутри. Которые не отображаются в файле журнала.
Я не понимаю, что не так.
Вот код.
Это способ оплаты модель
<?php
class Package_Cashondelivery_Model_Createorder extends Mage_Payment_Model_Method_Abstract
{
protected $_code = 'cashondelivery';
protected $_canCapture = true;
protected $_canUseCheckout = true;
protected $_canFetchTransactionInfo = true;
protected $_isGateway = true;
protected $_canUseInternal = true;
protected $_canVoid = true;
protected $_canRefund = true;
public function validate()
{
$paymentInfo = $this->getInfoInstance();
if ($paymentInfo instanceof Mage_Sales_Model_Order_Payment) {
$postCode = $paymentInfo->getOrder()->getBillingAddress()->getPostcode();
}
else {
$postCode = $paymentInfo->getQuote()->getBillingAddress()->getPostcode();
}
$res=Api->validatePostCode($postCode);
$r = $res=='false'? FALSE : TRUE;
if (!$r) {
Mage::throwException($this->_getHelper()->__('Sorry ! Service is not available in your area'));
}
return $this;
}
public function authorize(Varien_Object $payment, $amount)
{
-------------------------------
-------------------------------
-------------------------------
#This is working fine
$transactionId = Api->someCall();
$payment->setTransactionId();
-------------------------------
-------------------------------
-------------------------------
-------------------------------
-------------------------------
-------------------------------
return $this;
}
public function void(Varien_Object $payment)
{
if (!$this->canVoid($payment)) {
Mage::throwException($this->_getHelper()->__('Void action is not available.'));
}
-------------------------------
-------------------------------
-------------------------------
-------------------------------
Mage::Log('Starting Void here....');
$transactionId = $Payment->getTransactionId();
Api->cancelOrder($transactionId);
return $this;
-------------------------------
-------------------------------
-------------------------------
}
}
?>
Вот файл конфигурации.
<?xml version="1.0"?>
<config>
<modules>
<Package_Cashondelivery>
<!-- declare module's version information for database updates -->
<version>0.1.0</version>
</Package_Cashondelivery>
</modules>
<global>
<!-- declare model group for new module -->
<models>
<!-- model group alias to be used in Mage::getModel('newmodule/...') -->
<cashondelivery>
<!-- base class name for the model group -->
<class>Package_Cashondelivery_Model</class>
</cashondelivery>
</models>
<helpers>
<cashondelivery>
<class>Package_Cashondelivery_Helper</class>
</cashondelivery>
</helpers>
<!-- declare resource setup for new module -->
<resources>
<!-- resource identifier -->
<cashondelivery_setup>
<!-- specify that this resource is a setup resource and used for upgrades -->
<setup>
<!-- which module to look for install/upgrade files in -->
<module>Package_Cashondelivery</module>
</setup>
<!-- specify database connection for this resource -->
<connection>
<!-- do not create new connection, use predefined core setup connection -->
<use>core_setup</use>
</connection>
</cashondelivery_setup>
<cashondelivery_write>
<connection>
<use>core_write</use>
</connection>
</cashondelivery_write>
<cashondelivery_read>
<connection>
<use>core_read</use>
</connection>
</cashondelivery_read>
</resources>
</global>
<!-- declare default configuration values for this module -->
<default>
<payment>
<cashondelivery>
<active>1</active>
<model>cashondelivery/createorder</model>
<order_status>Processing</order_status>
<payment_action>authorize</payment_action>
<title>Cash On Delivery</title>
<example_uri>services.example.com</example_uri>
</cashondelivery>
</payment>
</default>
</config>
Кто-нибудь знает, почему это происходит и как решить.