Автор Тема: API для добавление продукта в корзину  (Прочитано 1114 раз)

07 Май 2020, 17:42:53
  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте. Подскажите пожалуйста как грамотно добавить продукт в корзину через API? Запрос будет поступать из стороннего сервиса.
Версия 1.6.1.11
Пробывал по-разному:
1. POST: http://localhost/controller=cart&add=1&ajax=true&qty=1&id_product=15&token=<here_token> - возращает 404
2. POST: http://localhost/?rand=<rand> (в body controller=cart; add=1; ajax=true; qty=1; id_product=15; token=<token_id>) - тут я вижу информацию но корзина пуста.

Попробывал http://localhost/api/carts но в ответ 401. В админке не могу найти как включить WebServer.

Заранее спасибо!
07 Май 2020, 18:44:28
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Включать в админке в Конфигурация / WEB службы
Включить Веб службы - Да

Перед активацией вебслужб, вы должны убедиться, что
- Проверьте, включен ли URL rewrite на сервере.
- Убедитесь, что 5 методов GET, POST, PUT, DELETE и HEAD поддерживаются этим сервером.

Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
07 Май 2020, 20:12:17
Ответ #2
  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Включать в админке в Конфигурация / WEB службы
Включить Веб службы - Да

Перед активацией вебслужб, вы должны убедиться, что
- Проверьте, включен ли URL rewrite на сервере.
- Убедитесь, что 5 методов GET, POST, PUT, DELETE и HEAD поддерживаются этим сервером.

Спасибо за ответ! Если я правильно понимаю то нужно использовать Web Service. Подскажите, пожалуйста, какие в таком случае слать параметры? Здесь http://doc.prestashop.com/display/PS16/Web+service+tutorial не нашел нечего о том как добавить товар в корзину.
08 Май 2020, 11:19:02
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Есть там, только для другой версии prestashop, но API Web Service такое же.
// CREATE Cart
$cartXml= $webService->get(array('url' => PS_SHOP_PATH.'/api/carts?schema=blank'));
$cartXml->cart->id_customer = $id['customer'];//@Todo recover via api
$cartXml->cart->id_address_delivery = $id['address'];//@Todo recover via api
$cartXml->cart->id_address_invoice = $id['address'];//@Todo recover via api
$cartXml->cart->id_currency = $id['currency']; //@Todo recover via api
$cartXml->cart->id_lang = $id['lang']; //@Todo recover via api
$cartXml->cart->id_carrier = $id['carrier']; //@Todo recover via api
$cartXml->cart->id_shop = $id['shop']; //@Todo recover via api
$cartXml->cart->id_shop_group = $id['shop_group']; //@Todo recover via api
$cartXml->cart->associations->cart_rows->cart_row->id_product = $product['id']; //@Todo recover via api
$cartXml>cart->associations->cart_rows->cart_row->quantity = $product['quantity']; //@Todo recover via api
if(!empty(Tools::getValue('product_attr')))
    $cartXml>cart->associations->cart_rows->cart_row->id_product_attribute = Tools::getValue('product_attr'); //@Todo recover via api
$opt = array('resource' => 'carts');
$opt['postXml'] = $cartXml->asXML();
$addCartXml = $webService->add($opt);
Из примера понятно какие переменные нужны для создания корзины.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
08 Май 2020, 11:37:01
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Добавить товар в корзину так:
$xml->cart->associations->cart_rows->cart_row[$i]->id_product = $_POST['id_product'.$i];
$xml->cart->associations->cart_rows->cart_row[$i]->id_product_attribute = $_POST['id_product_attribute'.$i];
$xml->cart->associations->cart_rows->cart_row[$i]->id_address_delivery = $_POST['id_address_delivery'.$i];
$xml->cart->associations->cart_rows->cart_row[$i]->quantity = $_POST['quantity'.$i];
09 Май 2020, 19:14:55
Ответ #5
  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Когда я отправляю через Postman http://<webservie_key>@localhost/api/carts(POST) такой вот xml
<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
   <cart>
      <id_currency>1</id_currency>
      <id_shop_group>1</id_shop_group>
      <id_lang>1</id_lang>
      <id_product>283</id_product>
      <id_product_attribute>0</id_product_attribute>
      <id_address_delivery>0</id_address_delivery>
      <quantity>3</quantity>
   </cart>
