Configurer les webhooks pour une mise à jour automatique des statuts
Un webhook est un message qu’un système envoie à un autre lorsqu’il se passe quelque chose. Payload en envoie un à Salesforce lorsqu’un paiement est traité, refusé, remboursé, annulé ou rejeté, et lorsque de l’argent est déposé sur votre compte bancaire ou en est retiré. REDA Pay reçoit ces messages et met à jour la Pay Transaction correspondante, ou crée une Statement Activity pour un dépôt. Sans webhooks, un paiement accepté aujourd’hui et rejeté par la banque trois jours plus tard reste « processed » dans Salesforce jusqu’à ce que quelqu’un appuie à la main sur Sync Transaction.
La configuration comporte cinq parties : une adresse publique dans Salesforce que Payload peut joindre, l’accès de l’utilisateur invité derrière cette adresse, l’adresse sur le Pay Profile, l’accès de l’utilisateur Salesforce qui traite les messages, et le bouton Setup Webhooks qui enregistre l’adresse auprès de Payload.
- Le Pay Profile est actif et sa clé API est enregistrée ; consultez Synchroniser les comptes de traitement et activer le profil.
- Vous avez REDA Pay - Admin User et l’autorisation Salesforce Customize Application (un administrateur système l’a).
- Lisez la partie 5 avant d’appuyer sur Setup Webhooks : elle supprime tous les webhooks enregistrés sous votre clé API Payload.
Comment les éléments s’articulent
Payload ──(message webhook)──▶ votre site Salesforce public ──▶ REDA Pay ──▶ Pay Transaction mise à jour
/services/apexrest/… (traité par l’utilisateur Processus automatisé)
Payload a besoin d’une adresse qu’il peut appeler sans se connecter. Dans Salesforce, c’est un site : une adresse web publique appartenant à votre organisation, utilisée ici uniquement comme boîte aux lettres pour les messages de Payload. REDA Pay communique l’adresse complète à Payload ; vous ne fournissez que l’adresse de base du site.
Partie 1 — Créer le site public
Si votre organisation dispose déjà d’un site Salesforce utilisé pour des intégrations, vous pouvez le réutiliser ; passez à la partie 2. Sinon :
- Ouvrez la Configuration, saisissez Sites dans la zone Recherche rapide et cliquez sur Sites (sous Interface utilisateur → Sites et domaines).
- Si vous n’avez jamais créé de site, enregistrez d’abord un domaine : saisissez un nom dans la zone du domaine, cliquez sur Vérifier la disponibilité, acceptez les conditions et cliquez sur Enregistrer mon domaine de site Salesforce. Le domaine ressemble à
yourcompany.my.salesforce-sites.com. - Cliquez sur Nouveau.
- Renseignez : Étiquette du site (par exemple Payment Callbacks), Nom du site (rempli automatiquement), Adresse Web par défaut (un chemin court comme
rpay, qui fera partie de l’adresse) et Page d’accueil du site actif : cliquez sur la recherche et choisissez n’importe quelle page, par exemple UnderConstruction. Personne ne visitera cette page. - Enregistrez, puis activez le site.
Notez l’adresse complète du site, telle qu’elle apparaît dans URL du site, par exemple https://yourcompany.my.salesforce-sites.com/rpay.
Un site utilisé uniquement pour les webhooks. Son URL du site est ce que vous saisissez sur le Pay Profile.
Partie 2 — Donner l’accès à l’utilisateur invité du site
Chaque site a un utilisateur invité, l’identité que Salesforce utilise pour les visiteurs non connectés. Les messages de Payload arrivent sous cette identité : elle doit donc être autorisée à exécuter la classe REDA Pay qui les reçoit.
- Sur la page de détail du site, cliquez sur Paramètres d’accès public. Le profil de l’utilisateur invité s’ouvre.
- Faites défiler jusqu’à Accès aux classes Apex activé (appelé Accès à la classe Apex dans l’interface de profil améliorée) et cliquez sur Modifier.
- Déplacez rpay.PayloadCallback de la liste des classes disponibles vers celle des classes activées, puis cliquez sur Enregistrer. L’utilisateur invité n’a besoin de rien d’autre : cette classe se contente de transmettre le message à REDA Pay.
L’utilisateur invité a besoin exactement de cette classe. Elle reçoit le message de Payload et le transmet à REDA Pay.
Partie 3 — Saisir l’adresse du site sur le Pay Profile
- Ouvrez l’application REDA Pay → Pay Profiles → votre profil → Modifier.
- Dans Webhook API Base URL, collez l’adresse du site de la partie 1, avec
https://et le chemin, par exemplehttps://yourcompany.my.salesforce-sites.com/rpay. - Cliquez sur Enregistrer.
REDA Pay ajoute lui-même le reste de l’adresse. Vous ne saisissez jamais l’adresse complète du webhook.
Partie 4 — Donner l’accès à l’utilisateur Processus automatisé
Lorsqu’un message arrive, Salesforce le confie à un utilisateur système intégré appelé Processus automatisé (Automated Process), qui fait le travail : lire le message, trouver la Pay Transaction, demander à Payload son dernier statut et mettre à jour l’enregistrement. Cet utilisateur n’a aucun accès aux enregistrements REDA Pay tant que vous ne lui en donnez pas, et il n’apparaît pas dans la liste habituelle des utilisateurs : l’accès s’accorde donc avec un court script.
- Ouvrez Configuration → Ensembles d’autorisations, ouvrez REDA Pay - Admin User et cliquez sur Cloner. Nommez la copie REDA Pay - Automated Process et enregistrez.
- Copiez l’Id du clone depuis la barre d’adresse (la valeur de 18 caractères après
/lightning/setup/PermSets/, ou les 15 caractères aprèsid=). - Ouvrez la Developer Console (console du développeur) depuis le menu de l’engrenage ; si ce menu affiche Console Web à la place, ouvrez
https://<votre My Domain>.my.salesforce.com/_ui/common/apex/debug/ApexCSIPagedans un nouvel onglet. Choisissez ensuite Debug → Open Execute Anonymous Window (la fenêtre d’exécution de code anonyme ; les menus de la Developer Console sont en anglais), collez la ligne ci-dessous avec votre Id et cliquez sur Execute :
insert new PermissionSetAssignment(
AssigneeId = [SELECT Id FROM User WHERE Alias = 'autoproc' LIMIT 1].Id,
PermissionSetId = '0PS000000000000AAA' // l’Id de votre ensemble d’autorisations REDA Pay - Automated Process
);
La fenêtre signale la réussite. Si elle indique que l’attribution existe déjà, l’étape a déjà été faite.
Partie 5 — Enregistrer les webhooks auprès de Payload
- Sur le Pay Profile, cliquez sur Setup Webhooks.
- Lisez la boîte de dialogue : « System will delete all the existng webhooks and create new webhook setup. »
- Cliquez sur Setup Webhooks. Attendez le message « Webhook setup created successfully. » et fermez la boîte de dialogue.
- Ouvrez l’onglet Webhook Setup du profil. Il liste dix enregistrements Pay Profile Webhook, un par événement : payment, processed, authorized, credit, refund, reversal, void, decline, deposit et reject. Chacun affiche le Webhook Id attribué par Payload et le Webhook URL enregistré par REDA Pay. Le champ Webhook Setup Datetime [Payload] du profil est renseigné.
Dix webhooks, un par événement Payload. S’il en apparaît moins, l’enregistrement a échoué en cours de route : corrigez la cause et exécutez de nouveau Setup Webhooks.
Exécutez de nouveau Setup Webhooks chaque fois que vous modifiez le Webhook API Base URL ou remplacez la clé API.
Vérifier que cela fonctionne
Encaissez un petit paiement de test (consultez Encaisser un paiement) et ouvrez sa Pay Transaction. En quelques minutes, les champs Status, Status Code et Funding Status se mettent à jour sans que personne n’appuie sur Sync Transaction. Pour un paiement bancaire, le statut de financement passe de pending à batched lorsque Payload le regroupe en lot, et un dépôt sur votre compte bancaire crée ensuite une Statement Activity ; consultez Rapprocher les dépôts et les versements.
Si rien ne se met à jour, vérifiez dans cet ordre :
| Vérification | Où | Ce qu’il faut voir |
|---|---|---|
| Le site est actif | Configuration → Sites | Statut Actif |
| L’utilisateur invité a la classe | Site → Paramètres d’accès public → Accès aux classes Apex activé | rpay.PayloadCallback activée |
| L’URL de base correspond au site | Pay Profile → Webhook API Base URL | Même protocole, même domaine et même chemin que l’URL du site, sans ajout |
| Les webhooks existent chez Payload | Pay Profile → onglet Webhook Setup | Dix enregistrements avec un Webhook Id |
| Les messages sont traités | Application REDA Pay → REDA Pay Logs → Attention Needed | Un journal qui nomme un processus de synchronisation ou de relevé avec une erreur |
| Processus automatisé a l’accès | Partie 4 | Réexécutez le script ; s’il indique que l’attribution existe, l’accès est en place |
Ce que contiennent les messages
Un message indique seulement à REDA Pay quelle transaction a changé. REDA Pay demande ensuite à Payload l’état actuel de cette transaction et enregistre la réponse : l’enregistrement reflète donc toujours Payload, et non le message. Les messages qui concernent des transactions que Salesforce n’a jamais vues sont ignorés. Les messages de dépôt et de retrait créent ou actualisent une Statement Activity.
Erreurs à éviter
| Erreur | Ce qui se passe | Correction |
|---|---|---|
| Appuyer sur Setup Webhooks avec une clé API partagée avec un autre système | L’autre système ne reçoit plus les messages de Payload | Utilisez une clé API par système, ou réenregistrez les webhooks de l’autre système |
| Une URL de base qui n’est pas l’adresse du site (un chemin de page ajouté, ou l’adresse de rappel complète collée) | REDA Pay ajoute son propre chemin à ce que vous saisissez : l’adresse enregistrée est fausse et les messages n’arrivent jamais | Saisissez uniquement l’adresse du site, exactement comme dans l’URL du site |
| Utilisateur invité sans la classe | Les messages de Payload sont rejetés ; les statuts ne se mettent jamais à jour | Activez rpay.PayloadCallback sur le profil invité |
| Sauter la partie 4 | Les messages arrivent mais la mise à jour échoue ; un REDA Pay Log peut afficher l’erreur | Attribuez l’ensemble d’autorisations cloné à l’utilisateur Processus automatisé |
| Changer la clé API sans réenregistrer | Les webhooks restent enregistrés sous l’ancienne clé | Exécutez de nouveau Setup Webhooks |
Questions fréquentes
N’importe quelle adresse de site Salesforce active fonctionne, à condition que son utilisateur invité ait la classe activée. Un site dédié sépare l’utilisateur invité de l’intégration de celui de votre portail.
Elle contient le domaine de votre site et l’Id d’enregistrement du Pay Profile, rien de plus. Les messages ne font que nommer une transaction ; REDA Pay relit la transaction chez Payload avant de modifier quoi que ce soit.
Les paiements sont enregistrés sans eux. Les webhooks tiennent ensuite les enregistrements à jour (refus, rejets, remboursements effectués hors de Salesforce, dépôts) : toute organisation de production devrait les avoir.
Pour aller plus loin
- Comment les statuts de paiement restent à jour : ce que chaque événement fait aux enregistrements.
- Activer la récupération des paiements échoués : la tâche qui couvre les paiements dont le résultat n’a jamais été reçu.