Intro

Cet article fait suite aux articles : 

https://reactor.fr/un-site-e-commerce-en-moins-dune-heure 

https://reactor.fr/woocommerce-configurations-avancees 

https://reactor.fr/woocommerce-configurations-avancees-partie-2/

J’ai reussi à couvrir 99% de mes besoins. 

Un utilisateur peut s’acheter une licence de jeu OutQuest. Le souci, c’est qu’il doit copier une clé de licence sur mon appli. 

J’aimerais un lien qui lui permette de ne pas le faire. Vu que mon app mobile est un site web, il devrait être simple de rediriger l’utilisateur vers mon site en cliquant sur cette clé de license. (ou un lien que j’aurais fait). 

Sauf que ca ne se fait pas par défaut. Les concepteurs du plugins me l’ont confirmé, ce n’est pas une fonctionnalité, ça le sera peut être un jour, inchallah. 

Autre besoin, même si j’ai cet email, ou que l’utilisateur saisie manuellement cette clé de licence sur mon app, comment je vérifie celle ci ?

C’est l’objet de ce post. 

API Licences Manager for Woo Commerce

Donc l’idée c’est de faire une requête depuis mon app (ou depuis n’importe où finalement) vers mon site web de e-commerce qui gère ces clés de licences. 

Le plugin précédément installé qui gère ces licences a justement une gestion par une API de ces clés. 

Dans les réglages de WooCommerces, Onglet « Gestion de licences » en base de page, on a la possibilité de gérer individuellement chaque endpoint de l’API. 

Le lien de la documentation est celui ci 

https://www.licensemanager.at/documentation/rest-api/#api-keys

La première chose que l’on nous demande c’est de passer nos liens en permaliens. Dans un précédent article nous avons déjà fait cette manipulation et d’ailleurs je ne souvenais plus pourquoi je devais le faire… ba c’est pour l’API de gestion de licences. 

Ensuite il nous faut générer une clé d’API que l’on utilisera dans chacune de nos requêtes. Pensez à stocker ces clés car elles ne vous seront plus accessible par la suite. 

 

Ca y est notre API est prête ! 

L’API lmfwc (Licence Manager for Woo Commerce) est situé dans ce path par defaut : https://shop.outquest.fr/wp-json/lmfwc/

Si vous ne faites pas la modification des permaliens vous aurez une 404.

Ensuite il faut rajouter la route de l’api que l’on souhaite, par exemple 

https://shop.outquest.fr/wp-json/lmfwc/v2/licenses/sdf

Qui demande la clé « sdf » (qui n’existe pas). J’ai cette réponse 401 Unauthorized :

 

{"code":"lmfwc_rest_authentication_error","message":"Cl\u00e9 client ou secr\u00e8te manquante.","data":{"status":401}}

J’utilise une extension Visual Studio Thunder Client (c’est comme Postman) qui me permet de faire des requêtes sur mesure. 

Il faut paramétrer une authorisation « Basic » avec username = clé client et password = clé secrète. En relancant la requête on obtient ceci :

 

{"code":"lmfwc_rest_data_error","message":"License Key: sdf could not be found.","data":{"status":404}}

On nous indique une 404 car la clé de licence « sdf » n’existe pas. 

Essayons maintenant avec une vraie clé : https://shop.outquest.fr/wp-json/lmfwc/v2/licenses/LBL-JVP

{"success":true,"data":{"id":1,"orderId":40,"productId":29,"userId":1,"licenseKey":"LBL-JVP","expiresAt":null,"validFor":0,"source":1,"status":2,"timesActivated":null,"timesActivatedMax":0,"createdAt":"2022-09-30 16:00:10","createdBy":1,"updatedAt":"2022-09-30 16:00:10","updatedBy":1}}

Bingo on obtient nos informations de licence !

L’api lmfwc dispose de 3 autres endpoints en get :

  • licenses/validate/
  • licenses/activate/
  • licenses/deactivate/

La première vous donne ce type de réponse :

 

{"success":true,"data":{"timesActivated":0,"timesActivatedMax":0,"remainingActivations":0}}

En faisant une requete avec licenses/activate 

