cancel
Showing results for 
Search instead for 
Did you mean: 

Can't open migrated orders due to serialize error

SOLVED

Can't open migrated orders due to serialize error

Hi all,

 

What a headache.. we migrated the orders to our new M2.3.5 website. They are giving now serialize issues.  Any tips or hints?

 

1 exception(s):
Exception #0 (InvalidArgumentException): Unable to unserialize value. Error: Syntax error

Exception #0 (InvalidArgumentException): Unable to unserialize value. Error: Syntax error
<pre>#1 Magento\Framework\Model\ResourceModel\AbstractResource->_unserializeField() called at [vendor/magento/framework/Model/ResourceModel/Db/AbstractDb.php:511]
#2 Magento\Framework\Model\ResourceModel\Db\AbstractDb->unserializeFields() called at [vendor/magento/module-sales/Model/ResourceModel/Order/Item/Collection.php:62]
#3 Magento\Sales\Model\ResourceModel\Order\Item\Collection->_afterLoad() called at [vendor/magento/framework/Data/Collection/AbstractDb.php:594]
#4 Magento\Framework\Data\Collection\AbstractDb->loadWithFilter() called at [vendor/magento/framework/Data/Collection/AbstractDb.php:565]
#5 Magento\Framework\Data\Collection\AbstractDb->load() called at [vendor/magento/framework/Data/Collection.php:333]
#6 Magento\Framework\Data\Collection->getItems() called at [vendor/magento/module-sales/Model/Order/ItemRepository.php:129]
#7 Magento\Sales\Model\Order\ItemRepository->getList() called at [vendor/magento/module-sales/Model/Order.php:2141]
#8 Magento\Sales\Model\Order->getItems() called at [generated/code/Magento/Sales/Model/Order/Interceptor.php:1259]
#9 Magento\Sales\Model\Order\Interceptor->getItems() called at [vendor/magento/module-sales/Model/Order/ShippingAssignmentBuilder.php:86]
#10 Magento\Sales\Model\Order\ShippingAssignmentBuilder->create() called at [vendor/magento/module-sales/Model/OrderRepository.php:294]
#11 Magento\Sales\Model\OrderRepository->setShippingAssignments() called at [vendor/magento/module-sales/Model/OrderRepository.php:144]
#12 Magento\Sales\Model\OrderRepository->get() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#13 Magento\Sales\Model\OrderRepository\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#14 Magento\Sales\Model\OrderRepository\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#15 Magento\Sales\Model\OrderRepository\Interceptor->___callPlugins() called at [generated/code/Magento/Sales/Model/OrderRepository/Interceptor.php:26]
#16 Magento\Sales\Model\OrderRepository\Interceptor->get() called at [vendor/magento/module-sales/Controller/Adminhtml/Order.php:155]
#17 Magento\Sales\Controller\Adminhtml\Order->_initOrder() called at [vendor/magento/module-sales/Controller/Adminhtml/Order/View.php:26]
#18 Magento\Sales\Controller\Adminhtml\Order\View->execute() called at [vendor/magento/framework/App/Action/Action.php:108]
#19 Magento\Framework\App\Action\Action->dispatch() called at [vendor/magento/module-backend/App/AbstractAction.php:231]
#20 Magento\Backend\App\AbstractAction->dispatch() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#21 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#22 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/module-backend/App/Action/Plugin/Authentication.php:143]
#23 Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch() called at [vendor/magento/framework/Interception/Interceptor.php:135]
#24 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#25 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->___callPlugins() called at [generated/code/Magento/Sales/Controller/Adminhtml/Order/View/Interceptor.php:26]
#26 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->dispatch() called at [vendor/magento/framework/App/FrontController.php:162]
#27 Magento\Framework\App\FrontController->processRequest() called at [vendor/magento/framework/App/FrontController.php:98]
#28 Magento\Framework\App\FrontController->dispatch() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#29 Magento\Framework\App\FrontController\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#30 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#31 Magento\Framework\App\FrontController\Interceptor->___callPlugins() called at [generated/code/Magento/Framework/App/FrontController/Interceptor.php:26]
#32 Magento\Framework\App\FrontController\Interceptor->dispatch() called at [vendor/magento/framework/App/Http.php:116]
#33 Magento\Framework\App\Http->launch() called at [generated/code/Magento/Framework/App/Http/Interceptor.php:24]
#34 Magento\Framework\App\Http\Interceptor->launch() called at [vendor/magento/framework/App/Bootstrap.php:261]
#35 Magento\Framework\App\Bootstrap->run() called at [pub/index.php:40]
</pre>

 

