Transaction confirmation (server-side)
Pourquoi faire une transaction en server-side ? A quoi cela sert-il ?
A quoi sert le tracking en server-side de la confirmation de transaction ?
Votre première étape est de définir votre besoin de tracker la confirmation de transaction. Chez Piano Analytics, vous avez la possibilité de tracker la transaction en client-side ou en server-side.
Mais quelle est la différence entre les deux méthodes ? Pourquoi en privilégier une par rapport à l’autre ?
En client-side, cela signifie que tout se passe via le navigateur. Il y aura tout simplement l’envoi de l’event cart.payment au moment de payer puis sur la page de confirmation ou de remerciement de commande, les events product.purchased et de transaction.confirmation.
Mais il arrive que cette page de remerciement ou de confirmation ne se charge pas et donc les events qui récupérent les informations de transaction ne remontent pas dans Piano Analytics. Il existe alors la possibilité de tracker l’event de transaction.confirmation en server-side.
En server-side, il faudra juste envoyer uniquement la transaction.confirmation en GET ou POST de votre server vers celui de Piano Analytics. Mais il reste quelques paramètres à prendre en compte pour que le processing fonctionne convenablement.
Pour rappel des events dont on va avoir besoin :
- product.awaiting_payment > produit en attente de paiement (un product.awaiting_payment par produit présent dans le panier)
- cart.awaiting_payment > panier en attente de paiement
- transaction.confirmation > confirmation de transaction en server-side
Nous allons devoir utiliser les events cart.awaiting_payment et product.awaiting_payment en client-side puis envoyer en server-side uniquement l’event transaction.confirmation.
Votre seconde étape sera d’intégrer les events cart.awaiting_payment et product.awaiting_payment au moment où le visiteur clique sur « payer ».
Ce qu’il faut bien comprendre c’est que toutes les infos que vous allez envoyer dans le cart.awaiting_payment vont remonter dans l’event de transaction.confirmation dans Piano Analytics après avoir été processées.
Puis il faudra envoyer un event product.awating_payment par produit acheté qui sera processé et remontera dans Piano Analytics sous l’event product.purchased.
Pour enfin envoyer depuis votre server l’event de transaction.confirmation avec 3 propriétés obligatoires (‘cart_id’, ‘transaction_id’ et ‘offsite_confirmation’: true), ainsi que le site id et le log de collect.
Les events cart.awaiting_payment + product.awaiting_payment (un event par produit dans le panier) en même temps au moment où l’utilisateur clique sur « payer » :
pa.sendEvents([
{
name: "cart.awaiting_payment",
data: {
cart_id: "LAPW221C", // obligatoire
cart_version: "V1", // obligatoire
cart_currency: "EUR",
cart_creation_utc: 1666196008,
cart_turnovertaxincluded: 1413.98,
cart_turnovertaxfree: 1132.09,
cart_quantity: 2,
cart_nbdistinctproduct: 2,
shipping_delivery: "Express",
shipping_costtaxincluded: 11.99,
shipping_costtaxfree: 10.99,
page: 'page_confirmation_transaction'
},
},
{
name: "product.awaiting_payment",
data: {
cart_id: "LAPW221C", // obligatoire
cart_version: "V1", // obligatoire
product_id: "LPTAX174", // obligatoire
product: "Laptop AX174",
product_variant: "8Go RAM",
product_brand: "Laptop",
product_discount: false,
product_pricetaxincluded: 1399.9,
product_pricetaxfree: 1120.9,
product_stock: true,
product_category1: "Hardware",
product_category2: "Computer",
product_category3: "Gaming",
product_category4: "Laptop",
product_quantity: 1,
page: 'page_confirmation_transaction'
},
},
{
name: "product.awaiting_payment",
data: {
cart_id: "LAPW221C", // obligatoire
cart_version: "V1", // obligatoire
product_id: "LPTAX175", // obligatoire
product: "Mouse XY",
product_variant: "white",
product_brand: "Laptop",
product_discount: false,
product_pricetaxincluded: 13.99,
product_pricetaxfree: 11.19,
product_stock: true,
product_category1: "Hardware",
product_category2: "Computer",
product_category3: "Gaming",
product_category4: "Mouse",
product_quantity: 1,
page: 'page_confirmation_transaction'
},
},
]);
Puis l’event transaction.confirmation côté server, c’est-à-dire que c’est à votre équipe de developpers de déposer cette requête GET après que le paiement soit passé et de l’envoyer vers le server de collect de votre site (l’information se retrouve dans Data Collection Portal dans Piano Analytics sous votre site id) :
//format GET de la requête pour la transaction confirmation mais possible de la faire en POST
https://https://logsX.xiti?s=123456&events=[{"name":"transaction.confirmation","data":{"cart_id":"LAPW221C","transaction_id":"1234567", "offsite_confirmation":true}}]
Il faudra bien avoir le même ‘cart_id’ entre les events en client-side et la confirmation de transaction en server-side. Sachez bien qu’il est impossible de pousser d’autres propriétés dans la requête de transaction.confirmation côté server mais bien uniquement les 3 propriétés obligatoires.
Quelques subtilités à connaître
En client-side, dans les events product.awaiting_payment toutes les propriétés standards liées au produit ou les propriétés personnalisées remonteront dans l’event product.purchased dans Piano Analytics.
Si vous souhaitez avoir un nom de page sur cet event, il faudra le pousser dans le product.awaiting_payment, de même pour le cart.awaiting_payment pour le retrouver dans l’event transaction.confirmation dans l’outil Piano.
pa.sendEvents([
{
name: "cart.awaiting_payment",
data: {
cart_id: "LAPW221C", // obligatoire
cart_version: "V1", // obligatoire
cart_currency: "EUR",
cart_creation_utc: 1666196008,
cart_turnovertaxincluded: 1399.9,
cart_turnovertaxfree: 1120.9,
cart_quantity: 1,
cart_nbdistinctproduct: 1,
shipping_delivery: "Express",
shipping_costtaxincluded: 11.99,
shipping_costtaxfree: 10.99,
page: 'page_confirmation_transaction' //nom de page pour l'avoir dans l'event transaction.confirmation
},
},
{
name: "product.awaiting_payment",
data: {
cart_id: "LAPW221C", // obligatoire
cart_version: "V1", // obligatoire
product_id: "LPTAX174", // obligatoire
product: "Laptop AX174",
product_variant: "8Go RAM",
product_brand: "Laptop",
product_discount: false,
product_pricetaxincluded: 1399.9,
product_pricetaxfree: 1120.9,
product_stock: true,
product_category1: "Hardware",
product_category2: "Computer",
product_category3: "Gaming",
product_category4: "Laptop",
product_quantity: 1,
page: 'page_confirmation_transaction' //nom de page pour l'avoir dans l'event product.purchased
},
},
]);
En client-side, dans les events product.awaiting_payment et cart.awaiting_payment, vous avez pu constater une propriété obligatoire qui n’a jamais été vu auparavant, cette petite cachotière est ‘cart_version’, si vous l’oubliez, vos events ne fonctionneront pas !
À quoi sert cette propriété ? et comment fonctionne t’elle ?
Vous devez pousser une valeur identique dans les 2 events lorsqu’il y a une tentative de paiement, si le paiement est refusé, vous n’avez pas à renvoyer les events awaiting_payment.
En effet, la transaction.confirmation peut être envoyée sous 24h ou 72h si vous utilisez la propriété ‘confirmation_delay’: 72 dans les events awaiting_payment.
‘cart_version’ est au format string donc vous pouvez très bien mettre ‘v1’ ou encore ‘1’, etc… Il faudra la modifier si par exemple après un refus de paiement le visiteur ajoute un nouvel article au panier, à ce moment-là, il faudra renvoyer les events awaiting_payment avec ‘cart_version’ d’incrémentée ‘v2’ ou ‘2’, etc…
Pour quelle raison, devons-nous faire cela ? tout simplement pour que le processing de Piano Analytics repère les paniers qui ont été mis à jour après une tentative de paiement avant la confirmation de paiement.
En résumé :
- choisir la méthode de tracking de confirmation de transaction client-side ou server-side
- intégrer les events awaiting_payment avec les propriétés souhaitées dont le nom de page par exemple
- intégrer la confirmation de transaction en GET ou POST du côté server vers le server de Piano Analytics
Vous êtes maintenant fin prêt pour réaliser vos premières transaction en cerver-side de la solution Piano Analytics, enjoy !
Pas de data, pas de chocolat !