.. _gnrextra/wordpress/woocommerce: Integrare Woocommerce ===================== È possibile integrare integralmente anche il risvolto e-commerce di Wordpress, Woocommerce, sia in termini di **pubblicazione di nuovi prodotti direttamente da Genropy** con meccanismi analoghi a quelli della pubblicazione di post, sia in termini di **lettura prodotti/ordini** con il meccanismo dei **webhooks**. Pubblicare un prodotto da Genropy --------------------------------- La pubblicazione avviene tramite una *request* di tipo POST, alla stregua di quanto avviene nel caso di test ``wootest``. Non essendo stato previsto un vero model per quanto riguarda Woocommerce, dal momento che è ragionevole presupporre che verrà integrato dallo sviluppatore su altri progetti dove è già presente un magazzino o un sistema di gestione degli ordini, si rimanda al caso specifico la trattazione nel dettaglio di come avviene la pubblicazione. Ricevere i dati degli ordini tramite webhook -------------------------------------------- Casistica senz'altro più interessante è quella della ricezione dei dati di un ordine, o l'anagrafica di un prodotto, o una notifica di avvenuto pagamento, al fine dell'integrazione di una serie di dati in un applicativo Genropy. A tal proposito si utilizzano i `webhook di Woocommerce `_, configurabili nel sito da ``Woocommerce > Impostazioni > Avanzate > Webhook``. .. image:: /_static/images/wordpress/webhook.png :width: 600px :align: center Il webhook permette di indicare un *trigger* (in questo caso, la creazione dell'ordine), che farà scattare l'invio della *request* all'entry point dell'applicativo Genropy indicato. Si noti che la ``Url spedizione`` punterà al sito dell'applicativo Genropy, in particolare alla webpage ``woo_hooks`` del package Wordpress, dove è stato definito un metodo ``newOrder``. Stiamo infatti facendo una *external call* con `le REST API di Genropy `_. Il metodo ``newOrder``, al momento solo definito come metodo *hook*, per essere ridefinito dallo sviluppatore sulla base delle sue esigenze, riceverà un oggetto ``data``, che conterrà tutti i dati dell'ordine ricevuto:: data = json.loads(self.request.data) order_id = data['id'] total = data['total shipping_total = data['shipping_total'] billing_data = data['billing'] shipping_data = data['shipping'] Sarà quindi possibile rimappare l'oggetto e trasformarlo a seconda delle proprie esigenze, per esempio salvando i dati del ``billing_address`` in una tabella *cliente*, o ancora il ``total`` in una tabella *fattura*. .. sectionauthor:: Davide Paci