1 ACCEPTED SOLUTION

Accepted Solutions

Re: Can't open migrated orders due to serialize error

Hi Bhanu,

 

I replaced that function with your suggestion. It's returning a different error now.

 

1 exception(s):
Exception #0 (Exception): Warning: Invalid argument supplied for foreach() in /data/web/magento2/vendor/magento/module-sales/Model/OrderRepository.php on line 186

Exception #0 (Exception): Warning: Invalid argument supplied for foreach() in /data/web/magento2/vendor/magento/module-sales/Model/OrderRepository.php on line 186
<pre>#1 Magento\Sales\Model\OrderRepository->setPaymentAdditionalInfo() called at [vendor/magento/module-sales/Model/OrderRepository.php:145]
#2 Magento\Sales\Model\OrderRepository->get() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#3 Magento\Sales\Model\OrderRepository\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#4 Magento\Sales\Model\OrderRepository\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#5 Magento\Sales\Model\OrderRepository\Interceptor->___callPlugins() called at [generated/code/Magento/Sales/Model/OrderRepository/Interceptor.php:26]
#6 Magento\Sales\Model\OrderRepository\Interceptor->get() called at [vendor/magento/module-sales/Controller/Adminhtml/Order.php:155]
#7 Magento\Sales\Controller\Adminhtml\Order->_initOrder() called at [vendor/magento/module-sales/Controller/Adminhtml/Order/View.php:26]
#8 Magento\Sales\Controller\Adminhtml\Order\View->execute() called at [vendor/magento/framework/App/Action/Action.php:108]
#9 Magento\Framework\App\Action\Action->dispatch() called at [vendor/magento/module-backend/App/AbstractAction.php:231]
#10 Magento\Backend\App\AbstractAction->dispatch() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#11 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#12 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/module-backend/App/Action/Plugin/Authentication.php:143]
#13 Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch() called at [vendor/magento/framework/Interception/Interceptor.php:135]
#14 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#15 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->___callPlugins() called at [generated/code/Magento/Sales/Controller/Adminhtml/Order/View/Interceptor.php:26]
#16 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->dispatch() called at [vendor/magento/framework/App/FrontController.php:162]
#17 Magento\Framework\App\FrontController->processRequest() called at [vendor/magento/framework/App/FrontController.php:98]
#18 Magento\Framework\App\FrontController->dispatch() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#19 Magento\Framework\App\FrontController\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#20 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#21 Magento\Framework\App\FrontController\Interceptor->___callPlugins() called at [generated/code/Magento/Framework/App/FrontController/Interceptor.php:26]
#22 Magento\Framework\App\FrontController\Interceptor->dispatch() called at [vendor/magento/framework/App/Http.php:116]
#23 Magento\Framework\App\Http->launch() called at [generated/code/Magento/Framework/App/Http/Interceptor.php:24]
#24 Magento\Framework\App\Http\Interceptor->launch() called at [vendor/magento/framework/App/Bootstrap.php:261]
#25 Magento\Framework\App\Bootstrap->run() called at [pub/index.php:40]
</pre>

View solution in original post

6 REPLIES 6

Re: Can't open migrated orders due to serialize error

Hi @Bierkelder 


To solve this, go to

\vendor\magento\framework\Serialize\Serializer\json.php

 and replace the below function as mention below:

public function unserialize($string)
{
    if($this->is_serialized($string))
    {
        $string = $this->serialize($string);
    }
    $result = json_decode($string, true);
    if (json_last_error() !== JSON_ERROR_NONE) {
         throw new \InvalidArgumentException('Unable to unserialize value.');

    }
    return $result;
}

function is_serialized($value, &$result = null)
{
    // Bit of a give away this one
    if (!is_string($value))
    {
        return false;
    }
    // Serialized false, return true. unserialize() returns false on an
    // invalid string or it could return false if the string is serialized
    // false, eliminate that possibility.
    if ($value === 'b:0;')
    {
        $result = false;
        return true;
    }
    $length = strlen($value);
    $end    = '';
    switch ($value[0])
    {
        case 's':
            if ($value[$length - 2] !== '"')
            {
                return false;
            }
        case 'b':
        case 'i':
        case 'd':
            // This looks odd but it is quicker than isset()ing
            $end .= ';';
        case 'a':
        case 'O':
            $end .= '}';
            if ($value[1] !== ':')
            {
                return false;
            }
            switch ($value[2])
            {
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                case 7:
                case 8:
                case 9:
                    break;
                default:
                    return false;
            }
        case 'N':
            $end .= ';';
            if ($value[$length - 1] !== $end[0])
            {
                return false;
            }
            break;
        default:
            return false;
    }
    if (($result = @unserialize($value)) === false)
    {
        $result = null;
        return false;
    }
    return true;
}

