1с и опенкарт 2.3- ошибка при импорте статусов заказа

Тема в разделе "Ошибки и их решения", создана пользователем Dimasscus, 9 мар 2020.

  1. Dimasscus

    Dimasscus Пользователь

    Сообщения:
    110
    Симпатии:
    1
    Привет. пытаюсь внедрить обмен статусами заказов со старого 1.5 на новый 2.3
    експорт в 1с работает как часы.
    а вот импорт из 1с не получается. при запуске импорта получаю ошибку
    Notice: Undefined variable: status in /var/www/www-root/data/www/сайт/export/import_xml.php on line 58
    участок кода
    $order_id = getPostArg( "order_id" );
    $order_status_id = getPostArg( "order_status_id" );
    $notify = getPostArg( "notify" );
    $comment = getPostArg( "comment" );

    if ( !is_numeric( $order_id ) ) {
    if ( !empty($status) ) $status .= "; ";
    $status .= "order_id is not a number";
    }

    if ( !is_numeric( $order_status_id ) ) {
    if ( !empty($status) ) $status .= "; ";
    $status .= "order_status_id is not a number";
    }

    if ( !empty($status) ) {
    echo("ERROR: " . $status);
    } else {
    $order = new ModelCheckoutOrder( $registry );
    $order->update( $order_id, $order_status_id, $comment, $notify );
    echo("OK");
    }
    } catch ( Exception $e ) {
    echo("ERROR: " . $php_errormsg);
    }

    строка на которую ругается $status .= "order_id is not a number";
    не могу понять в чем же собственно проблема и что это за проверка такая
    if ( !is_numeric( $order_id ) ) {
    if ( !empty($status) ) $status .= "; ";
    $status .= "order_id is not a number";
    }
    то есть что пытаемся проверить понимаю. но почему именно так и в чем же причина ошибки не пойму.
    в php только пытаюсь вникать, поэтому не судите строго.
    спасибо за любую помощь
     
  2. Ravilr

    Ravilr Специалист

    Сообщения:
    3.863
    Симпатии:
    1.059
    Смотрите выше по коду, почему переменная не определена, а не только на строчку ошибки.
     
  3. zema50

    zema50 Продвинутый пользователь

    Сообщения:
    827
    Симпатии:
    94
    if ( !is_numeric( $order_id ) ) - проверяет является ли $order_id числом, если является то идем дальше
    if ( !empty($status) ) - проверяет пустая переменная $status или нет, если нет то к переменной $status добавляем ;
    order_id is not a number переводится как - order_id это не число и тогда согласно логике тут должно быть так
    Код:
    if ( !is_numeric( $order_id ) ) {
    if ( !empty($status) ) $status .= "; ";
    } else {
    $status = "order_id is not a number";
    }
    хотя по логике и в этой строке должно быть что то такого
    Код:
    if ( !empty($status) ) $status .= "; "; else  $status = "status empty;";
    в общем как то так )
     
    Dimasscus нравится это.
  4. Dimasscus

    Dimasscus Пользователь

    Сообщения:
    110
    Симпатии:
    1
    тут разобрался- потеряли переменную :))
    теперь получаю ошибку
    Fatal error: Call to undefined method Model Checkout Order::update() in
    в строке

    $order->update( $order_id, $order_status_id, $comment, $notify );
    вот этого участка

    if ( !empty($status) ) {
    echo("ERROR: " . $status);
    } else {
    $order = new ModelCheckoutOrder( $registry );
    $order->update( $order_id, $order_status_id, $comment, $notify );
    echo("OK");
    }
    подскажите как решить с этим определением метода :))
     
  5. Dimasscus

    Dimasscus Пользователь

    Сообщения:
    110
    Симпатии:
    1
    да действительно - добавил переменную
    $status = ""; и ошибка пропала. но Fatal eror не определен метод
     
  6. Dimasscus

    Dimasscus Пользователь

    Сообщения:
    110
    Симпатии:
    1
    заменил код
    $order = new ModelCheckoutOrder( $registry );
    $order->addOrderHistory( $order_id, $order_status_id, $comment, $notify );
    echo("OK");
    получаю https://clip2net.com/s/46nnnhF
    что не так?
     
  7. Dimasscus

    Dimasscus Пользователь

    Сообщения:
    110
    Симпатии:
    1
    все оказалось просто до смешного
    в обработчик нужно было добавить
    // Event
    $event = new Event($registry);
    $registry->set('event', $event);
    // Cache
    $registry->set('cache', new Cache('file'));