Magento Forum

   
Ошибка при удачном завершении трансзакции
 
afi13
Jr. Member
 
Total Posts:  16
Joined:  2012-09-26
 

После окончания чекаута идет редирект на checkout/onepage/success/, но появляется ошибка

data_invalid

Trace:
#0 /var/www/app/code/core/Mage/Sales/Model/Order/Invoice/Api.php(140): Mage_Api_Model_Resource_Abstract->_fault(\\\\\\\’data_invalid\\\\\\\’, \\\\\\\’Cannot do invoi...\\\\\\\’)
#1 /var/www/app/design/frontend/default/prosoundeffect/template/checkout/success.phtml(35): Mage_Sales_Model_Order_Invoice_Api->create(\\\\\\\’100000174\\\\\\\’, Array)
#2 /var/www/app/code/core/Mage/Core/Block/Template.php(241): include(\\\\\\\’/var/www/www.pr...\\\\\\\’)
#3 /var/www/app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView(\\\\\\\’frontend/defaul...\\\\\\\’)
#4 /var/www/app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView()
#5 /var/www/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Core_Block_Template->_toHtml()
#6 /var/www/app/code/core/Mage/Core/Block/Text/List.php(43): Mage_Core_Block_Abstract->toHtml()
#7 /var/www/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Core_Block_Text_List->_toHtml()
#8 /var/www/app/code/core/Mage/Core/Block/Abstract.php(582): Mage_Core_Block_Abstract->toHtml()
#9 /var/www/app/code/core/Mage/Core/Block/Abstract.php(526): Mage_Core_Block_Abstract->_getChildHtml(\\\\\\\’content\\\\\\\’, true)
#10 /var/www/app/design/frontend/default/prosoundeffect/template/page/1column.phtml(49): Mage_Core_Block_Abstract->getChildHtml(\\\\\\\’content\\\\\\\’)
#11 /var/www/app/code/core/Mage/Core/Block/Template.php(241): include(\\\\\\\’/var/www/www.pr...\\\\\\\’)
#12 /var/www/app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView(\\\\\\\’frontend/defaul...\\\\\\\’)
#13 /var/www/app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView()
#14 /var/www/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Core_Block_Template->_toHtml()
#15 /var/www/app/code/core/Mage/Core/Model/Layout.php(555): Mage_Core_Block_Abstract->toHtml()
#16 /var/www/app/code/core/Mage/Core/Controller/Varien/Action.php(390): Mage_Core_Model_Layout->getOutput()
#17 /var/www/app/code/core/Mage/Checkout/controllers/OnepageController.php(244): Mage_Core_Controller_Varien_Action->renderLayout()
#18 /var/www/app/code/core/Mage/Core/Controller/Varien/Action.php(419): Mage_Checkout_OnepageController->successAction()
#19 /var/www/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch(\\\\\\\’success\\\\\\\’)
#20 /var/www/trunk/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#21 /var/www/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#22 /var/www/app/Mage.php(683): Mage_Core_Model_App->run(Array)
#23 /var/www/index.php(89): Mage::run(\\\\\\\’\\\\\\\’, \\\\\\\’store\\\\\\\’)
#24 {main}

Подскажите пожалуйста в чем может быть проблема и как ее можно решить?

 
Magento Community Magento Community
Magento Community
Magento Community
 
niro
Mentor
 
Avatar
Total Posts:  1592
Joined:  2009-03-04
Latvia, Riga
 

Эта ошибка вызывается при попытке создать счёт для заказа в случае, когда функция

public function canInvoice()
возвращает
false

А уж что именно у вас не проходит, смотрите сами (Mage_Sales_Model_Order)

public function canInvoice()
    
