Récupérer le statut d’une demande
d’initiation de paiement

➤ Cas d'usage

Cette méthode permet au PISP d'obtenir le statut d’une demande d’initiation de paiement précédemment envoyée à l’ASPSP, pour un PSU donné, via une requête de type POST/payment-requests.

 

➤ Prérequis

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

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

 

➤ Requête

GET /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 accéder au statut.

 

➤ 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) vous sera retournée.

Cette réponse contiendra les données de l'initiation de paiement enrichies du statut de la requête d'initiation et du paiement associé.

Les valeurs possibles pour le statut de la demande de paiement sont les suivantes (valeurs pour la version STET v1.4.0.47) :

Code

Description
ACCP Profil Client Accepté (AcceptedCustomerProfile) : La vérification précédente de la validation technique a été réussie. La vérification du profil du client a également été réussie.
ACSC Règlement accepté terminé (AcceptedSettlementCompleted) : Le règlement sur le compte du débiteur est terminé.
ACSP Règlement accepté en cours (AcceptedSettlementInProcess) : Toutes les vérifications précédentes, telles que la validation technique et le profil du client, ont abouti.
L’évaluation dynamique des risques est également un succès et la demande de paiement a donc été acceptée pour exécution.
ACTC Validation technique acceptée (AcceptedTechnicalValidation) : L'authentification et la validation syntaxique et sémantique ont réussi.
ACWC Accepté avec changement (AcceptedWithChange) : Les instructions sont acceptées mais une modification sera apportée, telle que la date ou le versement non envoyé.
ACWP Accepté sans écriture (AcceptedWithoutPosting) : Les instructions de paiement incluses dans le virement sont acceptées sans être enregistrées sur le compte du client créancier.
PART Partiellement accepté (PartiallyAccepted) : un certain nombre de transactions ont été acceptées, tandis qu'un autre nombre n'a pas encore atteint le statut «accepté».
RCVD Reçu (Received) : le paiement a été initié par l'agent destinataire.
PDNG En attente (Pending) : Une demande de paiement ou une transaction individuelle incluse dans la demande de paiement est en attente.
Des vérifications supplémentaires et une mise à jour du statut seront effectuées.
RJCT Rejeté (Rejected) : La demande de paiement a été rejetée.

 

Le tableau suivant reprend les valeurs possibles pour le statut de l'initiation de paiement et de la transaction de paiement associée (valeurs pour la version STET v1.4.0.47) suite à une requête d'initiation de paiement :

Etape de traitement  d'une initiation contenant un paiement

Résultat de l'étapeValeur de paymentInformationStatus à l'issue de l'étapeValeur de crediTransferTransaction / transactionStatus à l'issue de l'étape

Contrôle et enregistrement de la requête d'initiation

