Перейти к основному содержимому

Как включить проверку покупки и кнопку «В корзину»

Как разрешить отзывы только купившим товар и подключить кнопку добавления в корзину в виджетах 2.0 через aplaut.manageOrder

Подключите обработчик корзины, чтобы в полноэкранной галерее отзывов появилась кнопка добавления товара в корзину. С тем же обработчиком можно включить проверку покупки: писать отзывы, вопросы и ответы сможет только покупатель, чей номер заказа передал ваш сайт, а остальные увидят кнопку Добавить в корзину.

Что понадобится​

  • Загрузчик виджетов на странице и метод manageOrder в массиве методов загрузчика. В коде из раздела Виджеты он есть.
  • У тега виджета атрибут data-context-id с ID товара, который загружен в каталог Aplaut. Без товара в каталоге кнопка не показывается.
  • Для метки «Проверенная покупка» у отзыва: заказы загружаются в Aplaut. Aplaut ставит метку, если номер заказа из отзыва совпадает с загруженным заказом, и повторяет сверку через 1, 2, 3 и 7 дней, если заказ пришёл позже отзыва.

Шаг 1. Зарегистрируйте обработчик корзины​

Передайте в aplaut.manageOrder асинхронную функцию addToCart. Виджет вызывает её с ID товара и ждёт true, если товар добавлен.

<script>
aplaut.manageOrder({
addToCart: async (contextId) => {
try {
await cart.add(contextId); // ваш код корзины
return true;
} catch (error) {
showNotification("Не удалось добавить товар в корзину");
return false;
}
},
});
</script>

При true значок корзины в галерее меняется на галочку. Отметка хранится в браузере покупателя и сохраняется после перезагрузки, повторный клик обработчик уже не вызывает. При false кнопка не меняется, сообщение об ошибке показывает ваш сайт. Исключение виджет не перехватывает: оно уходит в консоль.

Виджет не знает о вашей корзине. Если покупатель удалит товар из корзины, в галерее останется галочка.

Шаг 2. Передайте номер заказа​

Пропустите шаг, если проверка покупки не нужна. Иначе передайте функцию setOrder, которая возвращает номер заказа с этим товаром или null.

aplaut.manageOrder({
setOrder: async () => {
try {
return await getOrderNumber(); // номер заказа или null
} catch (error) {
return null;
}
},
addToCart: async (contextId) => { /* как в шаге 1 */ },
});

Виджет вызывает setOrder один раз, в момент вызова manageOrder. Чтобы обновить номер, вызовите manageOrder ещё раз. Если setOrder выбросит исключение, addToCart из того же вызова не зарегистрируется, поэтому перехватывайте ошибки внутри функции.

Шаг 3. Включите проверку покупки​

Задайте verifyPurchaseState: true в разделе reviews вызова aplaut.init: в коде сайта или в скрипте провайдера. В разделе Виджеты этой настройки нет. Атрибут data-verify-purchase-state меняет только кнопку, а формы без номера заказа не закрывает.

aplaut.init(access_token, {
widgetsConfig: {
reviews: { verifyPurchaseState: true },
},
});

Кнопка в шапке виджета отзывов зависит от заказа:

УсловиеКнопкаЧто происходит по клику
Номер заказа переданНаписать отзывОткрывается форма отзыва
Номера нет, addToCart зарегистрированДобавить в корзинуВызывается addToCart. После true кнопка скрывается до перезагрузки страницы
Номера нет, addToCart не зарегистрированнет кнопки—

Если включён вход покупателя по JWT и токена нет, в шапке стоит Войти независимо от заказа.

Шаг 4. Настройте карточку товара в галерее​

Aplaut не хранит цены, поэтому цену в карточку передаёт сайт атрибутом data-product-price. Виджет выводит строку без изменений.

<ap-reviews data-context-id="<ID_ТОВАРА>" data-product-price="4 990 ₽"></ap-reviews>

Чтобы скрыть кнопку в галерее, не убирая обработчик, в разделе Виджеты → Элементы виджета → Галерея выключите Кнопка «В корзину» или задайте атрибут data-add-to-cart-visibility="hidden".

Проверка результата​

  1. Откройте фото из отзыва на весь экран. В галерее видна карточка товара с ценой и значком корзины.
  2. Нажмите значок. Обработчик получает ID товара, значок меняется на галочку.
  3. Если включена проверка покупки, откройте страницу без номера заказа: вместо Написать отзыв стоит Добавить в корзину.
ПризнакПричинаЧто сделать
В консоли aplaut.manageOrder is not a functionМетод вызван до загрузки скрипта, а в загрузчике его нетСкопируйте загрузчик заново из раздела Виджеты
Карточки нетОбработчик не зарегистрирован, кнопка скрыта или товара нет в каталогеПроверьте вызов manageOrder, переключатель Кнопка «В корзину» и data-context-id
Карточки нет, обработчик передан вместе с setOrdersetOrder выбросил исключениеПерехватывайте ошибки внутри setOrder
Значок сразу с галочкойТовар уже добавляли в этом браузереОчистите данные сайта в браузере
Цены нетНе задан data-product-priceДобавьте атрибут
Без номера заказа форма всё равно открываетсяverifyPurchaseState задан только атрибутомПеренесите параметр в widgetsConfig.reviews

Смотрите также: справочник JS API виджетов, справочник настроек виджетов.