Initier un Virement Simplifié
Procédure
La génération d'un lien de paiement Virement Simplifié se fait selon les étapes suivantes :
- Générer un access token
- Créer une session de paiement et rediriger le payeur vers cette URL
- Vérifier le paiement lors du
callbackafin que le statut du paiement et l'ID de session correspondent - Écouter le
webhookpour être notifié des changements de statut de paiement
💡 L'étape 4 est considérée comme facultative, mais comme le moyen de paiement repose principalement sur un modèle d'authentification par redirection, il est important d'utiliser un canal de notification de paiement redondant en cas d'échec de la redirection.
Certaines implémentations utilisent des webhooks comme canal principal de notification de paiement, la redirection servant simplement à afficher le résultat du paiement.
Statuts de paiement
Vous trouverez ci-dessous le détail des statuts de paiement rencontrés en cas de paiement par Virement Simplifié.
💡 Pour faciliter la reproduction de certains scénarios en test, retrouvez ici notre documentation dédiée.
💡 Pour plus d'informations concernant nos statuts de paiement, retrouvez ici notre documentation dédiée.
1. Demander un Access Token
Access TokenLa première étape consiste à authentifier votre application, via l'API access token. Plus d'informations sur notre page dédiée.
Pour utiliser l'API, vous devez d'abord créer un access token de base. Pour ce faire, encodez la chaîne suivante avec un encodeur base64 :
`basic_token` = base64(`app_id`:`app_secret`)
Incluez votre app_id et votre basic_token dans la requête suivante :
POST /oauth/accesstoken HTTP/1.1
Authorization: Basic [basic_token]
Accept: application/json
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&app_id=[app_id]&scope=PISLa réponse attendue est la suivante :
{
"token_type": "Bearer",
"access_token": "eyJhbGciOiJub25lIn0.eyJleHAiOjE1MTQwODA0MjQsI...",
"expires_in": 3600
}Enregistrez le access_token pour la prochaine étape.
2. Create a Payment Session
La deuxième étape consiste à créer une session de paiement pour recevoir l'URL de paiement permettant à l'utilisateur de procéder à son paiement.
Pour ce faire, utilisez la requête API /connect.
POST /pis/v2/connect?redirect_uri=[redirect_uri]&state=[state] HTTP/1.1
Authorization: Bearer [access_token]
Signature: [signature]
Digest: [digest]
Date: [date]
x-request-id: [request_id]
Accept: application/json
Content-Type: application/json
{
"meta": {
"psu_name" : "Julien Lefebre",
"psu_company": "My Business SARL"
"psu_email" : "[email protected]",
"psu_phone" : "09743593535",
"psu_incorporation": "123456789",
"psu_address": {
"street": "rue Marie Stuart",
"number": "2",
"complement": "2nd floor",
"zip": "75002",
"city": "PARIS",
"country": "FR"
}
},
"data": {
"type" : "payments",
"attributes" : {
"amount" : "273",
"currency": "EUR",
"communication" : "B34970692"
}
}
}La réponse attendue est la suivante
{
"meta": {
"session_id": "44f00841780445d4981be9ea2f8aafae",
"url": "https://connect-v2.virementmaitrise.societegenerale.eu/v2/00547d75-243e-48ce-9b0c-12136c076a8a"
}
}Vous obtenez en réponse l'URL de la session de paiement et l'identifiant unique de la session de paiement (session_id), ce qui vous permettra de suivre le paiement transaction via l'API /payments/[session_id].
Après avoir redirigé le payeur vers l'URL de paiement, il pourra sélectionner sa banque et initier le paiement depuis le portail de sa banque. Après l'initiation du paiement, le payeur sera redirigé vers votre URL de redirection (redirect_uri) avec les paramètres suivants :
session_id: identifiant de session de paiementstatus: statut du paiement (voir la section statut pour plus d'informations)provider: banque à laquelle le payeur s'est connectécustomer_id: identifiant du payeur- state : paramètre d'état fourni lors de la génération de la session de paiement
Le paramètre
statevous permet de faire le rapprochement entre votre requête initiale et le paiement réalisé
L'utilisation de l'API /payments/[session_id] se fait de cette manière :
GET pis/v2/payments/[session_id] HTTP/1.1
Accept: application/json
Authorization: Bearer [access_token]
Signature: [signature]
Date: [date]
X-Request-Id: [x-request-id]La réponse attendue sera
{
"meta": {
"session_id": "44f00841780445d4981be9ea2f8aafae",
"status": "payment_created",
"code": 200,
"provider": "cmcifr2a",
"is_accepted": true,
"has_settlement_completed": true,
"type": "PayByBank",
"initial_type": "PayByBank",
"customer_id": "3621eacaccd04fa772638dec70da323c"
},
"data": {
"id": "44f00841780445d4981be9ea2f8aafae",
"type": "payments",
"attributes": {
"amount": "273",
"currency": "EUR",
"communication": "B34970692",
"end_to_end_id": "44f00841780445d4981be9ea2f8aafae",
"execution_date": "2021-02-28",
"payment_scheme": "SEPA",
"transfer_state": "completed",
"bank_account_id": "ee6f357e-e49c-4ff2-954f-b92f237cc800",
"account_type": "external"
}
}
}4. Webhooks
Les webhooks vous permettent d'être notifié d'un événement, tel qu'un changement de statut de paiement.
Plus d'informations dans la documentation dédiée.
Un webhook pour un paiement Virement Simplifié sera au format suivant :
POST /webhook HTTP/1.1
Host: mywebsite.com
Signature: keyId="2dfdcf57-5b2f-4309-846f-913d0b2802cf",algorithm="rsa-sha256",headers="date digest x-request-id",signature="h0V0SUbjRhLEP/MiYo0Mgs1N17EuCEmKyQrDjxysc7iSiFXTjvY6qVEoaiRkzB8ZI0J39gGwOtTXN9CJPVRbhEHhi9Z9rQvM33FkygXvvx8BwM76fSTQ2/BSZWx04CjbPv/XUVusnkKVr3W6p+Vn073hAuJn1nKCvDOyl+QnDtstkzT+UacVzDA9L9nyPbbaPQHJobaZuG8TjhnI+Y0PZxneke6OU6fcdPT0uwkEamDOOExcMryHIX1iH5iiPMvLoVA8acqvvMSDYar0rlEQ2J1M4dcowWT8FxLo6C8uqvJIaBYm7Ze0RNJOwY0UBImCVDIuQLJuBjPwjQT5GjTQlg==
Digest: SHA-256=wOtTXN9CJPVRbhEHhi9Z9rQvM33FkygXvvx8BwM76fS
Date: Mon, 08 Jun 2020 23:11:23 GMT
X-Request-ID: 88c414df-6895-48db-8ef3-1fd1ce4272c6
Content-Type: application/x-www-form-urlencoded
session_id=b2bca2bcd3b64a32a7da0766df59a7d2&status=payment_created&customer_id=1ef74051a77673de120820fb370dc382&provider=provider&state=thisisastateUpdated about 2 months ago
