Prestashop API synchronizace - Pro vývojaře

Avatar

Podle Matěj Kmínek

aktualizováno před 2 dny

Postup aktivace Prestashopu na Boost.space:


Předpoklady:

  1. Nastavené produktové kategorie
  2. Nastavené obrázky
  3. Nastavené produkty
  4. Nastavený výchozí obrázek produktu

Postup:

  1. Na Prestashopu zapnu API v menu Nástroje - Webové služby 
    1. zapnu Povolit Prestashop Webservis.
    2. Dle uvážení zapnu Povolit CGI mód (záleží na konfiguraci serveru, na kterém běží Prestashop).
    3. Dám uložit.
    4. Dám Přidat nový klíč webové služby.
      1. Kliknu na vygenerovat.
      2. Vyplním popis Boost.space synchronization.
      3. Přepnu stav na ANO.
      4. Zaškrtnu Všechna zdrojová práva pro Zdroje: addresses, categories, combinations, contacts, currencies, customers, groups, image_types, images, languages, order_states, orders, product_customization_fields, product_feature_values, product_features, product_option_values, product_options, product_suppliers, products, stock_availables, stocks, tags, specific_prices, tax_rule_groups, tax_rules, taxes
      5. Dám Uložit.
  2. V Boost.space přidám integraci do tabulky integration (remote = PRESTASHOP, ostatní pole dle vlastního uvážení).
  3. V Boost.space vyplním detaily integrace do tabulky integration_prestashop (integration_id = integration.id, url = https://presta.boost.space/api, key = WebService vygenerovaný klíč prestashopu, business_process_id = IDBP, pod který mají spadat stažené objednávky, wrapper_id = ID Stock Wrapperu (skladu), z nejž se mají odebírat skladové položky).
  4. V Boost.space zapnu spaces s produkty, které chci s Prestashopem synchronizovat v tabulce wrapper_setting_product (pole prestashop_sync) - v budoucnu půjde přemístit do tabulky integration_prestashop.
  5. POZOR! pouze u nového Prestashopu - v Boost.space vynutit Factory reset Prestashopu. Buď v nastavení, nebo navštívením url https://system.boost.space/api/integration/1/clean/all.

První použití

  1. Synchronizovat jazyky - navštívením URL (requestem). https://system.boost.space/api/integration/1/sync/language
  2. Synchronizovat měny.
  3. Navštívením URL (requestem) https://system.boost.space/api/integration/1/sync/currency

Zjišťování rozdílů (akce DIFF)

V Boost.space lze jedním requestem zkontrolovat rozdíly mezi Boost.space a Prestashopem (bez jakékoliv synchronizace - bezpečný check): https://system.boost.space/api/integration/1/diff/module (misto module přijde dosadit product / product-category / business-order / language / currency / subject / product-attribute / product-variant)

Synchronizace (akce SYNC)

    - V Boost.space lze dalším requestem synchronizovat mezi Boost.space a Prestashopem: https://system.boost.space/api/integration/1/sync/module (místo module prřjde dosadit product / product-category / business-order / language / currency / subject / product-attribute / product-variant). Chová se takto:

  1. Produkty / Kategorie / Atributy / Varianty (Jednosměrná synchronizace ze strany Boost.space směrem na Prestashop).
    1. Stáhne se seznam veškerých produktů na Prestashopu.
    2. Systém postupně prochází jeden produkt za druhým a kontroluje jeho rozdílnost oproti Boost.space systému - kontrola viz Tabulka mapovaní.
    3. Produkty, které jsou na Boost.space, ale nejsou na Prestashopu, systém na Prestashopu vytvoří a do systému si uloží jejich Prestashop-ID pro účely spárování.
    4. Produkty, které jsou na Boost.space i na Prestashopu, ale na Prestashopu se v něčem liší, systém jiným requestem na Prestashop upraví.
    5. Produkty, které nejsou na Boost.space, ale jsou na Prestashopu, systém jiným requestem na Prestashopu smaže (POZOR - tato funkce je momentálně zablokovaná z důvodu bezpečnosti remote shopu).
  2. Objednávky
    1. Stáhne se seznam veškerých objednávek na Prestashopu, změněné od doby poslední synchronizace.
    2. Boost.space si projde všechny objednávky a pokusí se je nalézt. Pokud objednávku nenalezne, vytvoří ji a spáruje (uloží si k sobě její Prestashop-id).
    3. Je-li objednávka ve stavech Odeslána / Doručena, resp. byl na to změněn status objednávky a je-li v tabulce integrací vyplněn sklad (pole wrapper_id), k objednávce se na straně Boost.space vytvoří skladová výdejka.
    4. Případné změny si Boost.space uloží dle tabulky mapovaní viz níže.
  3. Jazyky (Jednosměrná synchronizace ze strany Prestashop směrem k Boost.space)
    1. Stáhne se seznam veškerých jazyků na Prestashopu.
    2. Boost.space si synchronizuje veškeré jazyky, které má k integraci uložené, pomocí tabulky integration_prestashop_lang (toto je potřeba udělat pouze při změně jazyku na Prestashopu - pravděpodobně tedy pouze jednou).
    3. Pro synchronizaci jazykových mutací je potřeba mít předtím synchronizované jazyky - na Prestashop se nenahrají překlady v jazycích, nejsou-li ty jazyky synchronizované.
  4. Kontakty (Obousměrná synchronizace mezi Prestashop a Boost.space)
    1. Stáhne se seznam všech kontaktů v Prestashopu.
    2. Provede se analýza oproti kontaktům na Boost.space - dle kontaktních listů uvedených v tabulce integration_wrapper (modul Subject).
    3. Kontakty se rozdělí na ty, které se mají vytvořit / aktualizovat / smazat na obou stranách. Pokud byl změněn kontakt na obou stranách, převáží ten, který byl změněn později.

Mapovací tabulky:


Produkt:

    product.categories[].id <==> remoteProduct.associations.categories[].id

    product.name <==> remoteProduct.name.languages[].value (pouziva translations product.name pro zakladni jazyk cs, product.translations[en].name pro jazyk en napr.)

    product.partNumber <==> remoteProduct.reference

    product.unitPrice <==> remoteProduct.price

    product.defaultCategory <==> remoteProduct.id_category_default

    product.featuredImageId <==> remoteProduct.id_default_image

    product.description <==> remoteProduct.description.languages[].value (pouziva translations product.description pro zakladni jazyk cs, product.translations[en].description pro jazyk en napr.)

Pozn.: Description se bere nejprve z descriptionHtml, teprve pokud neexistuje, tak se vezme z pole description.


Category

    productCategory.name <==> remoteProductCategory.name.languages[].value (pouziva translations productCategory.name pro zakladni jazyk cs, productCategory.translations[en].name pro jazyk en napr.)

    productCategory.description <==> remoteProductCategory.description.languages[].value (pouziva translations product.description pro zakladni jazyk cs, product.translations[en].description pro jazyk en napr.)

    productCategory.active <==> remoteProductCategory.active

    productCategory.parentId <==> remoteProductCategory.id_parent

    

Order

    businesOrder.businessProcesId <== (BPID z integrace)

    businesOrder.statusSystemId <==> remoteOrder.status 

        Pozn:

            active = [Čeká se na platbu šekem, Platba byla přijata, Probíhá příprava, Splaceno, Chyba platby, U dodavatele (zaplaceno), Čeká se na přijetí bezhotovostní platby, Bezhotovostní platba přijata, U dodavatele (nezaplaceno), Čeká se na potvrzení dobírky]

            done = [Odeslána, Dodáno] ... Pro tento stav se zároveň vytváří výdejka, pokud ještě neexistuje

            canceled = [Zrušeno]

    businesOrder.statusId <==> remoteOrder.status ... Pouze existuje-li v systému status se stejným jménem. Tedy je možné v Boost.space vytvořit status např. Platba byla přijata - pak se bude nastavovat jak status System (active), tak i status (Platba byla přijata)

    businessOrder.customFields[prestashop-invoice_number] <==> remoteOrder.invoice_number

    businessOrder.customFields[prestashop-invoice_date] <==> remoteOrder.invoice_date

    businessOrder.customFields[prestashop-delivery_number] <==> remoteOrder.delivery_number

    businessOrder.customFields[prestashop-delivery_date] <==> remoteOrder.delivery_date

    businessOrder.customFields[prestashop-shipping_number] <==> remoteOrder.shipping_number

    businessOrder.customFields[prestashop-recyclable] <==> remoteOrder.recyclable

    businessOrder.customFields[prestashop-gift] <==> remoteOrder.gift

    businessOrder.customFields[prestashop-gift_message] <==> remoteOrder.gift_message

    businessOrder.customFields[prestashop-total_discounts] <==> remoteOrder.total_discounts

    businessOrder.customFields[prestashop-total_discounts_tax_incl] <==> remoteOrder.total_discounts_tax_incl

    businessOrder.customFields[prestashop-total_discounts_tax_excl] <==> remoteOrder.total_discounts_tax_excl

    businessOrder.customFields[prestashop-total_paid] <==> remoteOrder.total_paid

    businessOrder.customFields[prestashop-total_paid_tax_incl] <==> remoteOrder.total_paid_tax_incl

    businessOrder.customFields[prestashop-total_paid_tax_excl] <==> remoteOrder.total_paid_tax_excl

    businessOrder.customFields[prestashop-total_paid_real] <==> remoteOrder.total_paid_real

    businessOrder.customFields[prestashop-total_products] <==> remoteOrder.total_products

    businessOrder.customFields[prestashop-total_products_wt] <==> remoteOrder.total_products_wt

    businessOrder.customFields[prestashop-total_shipping] <==> remoteOrder.total_shipping

    businessOrder.customFields[prestashop-total_shipping_tax_incl] <==> remoteOrder.total_shipping_tax_incl

    businessOrder.customFields[prestashop-total_shipping_tax_excl] <==> remoteOrder.total_shipping_tax_excl

    businessOrder.customFields[prestashop-carrier_tax_rate] <==> remoteOrder.carrier_tax_rate

    businessOrder.customFields[prestashop-total_wrapping] <==> remoteOrder.total_wrapping

    businessOrder.customFields[prestashop-total_wrapping_tax_incl] <==> remoteOrder.total_wrapping_tax_incl

    businessOrder.customFields[prestashop-total_wrapping_tax_excl] <==> remoteOrder.total_wrapping_tax_excl


Odpovědělo to na vaši otázku?