Модель Ipn PayPal и автоматическое изменение состояния заказа
Прежде всего я объясню вам о фактической функциональности:
- Клиент покупает в магазине через PayPal
- Операторы магазина вызывают заказ из внешнего программного обеспечения (WAWI; не знаю в en), и программное обеспечение устанавливает состояние заказа для завершения
- Операторы магазинов собирают деньги в PayPal, основываясь на своей учетной записи продавца, от клиента
- После этого Paypal через некоторое время отправляет автоматический запрос Ipn обратно в magento и устанавливает заказ вернуться к ожидающему
Дело в том, чтобы запретить PayPal (или модели Ipn) переводить заказ из состояния завершено обратно в состояние ожидания.
Мы все уже внесли некоторые изменения в класс: Mage_Paypal_Model_Ipn в Mage/Paypal/Model/Ipn.php . На мой взгляд, есть ли ответственный код в _registerPaymentCapture(). Вот наши правки (отмечены правкой):
if ($this->getRequestData('transaction_entity') == 'auth') {
return;
}
$this->_importPaymentInformation();
$payment = $this->_order->getPayment();
/* Edit: check if order state is complete */
$orderStateComplete = (Mage_Sales_Model_Order::STATE_COMPLETE == $this->_order->getState());
$orderStatusBefore = $this->_order->getStatus();
$payment->setTransactionId($this->getRequestData('txn_id'))
->setPreparedMessage($this->_createIpnComment(''))
->setParentTransactionId($this->getRequestData('parent_txn_id'))
->setShouldCloseParentTransaction('Completed' === $this->getRequestData('auth_status'))
->setIsTransactionClosed(0)
->registerCaptureNotification($this->getRequestData('mc_gross'));
/* Edit: reset state and status, if order was already complete before */
if ($orderStateComplete) {
$this->_order->setState(Mage_Sales_Model_Order::STATE_COMPLETE)
->setStatus($orderStatusBefore);
}
$this->_order->save();
// notify customer
$invoice = $payment->getCreatedInvoice();
if ($invoice && !$this->_order->getEmailSent()) {
$this->_order->sendNewOrderEmail()->addStatusHistoryComment(
Mage::helper('paypal')->__('Notified customer about invoice #%s.', $invoice->getIncrementId())
)
->setIsCustomerNotified(true)
->save();
}
Проблема все еще существует, и я не знаю, где редактировать файл, чтобы предотвратить изменения состояния заказа.
Привет & заранее благодарю
4
1 answers
Нам это удалось. Проблема заключалась в том, что программное обеспечение ERP не устанавливало состояние заказа, только статус, поэтому условие не срабатывало.
0
Author: Florin P., 2014-03-15 15:29:58