{"success":true,"data":{"id":1,"orderId":40,"productId":29,"userId":1,"licenseKey":"LBL-JVP","expiresAt":null,"validFor":0,"source":1,"status":2,"timesActivated":1,"timesActivatedMax":0,"createdAt":"2022-09-30 16:00:10","createdBy":1,"updatedAt":"2022-10-10 13:04:29","updatedBy":1}}

puis en refaisant licenses/validate on obtient :

{"success":true,"data":{"timesActivated":1,"timesActivatedMax":0,"remainingActivations":-1}}

Notez qu’on a eu +1 sur timesActivated. Cela permettra de voir si la licence est utilisé plusieurs fois et éventuellement travailler sur de l’anti fraude. 

en utilisant licenses/deactivate on fait l’opération inverse. 

 

API Woo Commerce

On vient de voir comment valider une licence. Le souci c’est qu’à ce stade, je n’ai qu’un numéro orderId et un productId. 

Je pourrais me démerder avec cela si je rentre en dur, coté application les références produits. Seulement si un jour je change de produit ca ne fonctionnera plus. 

Comment faire ? Il faut requêter l’API Woo Commerce, tout simplement. De la même manière on va devoir générer des clés d’API dans l’onglet « avancé » des réglages de Woo Commerce.

Notre requête devra aussi avoir une authorisation basique avec ces clés. Le path api est wp-json/wc/

Voici une requête pour obtenir des informations sur la commande 40 :https://shop.outquest.fr/wp-json/wc/v2/orders/40

 

{"id":40,"parent_id":0,"status":"completed","currency":"EUR","version":"6.9.4","prices_include_tax":true,"date_created":"2022-09-30T18:00:07","date_modified":"2022-09-30T18:00:10","discount_total":"0.00","discount_tax":"0.00","shipping_total":"0.00","shipping_tax":"0.00","cart_tax":"0.17","total":"1.00","total_tax":"0.17","customer_id":1,"order_key":"wc_order_Px8132TVZef0E","billing":{"first_name":"Yann","last_name":"Vasseur","company":"","address_1":"2 la en face","address_2":"","city":"Partis","state":"","postcode":"35580","country":"FR","email":"xxxxxxx@yahoo.fr","phone":"06 66 66 6 6 6"},"shipping":{"first_name":"","last_name":"","company":"","address_1":"","address_2":"","city":"","state":"","postcode":"","country":"","phone":""},"payment_method":"woocommerce_payments","payment_method_title":"Carte de cr\u00e9dit\/carte de d\u00e9bit","transaction_id":"pi_3LnldEFq94z7RR2d10UTj3Te","customer_ip_address":"79.95.127.132","customer_user_agent":"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/106.0.0.0 Safari\/537.36","created_via":"checkout","customer_note":"","date_completed":"2022-09-30T18:00:10","date_paid":"2022-09-30T18:00:10","cart_hash":"7c45d164e8db4f049f791a4cb6bfeded","number":"40","meta_data":[{"id":645,"key":"is_vat_exempt","value":"no"},{"id":646,"key":"_payment_method_id","value":"pm_1LnldCFq94z7RR2dn0VFdrDP"},{"id":647,"key":"_stripe_customer_id","value":"cus_MWiJXN4eXAa94X"},{"id":648,"key":"_wcpay_mode","value":"test"},{"id":649,"key":"_intent_id","value":"pi_3LnldEFq94z7RR2d10UTj3Te"},{"id":650,"key":"_charge_id","value":"ch_3LnldEFq94z7RR2d1CxGKYWX"},{"id":651,"key":"_intention_status","value":"succeeded"},{"id":652,"key":"_wcpay_intent_currency","value":"EUR"},{"id":662,"key":"lmfwc_order_complete","value":"1"},{"id":663,"key":"_wcpdf_invoice_settings","value":{"display_shipping_address":"","display_customer_notes":"1","display_date":"order_date","header_logo":"19","header_logo_height":"","shop_name":{"default":"Outquest"},"shop_address":{"default":"2 la bas\r\n35580 Paris"},"footer":{"default":""},"extra_1":{"default":""},"extra_2":{"default":""},"extra_3":{"default":""}}},{"id":664,"key":"_wcpdf_invoice_date","value":"1664553607"},{"id":665,"key":"_wcpdf_invoice_date_formatted","value":"2022-09-30 18:00:07"},{"id":666,"key":"_wcpdf_invoice_number","value":"5"},{"id":667,"key":"_wcpdf_invoice_number_data","value":{"number":5,"formatted_number":"5","prefix":"","suffix":"","document_type":"invoice","order_id":40,"padding":""}},{"id":668,"key":"_new_order_email_sent","value":"true"}],"line_items":[{"id":17,"name":"Quest \u2013 Vallons de Vilaine 2","product_id":29,"variation_id":0,"quantity":1,"tax_class":"","subtotal":"0.83","subtotal_tax":"0.17","total":"0.83","total_tax":"0.17","taxes":[{"id":1,"total":"0.166667","subtotal":"0.166667"}],"meta_data":[],"sku":"","price":0.833333,"image":{"id":"13","src":"https:\/\/shop.outquest.fr\/wp-content\/uploads\/2022\/09\/Product-458x458-1.jpg"},"parent_name":null}],"tax_lines":[{"id":18,"rate_code":"FR- TAX-1","rate_id":1,"label":"Tax","compound":false,"tax_total":"0.17","shipping_tax_total":"0.00","rate_percent":20,"meta_data":[]}],"shipping_lines":[],"fee_lines":[],"coupon_lines":[],"refunds":[],"payment_url":"https:\/\/shop.outquest.fr\/commander\/order-pay\/40\/?pay_for_order=true&key=wc_order_Px8132TVZef0E","is_editable":false,"needs_payment":false,"needs_processing":false,"date_created_gmt":"2022-09-30T16:00:07","date_modified_gmt":"2022-09-30T16:00:10","date_completed_gmt":"2022-09-30T16:00:10","date_paid_gmt":"2022-09-30T16:00:10","currency_symbol":"\u20ac","_links":{"self":[{"href":"https:\/\/shop.outquest.fr\/wp-json\/wc\/v2\/orders\/40"}],"collection":[{"href":"https:\/\/shop.outquest.fr\/wp-json\/wc\/v2\/orders"}],"customer":[{"href":"https:\/\/shop.outquest.fr\/wp-json\/wc\/v2\/customers\/1"}]}}

