WooCommerce – configurations avancées (partie 3)
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é client ou secrète 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édit/carte de débit », « 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 basrn35580 Paris » }, « footer »: { « default »: « » }, « extra_1 »: { « default »: « » }, « extra_2 »: { « default »: « » }, « extra_3 »:…