网站首页 / 资讯 / Magento教程/ Magento2.x教程

M2在结账时出现Internal Error. Details are available in Magneto log files.Report ID:webapi-****

作者:admin

查看对应的错误日志为:

[2023-03-27T09:38:18.436188+00:00] main.CRITICAL: InvalidArgumentException: Unable to unserialize value. Error: Syntax error in /data/wwwroot/vendor/magento/framework/Serialize/Serializer/Json.php:45

这时需要修改文件

/data/wwwroot/vendor/magento/framework/Serialize/Serializer/Json.php

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;
}


标签:
上一篇:解决部分MAGENTO2数据库导出导入时出错
下一篇:M2奇葩问题 - 搜索引擎爬取侧边属性选择器导致的MYSQL占用CPU100%

相关内容

最近更新
相关产品
综合服务邮箱: magento2#foxmail.com