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