Додайте товари для порівняння
Додайте товари до списку бажань
0
Додайте товари до кошика
Відгуки про магазин

Цей сайт любить cookie 🍪
Вони допомагають нам показувати вам саме ті пари, в які можна закохатися з першого погляду ❤️

Loading older messages… Вкладення користувача Вкладення користувача Вкладення користувача Вкладення користувача Вкладення користувача Попрацював 5m 23s Так. Тепер журнал дав нам чіткий доказ причини. Наприклад, №4808 створено в Хорошопі о 14:59:24, а вже о 14:59:25 Apps Script отримав doGet. Тобто сайт викликав наш код. Цей doGet працював приблизно 14–15 секунд і завершився, але рядка №4808 у таблиці немає. Це практично точно збігається з логікою v5: він робить 5 спроб отримати замовлення з Horoshop API із сумарними паузами 11,5 секунди, плюс час самих API-запитів. Якщо за цей час Horoshop ще не віддає щойно створене замовлення через orders/get, код повертає success:false до створення рядка та Mono invoice. Так само по №4807 видно doGet приблизно в момент створення замовлення, причому виконання теж тривають близько 15–16 секунд. Тобто проблема не в тому, що браузер клієнта не запускає наш скрипт. І напис «Завершено» в Apps Script тут трохи вводить в оману. Наш doGet ловить помилку всередині catch і нормально повертає JSON із success:false, тому для Google саме виконання вважається завершеним, хоча Mono invoice не створився. Отже, ми знайшли головну різницю зі старою схемою: Старий код: Замовлення → одразу Mono 200 грн Нинішній: Замовлення → чекати Horoshop API → отримати товари → порахувати пари → Mono Саме очікування свіжого замовлення через Horoshop API і ламає частину оплат. Не градація 200/300 як математичне правило, а спосіб, яким ми для неї отримуємо склад замовлення. Я б не збільшував просто 5 спроб до 20 — клієнт може чекати 30–60 секунд, а гарантії все одно немає. Найнадійніше рішення: повернути момент оплати до старої логіки — не звертатися до Horoshop API після створення замовлення взагалі. Треба передавати склад кошика разом із transaction_id безпосередньо із сайту в Apps Script, а там уже по нашій карті Каталог_тип_товару рахувати 1/2/3 пари → 200/200/300 грн. Але перед тим як це міняти, треба перевірити одну річ: чи містить purchase у dataLayer список товарів та їх кількість. Якщо містить — це буде дуже чисте й надійне виправлення без Horoshop API. Наступним кроком я дам Вам одну безпечну перевірку dataLayer на тестовому замовленні, яка нічого не змінюватиме. Якщо там є товари — ми фактично знайшли остаточне рішення. давай Попрацював 47s Так. І тут є хороший варіант перевірити це без створення нового замовлення і без змін у коді. У Хорошопі стандартно передаються begin_checkout і purchase через dataLayer, а товарні дані передаються в ecommerce.items. Нам треба лише побачити, які саме item_id та quantity приходять у Вашому магазині. Зробіть зараз так: На комп’ютері покладіть у кошик, наприклад, 3 пари взуття. Перейдіть на сторінку оформлення замовлення, але не оформлюйте його. Натисніть F12 → Console. Вставте туди: (window.dataLayer || []) .filter(x => x && x.event === "begin_checkout") .slice(-1)[0] Натисніть Enter. Має з’явитися об’єкт приблизно такого виду: event: "begin_checkout" ecommerce: items: 0: item_id: "..." item_name: "..." quantity: 1 1: ... Нічого це не змінює і нікуди не відправляє. Розкрийте ecommerce → items і надішліть мені скрін. Особливо важливі поля item_id і quantity. Якщо item_id там = наш артикул типу а207-39, ми зможемо прибрати залежність від orders/get майже повністю. Вкладення користувача Так, це вже дуже хороший знак: у begin_checkout реально є ecommerce.items і там 3 товари. Тепер треба побачити, що саме лежить усередині кожного товару — особливо чи є там наш артикул. У Console вставте: console.table( ((window.dataLayer || []) .filter(x => x && x.event === "begin_checkout") .slice(-1)[0]?.ecommerce?.items || []) .map(i => ({ item_id: i.item_id, item_name: i.item_name, item_variant: i.item_variant, quantity: i.quantity })) ) Натисніть Enter і надішліть скрін таблиці. Якщо item_id буде типу а207-39, р229-41 тощо, це майже ідеальний варіант: зможемо рахувати 200/300/400 грн без orders/get Horoshop API, і саме цю нестабільну ланку прибрати. Вкладення користувача Так — це саме те, що нам було потрібно. На скріні видно, що в begin_checkout → ecommerce.items: item_id = 'a413-40' item_id = 'a411-40' item_id = 'a240-37' у кожного quantity = 1 Тобто item_id — це фактично наш артикул, і Хорошоп уже віддає нам весь склад кошика прямо в браузері. Це означає, що можемо прибрати проблемну схему: сайт → Apps Script → чекати orders/get Horoshop → рахувати → Mono і зробити: сайт → передає № замовлення + артикули + кількість → Apps Script → наша локальна карта визначає взуття → 3 пари = 300 грн → Mono У Вашому прикладі сервер одразу побачить 3 артикули взуття і поставить 300 грн, не чекаючи появи замовлення в API Хорошопу. Причому я б зробив ще надійніше: коли begin_checkout з'являється, ми заздалегідь зберігаємо ці items у localStorage. Потім після purchase, коли вже відомий номер замовлення №4809 тощо, беремо збережений кошик і відправляємо його в Apps Script. Тобто навіть якщо в самому purchase Хорошоп раптом не передає items, нам це вже не завадить. Це дуже схоже на правильне остаточне рішення для проблеми №4803–4805 і №4807–4808. Наступний крок: я перероблю повністю обидві частини — фронтенд Хорошопу та Код.gs, щоб для нових оплат Horoshop orders/get взагалі не був потрібний. Старі invoice, таблиця, webhook Mono та FinalPrepayment v4 при цьому залишаться сумісними. Спочатку зробимо фронтенд, протестуємо лише збереження 3 артикулів без оформлення замовлення, і тільки потім торкнемося бойового Код.gs. давай Попрацював 1m 17s Готово. Зробив v9 тестову версію фронтенду на базі Вашого поточного v8. Вона поки не змінює механіку оплати і не передає товари в Apps Script. Вона лише додатково зберігає item_id + quantity + item_name із begin_checkout/purchase у localStorage. Тобто бойова оплата зараз працюватиме так само, як до цього. Завантажити повний код asidada_horoshop_v9_cart_capture_test.txt Зараз зробіть тільки один крок: повністю замініть поточний код v8 у Хорошопі цим v9 і збережіть. Після цього напишіть «вставив». Тоді перевіримо збережені 3 артикули прямо в Console, без оформлення нового замовлення. asidada_horoshop_v9_cart_capture_test.txt Документ