Beaucoup d’information ici. On y retrouve les coordonnées de l’acheteur, ce qu’il a commandé. 

Une autre requête sur le produit directement : https://shop.outquest.fr/wp-json/wc/v2/products/29

{"id":29,"name":"Quest \u2013 Vallons de Vilaine 2","slug":"quest-vallons-de-vilaine","permalink":"https:\/\/shop.outquest.fr\/produit\/quest-vallons-de-vilaine\/","date_created":"2022-09-30T11:09:23","date_created_gmt":"2022-09-30T09:09:23","date_modified":"2022-09-30T17:59:23","date_modified_gmt":"2022-09-30T15:59:23","type":"simple","status":"publish","featured":false,"catalog_visibility":"visible","description":"<p>Explorez le sud Ille et Vilaine le long du fleuve et d\u00e9couvrez des lieux d\u2019une beaut\u00e9 insoupsonn\u00e9e. Partez \u00e0 la d\u00e9couverte d\u2019endroit insolite et myst\u00e9rieux.<\/p>\n<p>Notre aventure commence avec Gwendal Morvan, contrebandier en 1605.<\/p>\n<p>\u2014 Histoire \u2014<\/p>\n<p>Sous l\u2019ancien r\u00e9gime (1589 \u2013 1789), la gabelle, c\u2019est-\u00e0-dire l\u2019imp\u00f4t sur le sel, est in\u00e9quitablement r\u00e9partie sur le territoire fran\u00e7ais. Le commerce de sel est libre en Bretagne alors que dans les provinces voisines du Maine et de l\u2019Anjou, les habitants sont contraints d\u2019acheter aux greniers de la ferme g\u00e9n\u00e9rale (compagnie priv\u00e9e charg\u00e9e de collecter les imp\u00f4ts indirects dont une somme forfaitaire est r\u00e9serv\u00e9e au roi) .<\/p>\n<p>Le sel \u00e0 cette \u00e9poque est une denr\u00e9e tr\u00e8s pr\u00e9cieuse, notamment dans la conservation des aliments. Donc on ne rigolait pas avec le sel ! C\u2019est une vraie monnaie d\u2019\u00e9change.<\/p>\n<p>Les marais salant de Gu\u00e9rande sont la principale source d\u2019approvisionnement de la r\u00e9gion et le transport de la marchandise se fait principalement via les r\u00e9seaux fluviaux. La vilaine en fait partie. Le port de Guipry est au moyen age le terminus des bateaux remontant le sel. Plus tard, la Vilaine se dotera d\u2019\u00e9cluse et la navigation se fera jusqu\u2019\u00e0 Rennes.<\/p>\n<p>A Guipry, on trouve donc des entrep\u00f4ts pour stocker le sel mais aussi une caserne de gabelous, charg\u00e9 de veiller au sel.<\/p>\n<p>Cette denr\u00e9e non impos\u00e9e en Bretagne attise la convoitise de ses voisins qui eux se voient tax\u00e9s au prix fort.<\/p>\n<p>Un ensemble de d\u00e9p\u00f4ts clandestins de forment alors aux portes de la Bretagne, et les faux sauniers (contrebandier de sel) pullulent dans la r\u00e9gion.<\/p>\n<p>\u2014 Fiction \u2014<\/p>\n<p>Richard Dax n\u00e9 \u00e0 Langon en 1580 conna\u00eet bien la r\u00e9gion o\u00f9 il a grandi. Au bord de la vilaine, enfant, il a vu passer de nombreux bateaux tract\u00e9s \u00e0 dos d\u2019homme. Son p\u00e8re est un de ces hommes, un haleur, qui, \u00e0 la force des bras, fait remonter les p\u00e9niches charg\u00e9es de sel de Langon \u00e0 Guipry, ensuite c\u2019est \u00e0 une autre personne de prendre le relais vers Bourgs des comptes. Mais bien souvent le chargement de sel s\u2019arr\u00eate \u00e0 Guipry et repart par voie terrestre.<\/p>\n<p>Lass\u00e9 de voir son p\u00e8re se tuer \u00e0 la t\u00e2che le long du halage, Richard d\u00e9cide alors de lui acheter un cheval. Mais un cheval \u00e7a co\u00fbte cher. Alors Richard se lance dans la contrebande de sel. Il commence seul et petit \u00e0 petit il cr\u00e9e son propre r\u00e9seau.<\/p>\n<p>A Guipry, il a corrompu un gabelous qui l\u2019informe non seulement du prix du sel dans toute la France, ce qui l\u2019aide dans ses n\u00e9gociations, mais aussi des op\u00e9rations anti contrebande, ce qui lui donne toujours un coup d\u2019avance.<\/p>\n<p>Afin de r\u00e9partir les risques d\u2019une saisie ou d\u2019un vol, Richard dispose de 7 caches le long de la Vilaine. Les revendeurs de sel du Maine et d\u2019Anjou se d\u00e9placent alors dans l\u2019une de ces caches pour y r\u00e9cup\u00e9rer le sel et laissent sur place, en \u00e9change, des Louis d\u2019or.\u00a0 Bien \u00e9videmment, les revendeurs peuvent partir avec le butin sans rien laisser en \u00e9change. Seulement, cela arr\u00eate net toutes transactions futures et la cache sera d\u00e9plac\u00e9e. Ils ont bien plus \u00e0 gagner \u00e0 coop\u00e9rer dans la dur\u00e9e.<\/p>\n<p>De plus, chacune de ces caches est dissimul\u00e9e dans la nature. Et on ne peut trouver son emplacement que si l\u2019on poss\u00e8de un parchemin et que l\u2019on sait le d\u00e9chiffrer. La cache et son parchemin peuvent changer au besoin. Il a pens\u00e9 \u00e0 tout Richard. Et pour assurer tout oubli, Richard dispose d\u2019une carte de collecte chiffr\u00e9e qu\u2019il met \u00e0 jour si besoin pour se souvenir de l\u2019emplacement des caches.<\/p>\n<p>Et \u00e7a fonctionne. Tr\u00e8s bien m\u00eame ! C\u2019est ainsi que pendant plus de 12 ans ce trafic prosp\u00e8re en toute clandestinit\u00e9. Mais en 1622 une \u00e9pid\u00e9mie de peste \u00e9clate \u00e0 Rennes. Elle ne mettra pas longtemps \u00e0 se r\u00e9pandre dans la r\u00e9gion et Richard n\u2019en fut pas \u00e9pargn\u00e9. Ceci arr\u00eate net toute cette entreprise, laissant en l\u2019\u00e9tat le trafic, donc les caches et leur contenu.<\/p>\n<p>Nous avons r\u00e9cup\u00e9r\u00e9 ces 7 parchemins et le plan de Richard.<\/p>\n<p>Est-ce que ces caches existent encore ?<\/p>\n<p>A vous de les trouver !<\/p>\n","short_description":"<p>Explorez le sud Ille et Vilaine le long du fleuve et d\u00e9couvrez des lieux d\u2019une beaut\u00e9 insoupsonn\u00e9e. Partez \u00e0 la d\u00e9couverte d\u2019endroit insolite et myst\u00e9rieux.Notre aventure commence avec Gwendal Morvan, contrebandier en 1605.<\/p>\n","sku":"","price":"1","regular_price":"1","sale_price":"","date_on_sale_from":null,"date_on_sale_from_gmt":null,"date_on_sale_to":null,"date_on_sale_to_gmt":null,"on_sale":false,"purchasable":true,"total_sales":7,"virtual":true,"downloadable":true,"downloads":[],"download_limit":-1,"download_expiry":-1,"external_url":"","button_text":"","tax_status":"taxable","tax_class":"","manage_stock":false,"stock_quantity":null,"in_stock":true,"backorders":"no","backorders_allowed":false,"backordered":false,"sold_individually":true,"weight":"","dimensions":{"length":"","width":"","height":""},"shipping_required":false,"shipping_taxable":false,"shipping_class":"","shipping_class_id":0,"reviews_allowed":true,"average_rating":"0.00","rating_count":0,"upsell_ids":[],"cross_sell_ids":[],"parent_id":0,"purchase_note":"","categories":[{"id":15,"name":"Non class\u00e9","slug":"non-classe"}],"tags":[],"images":[{"id":13,"date_created":"2022-09-26T17:47:16","date_created_gmt":"2022-09-26T13:47:16","date_modified":"2022-09-26T17:47:16","date_modified_gmt":"2022-09-26T13:47:16","src":"https:\/\/shop.outquest.fr\/wp-content\/uploads\/2022\/09\/Product-458x458-1.jpg","name":"Product-458&#215;458","alt":"","position":0}],"attributes":[],"default_attributes":[],"variations":[],"grouped_products":[],"menu_order":0,"price_html":"<span class=\"woocommerce-Price-amount amount\"><bdi>1,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/bdi><\/span>","related_ids":[12,17,14],"meta_data":[{"id":167,"key":"_last_editor_used_jetpack","value":"classic-editor"},{"id":310,"key":"_coming_soon_wc_arrival","value":"2022-09-30 09:09:23"},{"id":311,"key":"_coming_soon","value":"false"},{"id":425,"key":"lmfwc_licensed_product","value":"1"},{"id":426,"key":"lmfwc_licensed_product_delivered_quantity","value":"1"},{"id":427,"key":"lmfwc_licensed_product_use_stock","value":"0"},{"id":428,"key":"lmfwc_licensed_product_assigned_generator","value":"1"},{"id":429,"key":"lmfwc_licensed_product_use_generator","value":"1"}],"_links":{"self":[{"href":"https:\/\/shop.outquest.fr\/wp-json\/wc\/v2\/products\/29"}],"collection":[{"href":"https:\/\/shop.outquest.fr\/wp-json\/wc\/v2\/products"}]}}

Re « Bingo ». 

Grâce à ce deux API, je vais pouvoir coté application récupérer en toute sécurité ces données (gardez bien secrete les clé API, hein !)