It may help you to resolve issue.

If issue resolve, please click on 'Kudos' & Accept as Solution!



Problem solved? Click Accept as Solution!

Re: Can't open migrated orders due to serialize error

Hi Bhanu,

 

I replaced that function with your suggestion. It's returning a different error now.

 

1 exception(s):
Exception #0 (Exception): Warning: Invalid argument supplied for foreach() in /data/web/magento2/vendor/magento/module-sales/Model/OrderRepository.php on line 186

Exception #0 (Exception): Warning: Invalid argument supplied for foreach() in /data/web/magento2/vendor/magento/module-sales/Model/OrderRepository.php on line 186
<pre>#1 Magento\Sales\Model\OrderRepository->setPaymentAdditionalInfo() called at [vendor/magento/module-sales/Model/OrderRepository.php:145]
#2 Magento\Sales\Model\OrderRepository->get() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#3 Magento\Sales\Model\OrderRepository\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#4 Magento\Sales\Model\OrderRepository\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#5 Magento\Sales\Model\OrderRepository\Interceptor->___callPlugins() called at [generated/code/Magento/Sales/Model/OrderRepository/Interceptor.php:26]
#6 Magento\Sales\Model\OrderRepository\Interceptor->get() called at [vendor/magento/module-sales/Controller/Adminhtml/Order.php:155]
#7 Magento\Sales\Controller\Adminhtml\Order->_initOrder() called at [vendor/magento/module-sales/Controller/Adminhtml/Order/View.php:26]
#8 Magento\Sales\Controller\Adminhtml\Order\View->execute() called at [vendor/magento/framework/App/Action/Action.php:108]
#9 Magento\Framework\App\Action\Action->dispatch() called at [vendor/magento/module-backend/App/AbstractAction.php:231]
#10 Magento\Backend\App\AbstractAction->dispatch() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#11 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#12 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/module-backend/App/Action/Plugin/Authentication.php:143]
#13 Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch() called at [vendor/magento/framework/Interception/Interceptor.php:135]
#14 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#15 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->___callPlugins() called at [generated/code/Magento/Sales/Controller/Adminhtml/Order/View/Interceptor.php:26]
#16 Magento\Sales\Controller\Adminhtml\Order\View\Interceptor->dispatch() called at [vendor/magento/framework/App/FrontController.php:162]
#17 Magento\Framework\App\FrontController->processRequest() called at [vendor/magento/framework/App/FrontController.php:98]
#18 Magento\Framework\App\FrontController->dispatch() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#19 Magento\Framework\App\FrontController\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#20 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#21 Magento\Framework\App\FrontController\Interceptor->___callPlugins() called at [generated/code/Magento/Framework/App/FrontController/Interceptor.php:26]
#22 Magento\Framework\App\FrontController\Interceptor->dispatch() called at [vendor/magento/framework/App/Http.php:116]
#23 Magento\Framework\App\Http->launch() called at [generated/code/Magento/Framework/App/Http/Interceptor.php:24]
#24 Magento\Framework\App\Http\Interceptor->launch() called at [vendor/magento/framework/App/Bootstrap.php:261]
#25 Magento\Framework\App\Bootstrap->run() called at [pub/index.php:40]
</pre>

Re: Can't open migrated orders due to serialize error

To add to this, for invoices, it's working now (had same serialize issue). So partially solved already!

Re: Can't open migrated orders due to serialize error

Thanks or the detailed information

Re: Can't open migrated orders due to serialize error

Hi Bhanu,

 

Fixed the other issue by using - https://www.educative.io/edpresso/fixing-the-invalid-argument-supplied-for-foreach-php-error.

 

Thanks for supporting! Accepted as solution.

Regards, Woutr

Re: Can't open migrated orders due to serialize error

Hi,

 

How did you fix this issue? I am facing the same issue in the same file. Please can you help