</prestashop>
В таблице ps_cart я вижу данные которые отправил, но корзина пуста.
Когда я отправляю на сайте в корзину то я не вижу новой записи в таблице ps_cart.
Вот как должно быть: в мобильном приложение пользователь выбирает продукт и в корзине мобильного приложения может нажать перейти на сайт. В браузере должен открыться сайт и корзине должны отобразиться товары которые он выбрал в мобильном приложение.
То есть нужно еще как-то связать пользователя с данными которые будут отправляться через API. Мобильному приложению известно только вендор-код и кол-во в корзине.
Можно ли такое сделать?
10 Май 2020, 11:54:51
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Нельзя такое сделать только по вендор-коду и кол-ву. Для идентификации клиента нужно его определить, поэтому у клиента должен быть акк на сайте или нужно его регистировать, передавать
$cartXml->cart->id_customer = $id['customer'];//@Todo recover via apiв webservice и в ссылке на магазин.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
10 Май 2020, 14:21:44
Ответ #7
  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Нельзя такое сделать только по вендор-коду и кол-ву. Для идентификации клиента нужно его определить, поэтому у клиента должен быть акк на сайте или нужно его регистировать, передавать
$cartXml->cart->id_customer = $id['customer'];//@Todo recover via apiв webservice и в ссылке на магазин.

Спасибо за ответ. Так и думал что нужна идентификация клиента. Когда я добавляю товар в корзину на самом сайте то я вижу в запросе следующее: POST: http://localhost/?rand=<rand> (параметры controller=cart; add=1; ajax=true; qty=1; id_product=15; token=<token_id>). Товар попадает в корзину и так как я на сайте то идентификация клиента не нужна.

А реально ли сделать следующее: в мобильном приложение клиент жмет на перейти в корзину на сайт, запрос я делаю на специальный урл с 2 параметрами(имя продукта и кол-вл) и затем получаю эти в параметры в модуле с последующим добавлением в корзину?
10 Май 2020, 15:50:02
Ответ #8
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Чтобы отследить клиента и показать ему его корзину все равно понадобится ид клиент или ид сессии.
При переходе из моб приложения на сайт нужно передать какой-то ид.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
10 Май 2020, 15:59:35
Ответ #9
  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Чтобы отследить клиента и показать ему его корзину все равно понадобится ид клиент или ид сессии.
При переходе из моб приложения на сайт нужно передать какой-то ид.

Id может быть рандомным числом и куда записывается id сессии? То есть я отправляю запрос на добавления в корзину и после перехода на сайт пишу эту рандомную сессию в хидер или какой-то другой параметр.
10 Май 2020, 17:01:06
Ответ #10
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
token=<here_token>у вас же уже есть идентификатор, его и используйте
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
25 Май 2020, 16:35:35
Ответ #11
  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Пришлось снова вернуться к этой задаче. Не совсем понимаю как передать id клиента или id сессии при переходе с мобильного приложения на сайт. В мобильном приложение допустим я задам id, а как потом записать этот id на сайте?
26 Май 2020, 12:05:30
Ответ #12
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
В ссылке перехода можете добавить переменные id клиента, id заказа и прочие.
26 Май 2020, 13:13:13
Ответ #13
  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
mistral, спасибо за ответ. Мобильное приложение нечего не знает о клиенте. В мобилке можно получить название товара, вендор-код и кол-во продукта в корзине. Для добавления в корзину как я понял нужно знать id продукта.
Думаю что мне нужно написать модуль который будет принимать данные после перехода с мобильного приложения. Из этих данных получать id продукта по имени и добавлять программно в корзину. Так же в таком случае наверное я смогу узнать id кастомера.
26 Май 2020, 13:32:56
Ответ #14
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
mistral, спасибо за ответ. Мобильное приложение нечего не знает о клиенте. В мобилке можно получить название товара, вендор-код и кол-во продукта в корзине. Для добавления в корзину как я понял нужно знать id продукта.
Думаю что мне нужно написать модуль который будет принимать данные после перехода с мобильного приложения. Из этих данных получать id продукта по имени и добавлять программно в корзину. Так же в таком случае наверное я смогу узнать id кастомера.
Если я правильно понимаю задачу, то нужно связать сайт и моб приложение, синхронизировать корзины.
Сценарий примерно такой.
При переходе на сайт передается вендор-код и кол-во товара.
На сайте получаете ссылку и если в ней есть код и кол-во, создаете корзину и добавляете такой товар.
Товар идентифицируете по артикулу (вендор-код).
Заказ на сайте от гостя.
На сайте предлагаете авторизироваться по акку соц сетей, тогда можете авторизировать клиента.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!