.. _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