Ошибка в оформлении заказа при выборе ошибочного варианта доставки Исправлено

2

Исходные данные:

  • плагин расчета доставки (external, если это важно), возвращающий array( array('rate'=>null, 'message'=>'Не указаны нужные поля адреса'))
  • В Shop-Script в настройках оформления заказа для тапа "Доставка" выбран запрос полей адреса "Только поля, необходимые для расчета стоимости доставки"

Действия:

Выбрать этот способ доставки. Нажать кнопку "Далее".

Результат:

В ответ придет ajax'ом ошибка "Fatal error: Uncaught Error: Call to a member function isValid() on null in /html/wa-apps/shop/lib/classes/checkout/shopCheckoutShipping.class.php on line 708"

4 комментария

  • +1
    Михаил Ушенин Михаил Ушенин 23 апреля 2018 12:29 #

    В документации для метода calculate() — о нём речь? — я вижу рекомендуемый способ возврата сообщения об ошибке расчёта стоимости доставки в виде простой строки, а не массива. Вы пробовали им пользоваться вместо описанного вами?

    • +4
      Syrnik.com Syrnik.com 23 апреля 2018 13:33 #

      Михаил, вы просто не в курсе.

      Если из calculate:

      • возвращается строка, то это "критическая неисправимая ошибка", метод доставки нельзя будет выбрать и изменить поля адреса (только вернувшись на этап контактной информации)
      • бросается waException -- см. предыдущий пункт
      • возвращается array(['rate'= 111, 'name'=>'Name`, 'message'=>'Message1']) то это стоимость доставки
      • возвращается array( 'id1'=> ['rate'= 111, 'name'=>'Name`, 'message'=>'Message1'], 'id2'=.....) то это несколько вариантов, которые будут показаны в SELECT
      • возвращается array( ['rate'= null, 'message'=>'Сообщение']) то это "исправимая ошибка" -- продолжить оформление нельзя, но можно выбрать этот метод, изменять поля адреса у него (если они есть). Это позволяет сделать необязательыми поля адреса на этапе контактной информации и запросить только те, что нужны для расчета на этапе выбора доставки

      Можете самостоятельно посмотреть код штатных плагинов. Например Яндекс.Доставки :)

      Добавление новых комментариев к этой теме отключено.