{
        
if ($this->canUnhold() || $this->isPaymentReview()) {
            
return false;
        
}
        $state 
$this->getState();
        if (
$this->isCanceled() || $state === self::STATE_COMPLETE || $state === self::STATE_CLOSED{
            
return false;
        
}

        
if ($this->getActionFlag(self::ACTION_FLAG_INVOICE) === false{
            
return false;
        
}

        
foreach ($this->getAllItems() as $item{
            
if ($item->getQtyToInvoice()>&& !$item->getLockedDoInvoice()) {
                
return true;
            
}
        }
        
return false;
    
}

 
Magento Community Magento Community
Magento Community
Magento Community
 
afi13
Jr. Member
 
Total Posts:  16
Joined:  2012-09-26
 

Это происходит из-за того, чтоgetQtyToInvoice возвращает 0, с чем это может быть связано?

 
Magento Community Magento Community
Magento Community
Magento Community
 
niro
Mentor
 
Avatar
Total Posts:  1592
Joined:  2009-03-04
Latvia, Riga
 

Это значит, что нет товаров для выписывания счёта (если счёт выписан, то повторно на этот товар не выписывается). Смотрите что у вас в заказе (ordered, invoiced, shipped, refundet и т.п.)

 
Magento Community Magento Community
Magento Community
Magento Community
 
afi13
Jr. Member
 
Total Posts:  16
Joined:  2012-09-26
 

В админке есть и order и invoice. У order стоит статус processing, у invoice стоит статус paid.

 
Magento Community Magento Community
Magento Community
Magento Community
 
afi13
Jr. Member
 
Total Posts:  16
Joined:  2012-09-26
 

Только почему-то Refunded и Due равны нулю.

Subtotal $1,495.00
Shipping & Handling $31.46
Grand Total $1,526.46
Total Paid $1,526.46
Total Refunded $0.00
Total Due $0.00

 
Magento Community Magento Community
Magento Community
Magento Community
 
niro
Mentor
 
Avatar
Total Posts:  1592
Joined:  2009-03-04
Latvia, Riga
 
afi13 - 06 November 2012 11:07 PM

В админке есть и order и invoice. У order стоит статус processing, у invoice стоит статус paid.

Так как у счёта стоит статус оплачено, то это значит, что он создаётся. Возможно его создаёт метод оплаты сам и потом вызывается создание ещё раз. Ищите что происходит в коде… заочно никто не поможет.

 
Magento Community Magento Community
Magento Community
Magento Community
 
afi13
Jr. Member
 
Total Posts:  16
Joined:  2012-09-26
 

Спасибо, я понимаю, что заочно никто не поможет, буду разбираться в коде. Это могло вызвать обновление с 1.5 до 1.7? Может что-то с файловой системой, какой-то файл не обновился?
И еще не подскажите что делает функция isDummy()? Судя по всему, она возвращает неверное значение в getQtyToInvoice().

 
Magento Community Magento Community
Magento Community
Magento Community
 
niro
Mentor
 
Avatar
Total Posts:  1592
Joined:  2009-03-04
Latvia, Riga
 

Если это после обновления произошло, то могло smile

 
Magento Community Magento Community
Magento Community
Magento Community
 
afi13
Jr. Member
 
Total Posts:  16
Joined:  2012-09-26
 

public function getQtyToInvoice()
    
{
        
if ($this->isDummy()) {
            
return 0;
        
}
        
        $qty 
$this->getQtyOrdered()      
            - 
$this->getQtyInvoiced()
            - 
$this->getQtyCanceled();
        return 
max($qty0);
    
}

Судя по дебагу эта функция вызывается несколько раз, и в последний и предпоследний раз возвращает 0 из-за того, что в $this->getQtyInvoiced() приходит 1. Нигде не могу найти функцию $this->getQtyInvoiced(), где она должна быть?

 
Magento Community Magento Community
Magento Community
Magento Community
 
niro
Mentor
 
Avatar
Total Posts:  1592
Joined:  2009-03-04
Latvia, Riga
 

Это так называемые “Magic functions”. Функции как таковой может и не быть, а данные лежат или в объекте куда их положили с помощью функции setXxx или в базе данных в поле xxx.

 
Magento Community Magento Community
Magento Community
Magento Community
 
afi13
Jr. Member
 
Total Posts:  16
Joined:  2012-09-26
 

Если эта функция возвращает не ноль, это значит что invoice уже был создан? Что дальше можно проверить?

 
Magento Community Magento Community
Magento Community
Magento Community
 
afi13
Jr. Member
 
Total Posts:  16
Joined:  2012-09-26
 

Все было очень просто, в шаблоне, success.phtml зачем-то вызывалось создание еще одного инвойса, что и вызывало ошибку.

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
    Back to top