Annuler une initiation de paiement 

➤ Cas d'usage

Cette méthode permet au PISP d'annuler une demande d'initiation de paiement déjà enregistrée, à condition que le paiement n'ait pas encore été exécuté et que sa date d’exécution n’est pas atteinte (i.e. date d’exécution prévue au moins à J+1 par rapport à la date de demande d’annulation).

Autrement dit, cet appel permet d'envoyer à la banque (ASPSP) d'un client une demande d'annulation d'un paiement qui a été initié avec la méthode POST /payment-requests (voir la rubrique "Cas d'usage" > "Initier un paiement") et qui n'est pas encore échu.

Pour cet ASPSP, un virement SCT qui a été initié via l’API DSP2 PISP (quelle que soit la version) est annulable via l’API DSP2 PISP ou directement par le PSU via son application web ou mobile.  

 

 

➤ Prérequis

Pour procéder à cette requête il est nécessaire de remplir les prérequis d’éligibilité pour le rôle TPP "PISP" (voir la rubrique "Eligibilité"), et d'avoir récupéré le jeton d'accès OAUTH2 (voir la rubrique "Vue d'ensemble" > "Récupérer un jeton").

Le TPP a déjà envoyé une requête DSP2 API PISP en version 1.4.2 qui a été enregistrée par l'ASPSP et à laquelle l'ASPSP a répondu avec un lien de localisation vers la demande de paiement / virement sauvegardée.

Corollaire : Pour annuler une initiation de paiement qui a été initiée par l’API DSP2 en version 1.4.0, il convient d’utiliser une requête DSP2 PISP en version 1.4.0 également (i.e. PUT /stet/psd2/v1/payment-requests/{resourceId}).

 

 

➤ Requête

Le point d'entrée dépendra du code établissement.

Vous devez utiliser la même valeur du paramètre <cdetab> que celle utilisée pour le jeton d'accès.

Pour rappel, la liste de nos établissements et les valeurs possibles des <cdetab> sont précisées dans la rubrique "Limitations".

Par exemple, voici la requête pour annuler en production un paiement pour un client de cet ASPSP :

  • PUT https://www.30258.live.api.89c3.com/stet/psd2/v1.4.2/payment-requests/{paymentRequestResourceId}

 

 

➤ Paramètres obligatoires ou facultatifs du body requis pour l'appel de ce service

Paramètre obligatoire paymentRequestResourceId : identifiant de la requête d'initiation de paiement pour laquelle on souhaite annuler le virement.

La structure du body et les champs obligatoires sont décrits dans la norme STET.

Le Tiers de Paiement peut et doit récupérer les informations de son virement avec la méthode GET /stet/psd2/v1.4.2/payment-requests/{paymentRequestResourceId} afin de vérifier que le paiement est à un statut annulable. Pour savoir si un virement est éligible les informations suivantes doivent être valorisées dans la requête comme suit :

  • La donnée paymentInformationStatus doit avoir l'une des valeurs : ACTC / ACCP / ACSP
  • La donnée transactionStatus (au niveau de la transaction dans l’objet creditTransferTransaction) doit avoir la valeur PDNG (si paymentInformationStatus = ACSP), sinon il ne doit pas être renseigné
  • La donnée serviceLevel doit être renseigné à SEPA (seuls les virements SCT différé et permanent sont annulables)
  • La donnée currency doit être renseignée à EUR
  • La donnée localInstrument ne doit pas être valorisée, seuls les SCT étant acceptés pour l'annulation
  • La donnée requestedExecutionDate doit être dans le futur : à minima à J+1

 

Pour permettre à la banque de comprendre que la requête est une demande d'annulation d'une initiation de paiement, certaines informations doivent être modifiées dans la requête comme suit (API DSP2 STET_V1.4.2.17 Part 3 Interaction Examples p.23) :

  • La donnée transactionStatus(au niveau de la transaction dans l’objet creditTransferTransaction) doit être positionnée à "RJCT" (Rejeté)
  • La donnée statusReasonInformation(au niveau de la transaction dans l’objet creditTransferTransaction) doit être positionnée avec l'une des valeurs suivantes :
statusReasonInformationSignification
DS02 Annulation à la demande du client 
DUPL Annulation à la demande du PISP en cas de doublon par rapport à un paiement/virement précédent
FRAD Annulation à la demande du PISP si l'origine du paiement/virement est frauduleux
TECH Annulation à la demande du PISP pour un problème technique de son côté

 

  • Il faut également enlever toute la partie _links
  • Pour finir il faut supprimer l'intitulé du parent "paymentRequest": {" ainsi que l’accolade fermante en bas du flux "}"

 

Les autres données de la requête doivent être identiques à celles récupérées avec la méthode GET.

 

 Résultat retourné

L’initiation d'un paiement récurrent peut être annulée tant qu’elle est en cours de traitement (ACSP) jusqu’à l’exécution du dernier paiement.

Si tous les paiements ont été exécutés, l’initiation d'un paiement récurrent est impossible à annuler.

 

 

➤ Résultat retourné

A la soumission de la requête, et si toutes les données sont correctement formatées, une réponse (HTPP 200) sera retournée.

Cette réponse contiendra le ressourceId du paiement, ainsi que le mode d'authentification SCA Redirect (seul mode disponible), l'URL de consentement en fonction de la banque du payeur (urlconsent_approval_URL) et le non rejeu.

Remarques :

  • La donnée paymentRequestRessourceId, essentielle pour pouvoir annuler un paiement, est incluse en tant que paramètre dans l'URL de consentement "consentApproval" renvoyée lors de l’initiation de paiement.

 

  • Idem pour le non rejeu : c'est le paramètre nonce dans l'URL de consentement.

 

 

 Codes erreur

Type d'erreur

Code HTTP
Libellé
Motif
Générique, mauvaise structure 400 Bad request error code : FF01
message : RJCT
Mauvais format du BIC 400 Bad request error code : FF01
message : RJCT
error : le champ creditorAgent.bicFi bicFi-Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362
Mauvais format du serviceLevel 400 Bad request  error code : FF01
message : RJCT
error : value not one of declared Enum instance names: [SEPA, NURG]
Mauvais format, chargeBearer autre que SLEV 400 Bad request error code: FF01
message: RJCT
error: value not one of declared Enum instance names: [SLEV]
Mauvais format du schemeName 400 Bad request error code: FF01
message : RJCT
error : le champ creditor.privateId.schemeName schemeName-Possible values BANK,COID,SREN,DSRET,NIDN,OAUT,CPAN
Mauvais format du purpose 400 Bad request error code: FF01
message: RJCT
error: value not one of declared Enum instance names: [TRPT, CASH, CPKC, ACCT, COMC]
Mauvais format du categoryPurpose 400 Bad request error code: FF01
message: RJCT
error: value not one of declared Enum instance names: [CASH, DVPM]
Mauvais jeton d'accès, problème d'authentification 403 Forbidden  
Request resource inconnu 404 Not Found  
Mauvaise requête ou requête hors périmètre autorisé 405 Method not allowed  
Message générique 500 Internal server error