[{"data":1,"prerenderedAt":324},["ShallowReactive",2],{"content:fr:/docs/testing":3},{"id":4,"title":5,"body":6,"description":317,"extension":318,"meta":319,"navigation":247,"path":320,"seo":321,"stem":322,"__hash__":323},"content/fr/docs/testing/index.md","Tests en Sandbox",{"type":7,"value":8,"toc":310},"minimark",[9,13,27,50,55,90,104,108,111,229,233,299,304],[10,11,5],"h1",{"id":12},"tests-en-sandbox",[14,15,16,17,21,22,26],"p",{},"Chaque nouveau compte démarre en ",[18,19,20],"strong",{},"sandbox"," (",[23,24,25],"code",{},"account_type: \"sandbox\"","). Le sandbox vous permet\nd'exercer l'intégration complète — authentification, création de transactions,\nréception de webhooks et rapprochement — avant que de l'argent réel ne circule.",[28,29,31],"callout",{"type":30},"prereq",[32,33,34,38,47],"ul",{},[35,36,37],"li",{},"Un compte vérifié avec un profil marchand complété.",[35,39,40,41,46],{},"Un jeton API (",[42,43,45],"a",{"href":44},"/docs/authentication","Authentification",").",[35,48,49],{},"Votre point de terminaison de webhook accessible en HTTPS (ou un tunnel pendant le dev local).",[51,52,54],"h2",{"id":53},"comment-fonctionne-le-sandbox","Comment fonctionne le sandbox",[32,56,57,76,83],{},[35,58,59,60,63,64,67,68,71,72,75],{},"Le mode de votre compte figure dans la charge utile utilisateur sous ",[23,61,62],{},"account_type","\n(",[23,65,66],{},"\"sandbox\""," | ",[23,69,70],{},"\"prod\"","). Lisez-le depuis ",[23,73,74],{},"GET /api/auth/me/",".",[35,77,78,79,82],{},"La surface de l'API, les formes des requêtes/réponses, les statuts et les webhooks sont ",[18,80,81],{},"identiques","\nà la production — seul l'indicateur de mode diffère. Le code écrit pour le sandbox fonctionne\nsans changement en production.",[35,84,85,86,46],{},"Un administrateur vous promeut en production lorsque vous êtes prêt\n(",[42,87,89],{"href":88},"/docs/go-live","Passage en production",[28,91,94],{"type":92,"title":93},"tip","Affichez le mode dans votre propre application",[14,95,96,97,100,101,75],{},"Affichez un badge « Sandbox » clair dans votre tableau de bord tant que ",[23,98,99],{},"account_type === \"sandbox\"",",\net conditionnez tout flux réel ou réservé à la production sur ",[23,102,103],{},"account_type === \"prod\"",[51,105,107],{"id":106},"ce-quil-faut-vérifier-avant-le-passage-en-production","Ce qu'il faut vérifier avant le passage en production",[14,109,110],{},"Parcourez chaque scénario et confirmez que votre système se comporte correctement :",[112,113,114,130,151,164,192,209,219],"ol",{},[35,115,116,118,119,122,123,125,126,129],{},[18,117,45],{}," — un jeton valide renvoie ",[23,120,121],{},"200"," depuis ",[23,124,74],{}," ; un\njeton invalide/expiré renvoie ",[23,127,128],{},"401"," et votre client se rafraîchit ou se réauthentifie.",[35,131,132,135,136,139,140,143,144,147,148,75],{},[18,133,134],{},"Créer un paiement"," — ",[23,137,138],{},"POST /api/payments/transaction/"," renvoie ",[23,141,142],{},"201"," avec une\n",[23,145,146],{},"reference"," et ",[23,149,150],{},"transaction_status: \"Received\"",[35,152,153,156,157,139,160,163],{},[18,154,155],{},"Protection contre les doublons"," — renvoyer le même ",[23,158,159],{},"merchant_reference",[23,161,162],{},"400","\n(et votre code le traite comme « déjà soumis », pas comme un nouveau débit).",[35,165,166,169,170,173,174,177,178,173,180,183,184,187,188,191],{},[18,167,168],{},"Erreurs de validation"," — une ",[23,171,172],{},"currency","/",[23,175,176],{},"service"," inconnue, un champ manquant, ou un\njeton non-marchand renvoie le ",[23,179,162],{},[23,181,182],{},"403"," attendu et vous affichez\n",[23,185,186],{},"error.message"," / ",[23,189,190],{},"error.details"," à l'utilisateur.",[35,193,194,197,198,201,202,204,205,208],{},[18,195,196],{},"Webhook de succès"," — votre point de terminaison reçoit le callback ",[23,199,200],{},"Success",", renvoie\n",[23,203,121],{},", et est ",[18,206,207],{},"idempotent"," lorsque le même callback arrive deux fois.",[35,210,211,214,215,218],{},[18,212,213],{},"Webhook d'échec"," — vous gérez un callback ",[23,216,217],{},"Failed"," (pas de livraison, utilisateur\ninformé).",[35,220,221,224,225,46],{},[18,222,223],{},"Rapprochement"," — vous pouvez lister et ré-interroger les transactions pour récupérer après un\nwebhook manqué (voir ",[42,226,228],{"href":227},"/docs/reports","Rapports",[51,230,232],{"id":231},"checklist-pré-production","Checklist pré-production",[28,234,236],{"type":30,"title":235},"Avant de demander la promotion",[32,237,240,250,261,267,283,293],{"className":238},[239],"contains-task-list",[35,241,244,249],{"className":242},[243],"task-list-item",[245,246],"input",{"disabled":247,"type":248},true,"checkbox"," Les jetons sont stockés comme des secrets (jamais dans le code client ni le contrôle de version).",[35,251,253,255,256,258,259,75],{"className":252},[243],[245,254],{"disabled":247,"type":248}," Le gestionnaire de webhook vérifie, répond ",[23,257,121],{}," rapidement, et est idempotent sur ",[23,260,146],{},[35,262,264,266],{"className":263},[243],[245,265],{"disabled":247,"type":248}," Vous ré-interrogez le statut faisant autorité avant de libérer des biens/fonds.",[35,268,270,272,273,173,275,173,277,173,279,282],{"className":269},[243],[245,271],{"disabled":247,"type":248}," Tous les chemins d'erreur (",[23,274,162],{},[23,276,128],{},[23,278,182],{},[23,280,281],{},"409",") sont gérés et journalisés.",[35,284,286,288,289,292],{"className":285},[243],[245,287],{"disabled":247,"type":248}," Votre ",[23,290,291],{},"callback_url"," est en HTTPS et accessible publiquement.",[35,294,296,298],{"className":295},[243],[245,297],{"disabled":247,"type":248}," Vous avez rapproché au moins un paiement de bout en bout (création → webhook → statut).",[14,300,301,302,75],{},"Lorsque toutes les cases sont cochées, demandez l'accès en production — voir\n",[42,303,89],{"href":88},[305,306],"doc-nav",{":first-page":307,":last-page":307,"next-title":89,"next-url":88,"previous-title":308,"previous-url":309},"false","Webhooks","/docs/callback",{"title":311,"searchDepth":312,"depth":312,"links":313},"",2,[314,315,316],{"id":53,"depth":312,"text":54},{"id":106,"depth":312,"text":107},{"id":231,"depth":312,"text":232},"Testez votre intégration PayRouter en toute sécurité avant le passage en production — comment fonctionne le mode sandbox, ce qu'il faut vérifier et une checklist pré-production.","md",{},"/fr/docs/testing",{"title":5,"description":317},"fr/docs/testing/index","-mJvPpGv3LPJYSfiw-iicwwpJywWD3IJXLhi15aWNHk",1784295145839]