git reset --soft HEAD^
Привет.
Есть несколько интернет-магазинов на разных системах. Нужно собрать данные корзины в виде json и отправить их к себе на сервер. При этом код сайтов-магазинов изменяем по самому миниму. /Клиент устанавляет на свой сайт то что мы ему даём - js-скрипт и т.п. Думаю, придется ограничиться им / Но мне кажется, что парсить код корзины на страницы как-то совсем глуповато.
Скажите пожалуйста, кто что думает.
Есть несколько интернет-магазинов на разных системах. Нужно собрать данные корзины в виде json и отправить их к себе на сервер. При этом код сайтов-магазинов изменяем по самому миниму. /Клиент устанавляет на свой сайт то что мы ему даём - js-скрипт и т.п. Думаю, придется ограничиться им / Но мне кажется, что парсить код корзины на страницы как-то совсем глуповато.
Скажите пожалуйста, кто что думает.
Там вся корзина должна отправляться по нажатию кнопки - по желанию пользователя.
Если можно потрогать сервер, то при записи в корзину или добавлении заказа в бд отправлять curl'ом запрос себе в центр.
Вы бы описали что уже делали чтобы конкретнее решить проблему.
Я не соображу , как именно эту инфу собрать. Сервер у клиента трогать нельзя, скорее всего.
У клиентов разные магазины Open Cart , Drupal Commerce - что угодно, сайты уже готовые. Пожелания : "Необходима минимальная модификация страниц заказов этих Интернет-магазинов".
все остальное представляю
Соответственно, вы можете посылать запросы из своего жабоскрипта к серверу магазина и получать инфу оттуда или вешаться на события js-фреймворка, например.
Всё-равно для каждого магазина придётся писать уникальный скрипт, если, конечно, эти магазины не конвеером наштампованы.
Но тогда мне должна выдаваться инфа ( в json или тп.) по некоему url-у на сервере клиента. А кто подготовит этот адрес и данные для запроса , если серверную часть клиента я не трогаю
/правда, у меня опыта с этим немного, могу ступить/
Понятия не имею, не работал с этой cms. Идёте на офсайт и курите документацию.
Хотя я бы просто потыкал в нужные кнопки и продебажил через network в devtools.Если магазин добавит ваш js-скрипт себе, то ничто не мешает слать любые ajax-запросы в вашем скрипте к серверу магазина и получать инфу.
Как их конкретно сформировать – нужно смотреть по конкретному проекту ибо данные вещи достаточно уникальны чтобы без конкретного кода обсуждение скатывалось к гаданию по фото.
> кто подготовит этот адрес и данные для запроса , если серверную часть клиента я не трогаю
Магазин же как-то работает |=> у него уже есть js, который обращается к серверу и получает эти данные |=> на сервере уже всё готово. Вам остаётся методом курения документации/курения исходников/расспросов разработчиков/научного тыка/дебага/usw (подчеркнуть по вкусу) понять куда постучаться за данными.
Но проанализировать, что где срабатывает по кнопкам ,попробую.
Возможно, все равно придется что-то положить клиенту на сервер. Самих CMS не так много разных должно быть.
Например, скрипт, который по крону будет проверять заказы в БД и делать post cURL запрос на центральный сервер для отправки данных. Он может там работать совершенно отдельно от сайта и никак на него не влиять, никакого js.
По крону - не. Там им надо,чтоб по нажатию кнопки юзер мог перейти на другой сайт с сохранением своей корзины. js выходит, должен знать как минимум, что за юзер сейчас зайствован.
Нормальный способ доставания данных, куда уж лучше?
> по нажатию кнопки юзер мог перейти на другой сайт с сохранением своей корзины
Так это в корне другая задача. Поддомен? Или совсем другой?
1. Этот сервис доставки имеет API для магазинов. В редакции "минимум и достаточн" состоит из всего одного-единственного скрипта-коллбека, на который магазины могут перенаправлять пользователя. Технически – просто обработчик определённого урла.
2. Когда магазин считает, что пользователь оформил заказ – перенаправляет его на указанный в API коллбек-скрипт на сервисе доставки (см. п.1). При этом, передаются любые необходимые данные (например, о пользователе, о заказе, о корзине и вообще с любыми данными). Технически в магазине может выглядеть как тупой заголовок header('Location: service.delivery.com/callback.php?foo=bar&baz=gsom'); с добавкой в GET нужных параметров для передачи данных.
3. Сервис доставки, получая на этот коллбек пользователя (технически, самый обычный get-запрос), парсит из get'а данные.
4. После обработки данных перенаправляет пользователя (опять же заголовок Location) на точку входа для дальнейшей бизнес-логики по доставке и прочему. Нужно для того, чтобы не мусорить пользователю в url. Очевидно, можно редиректить куда угодно, хоть обратно в магазин.
5. Не обязательный пункт. Чтобы вам в сервис не насрали мусорными запросами, нужно этот скрипт закрыть белым списком авторизованных магазинов. Минимум – специальный рандомно сгенерированный токен, который знают только сервис и магазин. В идеале уже всё изобретено до вас и легко гуглится по названию oAuth. Тонны готовых библиотек.
Как понятно из описания выше, магазину, который хочет подключиться, нужно добавить в нужный скрипт заказа формирование данных для вашего сервиса и передать клиенту Location-заголовок. Не смотря на то, что оно должно быть добавлено в недры магазина, само добавление феерически простое. Левый несвязанный скрипт на сервере тут не поможет. Из дополнительных плюсов: магазин сам решает когда пользователь совершил заказ (он лучше вас разбирается в логике их же магазина) и может добавить любые дополнительные данные о самом пользователе, которых на сайте можете и не найти.
Придумывать свой велосипед с парсингом html и прочей лабудой не стоит без совсем крайней необходимости. Серьёзно, не стоит – любое мелкое изменение на магазине сломает всю систему.
Не смотря на то, что оно должно быть добавлено в недры магазина, само добавление феерически простое. Левый несвязанный скрипт на сервере тут не поможет. Из дополнительных плюсов: магазин сам решает когда пользователь совершил заказ (он лучше вас разбирается в логике их же магазина) и может добавить любые дополнительные данные о самом пользователе, которых на сайте можете и не найти.
Вы имеете в виду, серверный скрипт, написаный для конкретного магазина?
Да.
Если точнее, несколько строк, написанные для конкретного магазина, которые надо добавить в определённое место этого магазина – туда, где проходят все нужные заказы. Это место может быть уникальным не только для разных cms, но и для разных версий одной и той же cms.
Причём, они будут делать только две простые вещи: формировать нужные данные для сервиса доставки и редиректить пользователя с ними на ваш коллбек-урл.
Буду в эту сторону действовать.
Если точнее, несколько строк, написанные для конкретного магазина, которые надо добавить в определённое место этого магазина – туда, где проходят все нужные заказы. Это место может быть уникальным не только для разных cms, но и для разных версий одной и той же cms.
Т.е. владельцу магазина нужно будет дать указание, куда разместить скрипт , или это будут делать мои товарищи. остается придумать, как максимально упростить эту задачу.
С вас магазину нужен url, на который направлять пользователя и какие параметры в get передавать.
С магазина – отправка пользователя с этими данными после оформления заказа. Если это будете делать вы, то, во-первых, вам нужен будет доступ к коду сайта, а, во-вторых, придётся разбираться как работает каждый конкретный магазин/cms.
Мне придется делать /ну если не сольюсь/. Кто делал магазины, тех уж нет. Но там стандартные cms, в основном. Можно глянуть бд., вкрайнем случае, где хранится корзина и как.
что-то меня опять притормаживает )
А ничего, если столько данных передавать Get'ом?
Если данных много, используйте base64/serialize. Что-то вроде:
Если есть секретная/чувствительная инфа, то можно делать ssl+post запрос из магазина в сервис с данными, получать в ответ токен, а потом юзверя перенаправлять на сервис только с токеном, протухающим при использовании:
прояснилось
Я не знаю пока насчет секретности, но если в безопасности плохо шаришь, то думаю, лучше заранее этот момент учесть
Если нет секретных данных, то не вижу смысла пилить оверхед – get+base64+serialize вполне сгодятся.
Если есть, то задача сводится кj второму моему примеру: во-первых, обеспечить защиту передачи данных между магазином и сервисом, а, во-вторых, перенаправить пользователя с уникальным идентификатором (который позволит сервису юзать ранее переданную инфу).