(réception et réponse au paymentRequest de l'API DSP2)

OK ACTC -
KO RJCT -
 

Consentement

(début consommation de l'URL consentAproval

 
OK  ACCP    -
 KO RJCT    -
 

Demande d'exécution du paiement

(juste avant retour REDIRECT vers l'application du TPP)

 
 OK

ACSP

(ou PDNG uniquement en environnement sandbox)

 

PDNG si virement exécuté à J

ACSP sinon

(forcé à PDNG en environnement sandbox)

 
 KO  RJCT  RJCT
 Si le PSU ne fait aucune action de consentement (validation ou refus) dans les 30 minutes qui suivent la requête d’initiation    RJCT (raison NOAS)  RJCT (raison NOAS)
 Jour d'exécution de paiement avant mise à jour du statu la nuit    ACSP ACSP 
Jour d’exécution de paiement après mise à jour du statut la nuit   OK   ACSC  ACSC
 KO  RJCT RJCT 

 

Le tableau suivant reprend les valeurs possibles pour le statut de l'initiation de paiement et de la transaction de paiement associée (valeurs pour la version STET v1.4.0.47) suite à une requête d’annulation d’une initiation de paiement :

Etape de traitement  d'une initiation contenant un paiement

Résultat de l'étapeValeur de paymentInformationStatus à l'issue de l'étapeValeur de crediTransferTransaction / transactionStatus à l'issue de l'étape

Avant réception de la demande de paiement

  ACSP PDNG

Contrôle et enregistrement de l’annulation de requête d'initiation

Juste avant la réponse à la requête d’annulation

OK ACSP PDNG
KO ACSP PDNG
Consentement OK ACSP PDNG
KO ACSP PDNG

Appel au service d’annulation du paiement

Juste avant la redirection sur l’application du TPP

OK RJCT (DS02) RJCT (DS02)
KO ACSP PDNG

 

➤ Exemples d’évolution du statut du virement

Exemple 1 pour les banques populaires :

  • Une demande d’initiation de paiement est effectuée un jour ouvré à 16h,
  • Comme la demande arrive avant 17h, le virement est exécuté le même jour (même si la date de règlement est positionnée à J+1) => un SCT de type immédiat est demandé pour exécution à J,
  • La donnée creditTransferTransaction / transactionStatus est positionnée à PDNG dès la validation de l’initialisation du paiement.

Exemple 2 pour les banques populaires :

  • Une demande d’initiation de paiement est effectuée un jour ouvré à 18h,
  • Comme la demande arrive après 17h, le virement n’est pas programmé pour être exécuté le même jour => il est transformé en SCT différé et programmé pour le jour ouvré suivant, i.e. à J+1,
  • La donnée creditTransferTransaction / transactionStatus est positionnée à ACSP dès la validation de l’initialisation du paiement,
  • Le batch journalier de mise à jour du statut des virements qui sont dans un état non terminal est exécuté à 20h00. Ce batch met à l’état PDNG les virements prévu le même jour donc on a :
    • Le jour J de la demande d’initiation du paiement (de sa création à 24h00), le paiement reste à l’état ACSP puisqu’il est programmé pour le jour J+1,
    • A J+1, la donnée creditTransferTransaction / transactionStatus reste à l’état ACSP jusqu’au passage du batch à 20h00. A cette heure-là, la transaction pourrait passer à l’état PDNG
    • Mais comme entre-temps, le virement a été exécuté, il est possible (voire probable) qu’en fait le statut de la transaction soit directement passé de l’état ACSP à l’état ACSC.

 

➤ Restitution de l’IBAN du compte débité

Depuis fin octobre 2020, l’IBAN du compte débité est systématiquement retourné par cette requête, même si cette donnée n’était pas présente dans la requête initiale de demande d’initiation de paiement.

 

➤ Exemple

Requête :

GET /stet/psd2/v1/payment-requests/0000000386-155532845000030007970322

Résultat :

Status code : 200

Body

{
      "paymentRequest": {
            "resourceId": "0000000386-155532845000030007970322",
            "paymentInformationId": "TestBP041501C",
            "creationDateTime": "2019-04-15T12:56:11.122Z",
            "numberOfTransactions": 1,
            "initiatingParty": {
                  "name": "Mon marchand",
                  "postalAddress": {
                        "country": "FR",
                        "addressLine": [
                              "Copé Choux",
                              "44850 Mouzeil"
                        ]
                  },
                  "organisationId": {
                        "identification": "00987654321",
                       "schemeName": "BANK",
                       "issuer": "FR"
                  },
                  "privateId": null
            },
            "paymentTypeInformation": {
                  "instructionPriority": "HIGH",
                  "serviceLevel": "SEPA",
                  "localInstrument": null,
                  "categoryPurpose": "CASH"
            },
            "debtor": {
                  "name": "Gaby Gallet Fourcade",
                  "postalAddress": {
                        "country": "FR",
                        "addressLine": [
                              "25 rue de la Grange aux Loups",
                              "44000 Nantes"
                        ]
                  },
                  "organisationId": null,
                  "privateId": {
                        "identification": "D0999993I0",
                        "schemeName": "COID",
                        "issuer": "FR"
                  }
            },
            "debtorAccount": {
                  "iban": "FR7613807008060732183304150",
                  "other": null
            },
            "debtorAgent": {
                  "bicFi": "CCBPFRPPNAN",
                  "clearingSystemMemberId": null,
                  "name": null,
                  "postalAddress": null
            },
            "beneficiary": {
                  "id": "string",
                  "isTrusted": false,
                  "creditorAgent": {
                        "bicFi": "CCBPFRPPNAN",
                        "clearingSystemMemberId": null,
                        "name": null,
                        "postalAddress": null
                  },
                  "creditor": {
                        "name": "Camille Foucher",
                        "postalAddress": {
                              "country": "FR",
                              "addressLine": [
                                    "23 rue Fructidor",
                                    "44000 Nantes"
                              ]
                        },
                        "organisationId": null,
                        "privateId": {
                              "identification": "D0371101",
                              "schemeName": "COID",
                              "issuer": "FR"
                        }
                   },
                  "creditorAccount": {
                        "iban": "FR7613807000343142150215863",
                        "other": null
                  }
            },
            "ultimateCreditor": null,
            "purpose": null,
            "chargeBearer": "SLEV",
            "paymentInformationStatus": "ACTC",
            "statusReasonInformation": null,
            "fundsAvailability": null,
            "booking": false,
            "requestedExecutionDate": "2019-04-15T12:56:11.122Z",
            "creditTransferTransaction": [
                  {
                        "paymentId": {
                              "resourceId": "0000000386-155532845000130007219679",
                             "instructionId": "TestBP041501C",
                             "endToEndId": "TestBP041501C"
                        },
                        "requestedExecutionDate": null,
                        "endDate": null,
                        "executionRule": null,
                        "frequency": null,
                        "instructedAmount": {
                              "currency": "EUR",
                              "amount": "150"
                        },
                        "beneficiary": null,
                        "ultimateCreditor": null,
                        "regulatoryReportingCodes": [
                              "string"
                        ],
                        "remittanceInformation": [
                              "ma remittance"
                        ],
                        "transactionStatus": null,
                        "statusReasonInformation": null
                  }
            ],
            "supplementaryData": {
                 "acceptedAuthenticationApproach": [
                       "REDIRECT"
                  ],
                  "appliedAuthenticationApproach": "REDIRECT",
                  "scaHint": "noScaExemption",
                  "successfulReportUrl": "https://www.successful.fr",
                 "unsuccessfulReportUrl": "https://www.unsuccessful.fr"
           }
      },
      "_links": null
}

 

➤ Codes erreur

Type d'erreur

Code HTTP
Libellé
Motif
Mauvais access token, problème d'authentification 403 Forbidden
Request resource inconnu 404 Not Found Ressource inconnue
Mauvaise requête ou requête hors périmètre autorisé 405 Method not allowed  
Message générique 500 Internal server error  
Requête en doublon 500 Internal server error error : Problème d'insertion en base de donnée, clé unique dupliquée