Ce contenu a été traduit par une intelligence artificielle. Si vous repérez une erreur, merci de nous le signaler pour nous aider à améliorer notre support. En cas de doute, la version originale en anglais fait foi.
Le chèque demeure un moyen de paiement courant en France, et notre API prend en charge son traitement via un échange synchrone s'appuyant sur les données du lecteur de chèques local fournies par le POS. Veuillez contacter notre équipe de support client si vous souhaitez activer cette extension de service pour le traitement des chèques.
1. Flux de travail (Workflow)
Le flux de paiement par chèque est un échange synchrone où la vérification et le résultat final sont gérés par le terminal.
Requête : Le POS envoie une requête
Payment Requestcontenant les détails du chèque (Numéro de chèque et clé RLMC).Traitement : Le POI (terminal) traite la transaction par chèque en communiquant avec le serveur backend pour interroger les partenaires (Verifiance, etc.) pendant que le POS reste en attente.
Résultat final : Le POI renvoie une
Payment Responsecontenant les informations supplémentaires relatives au chèque.-
Décision du POS : Sur la base de ces informations supplémentaires, le POS doit prendre sa décision finale :
Accepter le chèque : Le POS enregistre la transaction.
Refuser le chèque : Le POS déclenche une annulation de chèque (Cheques Reversal).
2. Requête de paiement par chèque (Cheques Request)
Une requête pour chèque est traitée comme une demande de paiement standard, à laquelle il faut ajouter un élément supplémentaire PaymentData dans le corps de la requête.
En-tête (Header)
L'objet standard SaleToPOIRequest.MessageHeader, avec le champ MessageClass défini sur Service et MessageCategory sur Payment.
Corps (Body)
Pour initier avec succès une PaymentRequest pour les chèques, le corps doit contenir les données standard attendues pour une demande de paiement. De plus, vous devez renseigner l'objet dédié : PaymentData.PaymentInstrumentData.
| Component Object | Required | Type | Description |
|---|---|---|---|
CheckData.CheckCardNumber |
Yes | String | RLMC key, which can be read on Cheque |
CheckData.TrackData.TrackValue |
Yes | String | Raw cheque number to convert into a magnetic stripe track data format (e.g., from |
PaymentInstrumentType.IdentificationType |
Yes | String | static data to set to "Check" |
Exemple
ChequePayment request example
Start a Cheque payment on terminal, requires providing a Track and RLMC data to perform transaction
{
"MessageHeader": {
"MessageCategory": "Payment",
"MessageClass": "Service",
"MessageType": "Request",
"POIID": "POI_01",
"ProtocolVersion": "3.1",
"SaleID": "POS_01",
"ServiceID": "102"
},
"PaymentRequest": {
"PaymentData": {
"PaymentInstrumentData": [
{
"CheckData": [
{
"CheckCardNumber": [
"09"
],
"TrackData": [
{
"TrackValue": "D0015468D800000000909F000000000000B"
}
]
}
],
"PaymentInstrumentType": "Check"
}
]
},
"PaymentTransaction": {
"AmountsReq": {
"Currency": "EUR",
"RequestedAmount": 10.00
}
},
"SaleData": {
"OperatorID": "Cashier_01",
"SaleReferenceID": "8",
"SaleTransactionID": {
"TimeStamp": "2024-08-09T07:38:40Z",
"TransactionID": "123"
}
}
}
}
Review the full schema on the API specification page for required fields.
Comment transformer Track 2 Data
| Component | Raw Value | Transformed Value | Purpose |
|---|---|---|---|
| Start Sentinel | (Absent) | D |
The character 'D' (or sometimes ';') marks the beginning of the Track 2 data. |
| Primary Account Data | 0015468800000000909 |
0015468800000000909 |
This sequence is typically the PAN (Primary Account Number) or Check Card Number. |
| Field Separator (Delimiter) | (Absent) | D |
The character 'D' separates the card number from the expiration date and service code block. |
| Expiration/Service Code | (Partial) | 80000000 |
These digits usually encode the Expiry Date and the Service Code (which defines allowed usage). |
| Padding/End of Data | 0000000000000 |
F000000000000 |
The 'F' or '0's are used as padding or as the End Sentinel to fill the remaining length of the track. |
| End Sentinel | (Absent) | B |
The character 'B' (or sometimes '?') marks the end of the data string on the track. |
2. Cheques Response
Le MessageHeader que vous recevez dans la réponse reprend les valeurs que vous avez fournies dans la requête. La seule exception est le MessageType, qui est « Response ».
Corps (Body)
Dans le cadre de la réponse, nous recevons les informations standard liées à un paiement ainsi que des données supplémentaires relatives au mode de paiement par chèque utilisé. Référez-vous au flux d'intégration POS standard pour gérer ces informations.
Pour les chèques, nous recevons la réponse du serveur dans le champ MarketpayPaymentExtensions.issuerOption. Les données brutes transmises sont encodées en Base64.
ChequePayment Response example
{
"MessageHeader": {
"MessageCategory": "Payment",
"MessageClass": "Service",
"MessageType": "Response",
"POIID": "PayOnSite",
"ProtocolVersion": "3.1",
"SaleID": "POS_01",
"ServiceID": "20"
},
"PaymentResponse": {
"PaymentResult": {
"AmountsResp": {
"AuthorizedAmount": "10.00",
"Currency": "EUR"
},
"PaymentAcquirerData": {
"AcquirerPOIID": "cheque",
"MerchantID": "Test Cheque"
},
"PaymentInstrumentData": {
"CheckData": [
{
"TrackData": [
{
"TrackValue": "D0015455D800000000909F************B"
}
]
}
],
"PaymentInstrumentType": "Check"
}
},
"POIData": {
"POITransactionID": {
"TimeStamp": "2025-10-14T11:39:10.000",
"TransactionID": "0"
}
},
"Response": {
"AdditionalResponse": "Refused operation by server Currency not managed",
"Result": "Failure"
},
"SaleData": {
"SaleTransactionID": {
"TimeStamp": "2025-10-14T11:39:10.000",
"TransactionID": "0"
}
}
}
}
Review the full schema on the API specification page for required fields.
issuerOption decoding
Exemple d'une réponse avec un encodage Base64
issuerOption example
Base64 encoded: IyMjIyA0LiBOZXB0aW5nIFN1Y2Nlc3MgUGF5bWVudCBSZXNwb25zZToKCmBgYApTSUdOQVRVUkVfUkVRVUlSRUQgPSAwCkNVUlJFTkNZX0ZSQUNUSU9OID0gMgpFWFRFTkRFRF9SRVNVTFRfVEVYVCA9ICIiCk1BU0tFRF9BQ0NPVU5UX0lERU5USUZJRVIgPSAiRDAwMTU0NTVEODAwMDAwMDAwOTA5RioqKioqKioqKioqKkIiCkxPQ0FMX1RJTUVTVEFNUCA9IDIwMjUtMTAtMTRUMTE6Mzk6MTAuMDAwCk1FU1NBR0VfSUQgPSAiMCIKTUVTU0FHRV9UWVBFID0gIkRlYml0IgpNRVNTQUdFX05BTUUgPSAiUG9zUmVzcG9uc2UiCkVYVEVOREVEX1JFU1VMVCA9ICIiCk1FUkNIQU5UX1RSU19JRCA9ICIxIgpBUFBMSUNBVElPTl9OQU1FID0gImNoZXF1ZSIKT0ZGTElORV9UUlNfQ09VTlQgPSAiMCIKR0xPQkFMX1NUQVRVUyA9ICIxIgpTVEFOID0gMQpDVVJSRU5DWV9DT0RFID0gOTc4ClRFU1RfSU5ESUNBVE9SID0gMApPRkZMSU5FX1RSU19CTE9DS0VEID0gMApDVVJSRU5DWV9BTFBIQSA9IEVVUgpNRVJDSEFOVF9MQUJFTCA9IFRlc3QgQ2hlcXVlCkVOVFJZX01PREUgPSAiMTYiClNDSEVNRSA9IENIRVFVRQpQT1NfRklOQUxfQU1PVU5UID0gMTAwMApDSFFfQ1BUMSA9ICIwMSIKQ0hRX0NQVDIgPSAiMDMiCkNIUV9DUFQzID0gIjA1IgpDSFFfQkFOSz0gImJhbmtOYW1lIgpDSFFfQ09MT1IgPSAiQkxBTkMi
Decoded:
#### 4. Nepting Success Payment Response: ``` SIGNATURE_REQUIRED = 0 CURRENCY_FRACTION = 2 EXTENDED_RESULT_TEXT = "" MASKED_ACCOUNT_IDENTIFIER = "D0015455D800000000909F************B" LOCAL_TIMESTAMP = 2025-10-14T11:39:10.000 MESSAGE_ID = "0" MESSAGE_TYPE = "Debit" MESSAGE_NAME = "PosResponse" EXTENDED_RESULT = "" MERCHANT_TRS_ID = "1" APPLICATION_NAME = "cheque" OFFLINE_TRS_COUNT = "0" GLOBAL_STATUS = "1" STAN = 1 CURRENCY_CODE = 978 TEST_INDICATOR = 0 OFFLINE_TRS_BLOCKED = 0 CURRENCY_ALPHA = EUR MERCHANT_LABEL = Test Cheque ENTRY_MODE = "16" SCHEME = CHEQUE POS_FINAL_AMOUNT = 1000 CHQ_CPT1 = "01" CHQ_CPT2 = "03" CHQ_CPT3 = "05" CHQ_BANK= "bankName" CHQ_COLOR = "BLANC"
Dans la réponse, vous trouverez les informations clefs pour accepter ou refuser le chèque au niveau de la caisse (POS).
| Component | Purpose |
|---|---|
| CHQ_CPT1 | Cheque Counter 1 |
| CHQ_CPT2 | Cheque Counter 2 |
| CHQ_CPT3 | Cheque Counter 3 |
| CHQ_BANK | Bank Name of the cheque returned by server |
| CHQ_COLOC | Color code |
| CHQ_CPT2 | This sequence is typically the PAN (Primary Account Number) or Check Card Number. |
Comment interpréter la réponse
Source: Verifiance
3. Annulation
Une annulation de chèque (Cheques Reversal) est traitée comme une extourne de paiement standard, à laquelle il faut ajouter un élément « PaymentData » supplémentaire dans le corps de la requête.
En-tête (Header)
L'objet standard SaleToPOIRequest.MessageHeader, avec le champ MessageClass défini sur Service et MessageCategory sur Reversal.
Corps (Body)
Pour initier avec succès une PaymentRequest pour les chèques, le corps doit contenir les données standard attendues pour une demande de paiement. De plus, vous devez renseigner l'objet dédié : PaymentData.PaymentInstrumentData.
Cheque Reversal Request example JSON
{
"MessageHeader": {
"MessageCategory": "Reversal",
"MessageClass": "Service",
"MessageType": "Request",
"POIID": "POI_01",
"ProtocolVersion": "3.1",
"SaleID": "POS_01",
"ServiceID": "823"
},
"ReversalRequest": {
"Currency": "EUR",
"MarketpayPaymentExtensions": {
"CheckData": {
"CheckCardNumber": [
"09"
],
"TrackData": [
{
"TrackValue": "D0015468D800000000909F000000000000B"
}
]
},
"PaymentInstrumentType": "Check"
},
"OriginalPOITransaction": {
"POITransactionID": {
"TimeStamp": "2025-11-28T14:12:59.6+01:00",
"TransactionID": "9991"
}
},
"ReversalReason": "MerchantCancel",
"ReversedAmount": "11.99",
"SaleData": {
"OperatorID": "Cashier_01",
"SaleTransactionID": {
"TimeStamp": "2025-11-28T14:12:59.6+01:00",
"TransactionID": "9991"
}
}
}
}
Review the full schema on the API specification page for required fields.