Mazooma
Mazooma est un mode de paiement en ligne aux États-Unis qui traite les paiements (dépôts) et les retraits via le réseau ACH (automated clearing house, chambre de compensation automatisée) basé aux États-Unis. L’API Paiements Paysafe prend en charge Mazooma en tant qu’instrument de paiement.
Exigences de configuration
Pour que Paysafe puisse créer un compte de test dans un environnement de bac à sable et de production, contactez Mazooma et obtenez les informations suivantes :
- Identifiant du marchand
Identifiant du site du marchand
Clé secrète du marchand
Exigences en matière de certification
Chaque marchand doit passer par un processus de certification pour accepter Mazooma comme mode de paiement. Pour en savoir plus, voire le site des développeurs Mazooma.
Types de transaction
Paysafe prend en charge les types de transactions suivants :
- Paiements - pour transférer de l’argent du compte bancaire du client vers le compte du marchand. Après un paiement réussi, le marchand crédite le portefeuille du client.
- Retraits - pour transférer de l’argent du compte du marchand au compte bancaire du client.
Paiements
Lorsque vous souhaitez traiter une requête de paiement, procédez comme suit :
Faites un appel de vérification
L’appel de vérification est utilisé pour récupérer les comptes bancaires sauvegardés de l’utilisateur du côté Mazooma.
- Créez un Payment Handle avec le paramètre transactionType défini sur VERIFICATION et le paramètre paymentType défini sur MAZOOMA.
- POST: paymenthub/v1/paymenthandles
- Vous recevrez "paymentHandleToken" dans la réponse. La réponse doit comporter l’état PAYABLE.
- Utilisez le « paymentHandleToken » pour traiter l’API Vérification.
- POST: paymenthub/v1/verifications
- Dans la réponse de l’API Vérification, vous verrez l’état COMPLETED et recevrez un bankToken (mazooma.achBankAccounts.paymentHandleToken) pour chaque compte.
- Si aucun compte bancaire n’est ajouté dans Mazooma, vous verrez l’état FAILED.
- Stockez le bankToken de votre côté
Le BankToken (mazooma.achBankAccounts.paymentHandleToken) est un identifiant unique pour chaque compte bancaire de l’utilisateur et reste le même. Le BankToken est ensuite utilisé pour créer un jeton de paiement à usage unique qui sert à effectuer le paiement pour chaque transaction unique. À Mazooma, les banques enregistrées sont appelées UPO (User Payment Option). Dans les API Paysafe, la banque ou l’UPO sauvegardée est appelée bankToken (mazooma.achBankAccounts.paymentHandleToken).
Effectuer un appel de paiement
Utilisateur avec un bankToken
- Créez un gestionnaire de paiement avec le paramètre transactionType défini sur PAYMENT et le paramètre paymentType défini sur MAZOOMA.
- POST: paymenthub/v1/paymenthandles
- Puisque le client a un bankToken :
- Transmettez le consumerid et bankToken dans l’objet mazooma.
- Vous recevrez "paymentHandleToken" dans la réponse. La réponse doit comporter l’état PAYABLE.
- Utilisez le jeton paymentHandleToken pour traiter la requête de paiement via l’API Paiements à l’aide de la clé privée. Vous devez lancer une requête POST vers le point de terminaison :
- POST: paymenthub/v1/payments
Utilisateur sans bankToken
- Créez un gestionnaire de paiement avec le paramètre transactionType défini sur PAYMENT et le paramètre paymentType défini sur MAZOOMA.
- Post : paymenthub/v1/paymenthandles
- Comme le client doit effectuer le paiement en sélectionnant le compte bancaire sur la page Plaid, Paysafe renvoie une réponse contenant le message suivant :
- Le paramètre action est défini sur REDIRECT
- Un lien redirect_payment renvoie à l’URL de redirection de Plaid.
- Redirigez le client vers l’URL de redirection Plaid.
- Lorsque le client est redirigé vers le lien de redirection, l’état du gestionnaire de paiement devient PAYABLE et vous serez informé par un webhook de l’événement PAYMENT_HANDLE_PAYABLE.
- Sur la page de redirection, le client sélectionne la banque, fournit ses authentifiants et effectue la transaction.
- Lorsque le client est redirigé vers le lien de redirection, l’état du gestionnaire de paiement devient PAYABLE et vous serez informé par un webhook de l’événement PAYMENT_HANDLE_PAYABLE.
- Utilisez le jeton paymentHandleToken pour traiter la requête de paiement via l’API Paiements à l’aide de la clé privée. Vous devez lancer une requête POST vers le point de terminaison :
- POST: paymenthub/v1/payments
- Vous recevrez un bankToken (mazooma.achBankAccounts.paymentHandleToken) dans la réponse. La réponse doit comporter l’état COMPLETED.
- Le bankToken peut être utilisé dans le flux "User with bankToken".
API à utiliser
Retrait
Lorsque vous souhaitez traiter une requête de retrait, vous devez procéder comme suit :
Faites un appel de vérification
L’appel de vérification est utilisé pour récupérer les comptes bancaires sauvegardés de l’utilisateur du côté Mazooma.
- Créez un Payment Handle avec le paramètre transactionType défini sur VERIFICATION et le paramètre paymentType défini sur MAZOOMA.
- POST: paymenthub/v1/paymenthandles
- Vous recevrez "paymentHandleToken" dans la réponse. La réponse doit comporter l’état PAYABLE.
- Utilisez le « paymentHandleToken » pour traiter l’API Vérification.
- POST: paymenthub/v1/verifications
- Dans la réponse de l’API Vérification, vous verrez l’état COMPLETED et recevrez un bankToken (mazooma.achBankAccounts.paymentHandleToken) pour chaque compte.
- Si aucun compte bancaire n’est ajouté dans Mazooma, vous verrez l’état FAILED.
- Stockez le bankToken de votre côté.
Le BankToken (mazooma.achBankAccounts.paymentHandleToken) est un identifiant unique pour chaque compte bancaire de l’utilisateur et reste le même. Le BankToken est ensuite utilisé pour créer un jeton de paiement à usage unique qui sert à effectuer le paiement pour chaque transaction unique. À Mazooma, les banques enregistrées sont appelées UPO (User Payment Option). Dans les API Paysafe, la banque ou l’UPO sauvegardée est appelée bankToken (mazooma.achBankAccounts.paymentHandleToken).
Effectuer un appel de retrait
Utilisateur avec un bankToken
- Créez un gestionnaire de paiement avec le paramètre transactionType défini sur STANDALOE_CREDIT et le paramètre paymentType défini sur MAZOOMA.
- POST: paymenthub/v1/paymenthandles
- Puisque le client a un bankToken :
- Transmettez le consumerid et bankToken dans l’objet mazooma.
- Vous recevrez "paymentHandleToken" dans la réponse. La réponse doit comporter l’état PAYABLE.
- Utilisez le paymentHandleToken renvoyé dans la réponse pour traiter la requête de retrait via l’API Paiements à l’aide de la clé privée. Vous devez lancer une requête POST vers le point de terminaison :
- POST: paymenthub/v1/standalonecredits
API à utiliser
Supprimer un compte bancaire
Effectuez une requête de suppression de compte bancaire en utilisant la méthode HTTP DELETE.
https://{{host}}:{{port}}/paymenthub/v1/registrations/mazooma.registrationId/achbankaccounts/mazooma.achBankAccounts.id
Vous verrez "mazooma.registrationId" et "mazooma.achBankAccounts.id" dans la réponse de l’API Vérification.
Supprimez une réponse concernant un compte bancaire
{ "id": "e1915843-bc19-48e9-8ac5-3eed98da72", "paymentHandleToken": "BARmCEZM0j1ldnMY", "bankName": "CHASE" }
API Contrats
Vous devez transmettre l’objet Mazooma dans toutes les requêtes du gestionnaire de paiement.
consumerId: il s’agit d’un numéro d’identification unique pour chaque client.
Exemple de requête de vérification de gestion de paiement
{
"merchantRefNum": "SriTest-1644827808",
transactionType:"transactionType": "VERIFICATION",
"paymentType": "MAZOOMA",
"amount": 100,
"currencyCode": "USD",
"dupCheck": true,
"liveMode": true,
"mazooma": {
"consumerId": "PP_100222"
},
"profile": {
"firstName": "ALBERTA",
"lastName": "BOBBETHCHARLESON",
"email": "accountholder0@example.com",
"dateOfBirth": {
"day": "23",
"month": "12",
"year": "1990"
},
"phone": 1234567891
},
"billingDetails": {
"street1": "Queen Street West",
"street2": "Queen Street",
"city": "Imphal",
"state": "NY",
"country": "US",
"zip": "14236"
},
"returnLinks": [
{
"rel": "default",
"href": "http://www.amazon.ca"
},
{
"rel": "on_failed",
"href": "http://www.costco.ca"
},
{
"rel": "on_cancelled",
"href": "http://www.bestbuy.ca"
}
]
}
Exemple de réponse lors d’une vérification de gestion de paiement
{
"id": "826dc476-0feb-417f-9f26-0f1ffe4e6aef",
"paymentType": "MAZOOMA",
"paymentHandleToken": "PHfS2VUcFdlzUOLo",
"merchantRefNum": "SriTest-1644827349",
"currencyCode": "USD",
"txnTime": "2022-02-14T08:29:09Z",
"billingDetails": {
"street": "Queen Street West",
"street2": "Queen Street",
"city": "Imphal",
"zip": "14236",
"state": "NY",
"country": "US"
},
"customerIp": "10.152.253.42",
"status": "PAYABLE",
"liveMode": false,
"simulator": "EXTERNAL",
"action": "NONE",
"amount": 100,
"timeToLiveSeconds": 899,
"gatewayResponse": {
"processor": "MAZOOMA"
},
"returnLinks": [
{
"rel": "on_cancelled",
"href": "http://www.bestbuy.ca"
},
{
"rel": "on_failed",
"href": "http://www.costco.ca"
},
{
"rel": "default",
"href": "http://www.amazon.ca"
}
],
transactionType:"transactionType": "VERIFICATION",
"updatedTime": "2022-02-14T08:29:09Z",
"statusTime": "2022-02-14T08:29:09Z",
"mazooma": {
"consumerId": "PP_100222"
},
"profile": {
"firstName": "ALBERTA",
"lastName": "BOBBETHCHARLESON",
"email": "accountholder0@example.com",
"dateOfBirth": {
"day": 23,
"month": 12,
"year": 1990
},
"phone": "1234567890"
}
}
Exemple de requête de vérification
{
"paymentHandleToken": "PH7qGLyvMxTbwyeY",
"merchantRefNum": "mer_ref_1644827397",
"amount": 100,
"customerIp": "172.10.12.64",
"dupCheck": false,
"description": "Winning payment from Loto 649"
}
Exemple de réponse à une vérification
{
"id": "dc04b025-796a-4538-a738-a2ff0b83a11e",
"paymentType": "MAZOOMA",
"merchantRefNum": "SriTest-1644827349",
"currencyCode": "USD",
"txnTime": "2022-02-14T08:29:27Z",
"billingDetails": {
"street1": "Queen Street West",
"street2": "Queen Street",
"city": "Imphal",
"zip": "14236",
"state": "NY",
"country": "US"
},
"status": "COMPLETED",
"amount": 100,
"updatedTime": "2022-02-14T08:29:28Z",
"statusTime": "2022-02-14T08:29:28Z",
"liveMode": false,
"simulator": "EXTERNAL",
"gatewayResponse": {
"processor": "MAZOOMA"
},
"mazooma": {
"consumerId": "PP_100222",
"achBankAccounts": [
{
"id": "4a641804-be44-41b9-966d-8075035fa531",
"lastDigits": "99",
"bankName": "CHASE",
"paymentToken": "BAUEQlIPBN4XDpzr",
"allowedTypes": [
"PAYMENT",
"STANDALONE_CREDIT"
]
},
{
"id": "8bc1f585-2e60-4d61-9330-a1b6bf9d0e6c",
"lastDigits": "99",
"bankName": "CHASE",
"paymentToken": "BA1v8EaBkkVOKIuE",
"allowedTypes": [
"PAYMENT",
"STANDALONE_CREDIT"
]
},
{
"id": "af92bcfb-c338-45e9-83ed-e4bf87858727",
"lastDigits": "99",
"bankName": "CHASE",
"paymentToken": "BARKbHKW2qOLdstG",
"allowedTypes": [
"PAYMENT",
"STANDALONE_CREDIT"
]
}
],
"registrationId": "b0a7ae1b-1ffc-41ae-89d4-b70be1087642"
},
"profile": {
"firstName": "ALBERTA",
"lastName": "BOBBETHCHARLESON",
"email": "accountholder0@example.com",
"dateOfBirth": {
"day": 23,
"month": 12,
"year": 1990
},
"phone": "1234567890"
}
}
"allowedTypes": [ "PAYMENT", "STANDALONE_CREDIT" ] Cela signifie que le bankToken peut être utilisé à la fois pour PAYMENT/Deposit et STANDALONE_CREDIT/Withdrawal
Exemple de requête de gestion de paiement sans bankToken
{
"merchantRefNum": "66ba92be-630c-4762-a89f-7cceefb88b9d",
transactionType:"transactionType": "PAYMENT",
"paymentType": "MAZOOMA",
"amount": 100,
"currencyCode": "USD",
"customerIp": "172.0.0.1",
"mazooma": {
"consumerId": "PP_100222"
},
"profile": {
"firstName": "ALBERTA",
"lastName": "BOBBETHCHARLESON",
"email": "accountholder0@example.com",
"dateOfBirth": {
"day": "23",
"month": "12",
"year": "1990"
},
"phone": 1234567891
},
"billingDetails": {
"street1": "Queen Street West",
"street2": "Queen Street",
"city": "Imphal",
"state": "NY",
"country": "US",
"zip": "14236"
},
"merchantDescriptor": {
"dynamicDescriptor": "OnlineStore",
"phone": "12345678"
},
"returnLinks": [
{
"rel": "default",
"href": "http://www.amazon.ca"
},
{
"rel": "on_failed",
"href": "http://www.costco.ca"
},
{
"rel": "on_cancelled",
"href": "http://www.bestbuy.ca"
}
]
}
Exemple de requête de gestion de paiement avec bankToken
{
"merchantRefNum": "ba7dd492-aac3-4147-9857-d98aa062a4ab",
transactionType:"transactionType": "PAYMENT",
"paymentType": "MAZOOMA",
"amount": 100,
"currencyCode": "USD",
"customerIp": "172.0.0.1",
"mazooma": {
"consumerId": "KK_213",
"ach": {
"paymentHandleToken": "BAru0JIKuktMcLsy"
}
},
"profile": {
"firstName": "ALBERTA",
"lastName": "BOBBETHCHARLESON",
"email": "accountholder0@example.com",
"dateOfBirth": {
"day": "23",
"month": "12",
"year": "1990"
},
"phone": 1234567891
},
"billingDetails": {
"nickName": "Home",
"street": "Queen Street West",
"street2": "Queen Street",
"city": "Imphal",
"state": "NY",
"country": "US",
"zip": "14236"
},
"merchantDescriptor": {
"dynamicDescriptor": "OnlineStore",
"phone": "12345678"
},
"returnLinks": [
{
"rel": "default",
"href": "http://www.amazon.ca"
},
{
"rel": "on_failed",
"href": "http://www.costco.ca"
},
{
"rel": "on_cancelled",
"href": "http://www.bestbuy.ca"
}
]
}
Exemple de réponse du gestionnaire de paiement
{
"id": "cf005f03-8c31-4afb-884b-20ce9cb10190",
"paymentType": "PAYSAFECASH",
"paymentHandleToken": "PHtxnH0z99GXgc0Z",
"merchantRefNum": "ba4d021c-af45-4a64-b38a-c08f231e3825",
"currencyCode": "USD",
"txnTime": "2022-05-27T11:49:01Z",
"billingDetails": {
"street": "100 Queen",
"street2": "Unit 201",
"city": "New York",
"zip":"M5H2N2","zip": "M5H 2N2","zip": "M5H 2N2",
"country": "US"
},
"customerIp": "172.0.0.1",
"status": "INITIATED",
"links": [
{
"rel": "redirect_payment",
"href": "https://api.test.paysafe.com/alternatepayments/v1/redirect?accountId=1002453740&paymentHandleId=cf005f03-8c31-4afb-884b-20ce9cb10190&token=eyJhbGciOiJIUzI1NiJ9.eyJhY2QiOiIxMDAyNDUzNzQwIiwicHlkIjoiY2YwMDVmMDMtOGMzMS00YWZiLTg4NGItMjBjZTljYjEwMTkwIiwiZXhwIjoxNjUzNjUzOTQxfQ.NO-FSBVgbI8L5fGR5o9RI-Z5DhckyRmEFOGJMsRZuiU"
}
],
"liveMode": false,
"simulator": "EXTERNAL",
"usage": "SINGLE_USE",
"action": "REDIRECT",
"executionMode": "SYNCHRONOUS",
"amount": 1000,
"merchantDescriptor": {
"dynamicDescriptor": "Test Paysafe",
"phone": "12345678"
},
"timeToLiveSeconds": 899,
"gatewayResponse": {
"processor": "SKRILL_QCO",
"sid": "a7f3fbc00a31bf85f82a0fd10df7979c"
},
"returnLinks": [
{
"rel": "default",
"href": "https://usgaminggamblig.com/payment/default"
},
{
"rel": "on_completed",
"href": "https://codepen.io/warrendunlop/full/YmVKzm"
},
{
"rel": "on_cancelled",
"href": "https://usgaminggamblig.com/payment/return/failed"
}
],
transactionType:"transactionType": "PAYMENT",
"gatewayReconciliationId": "a5dbbd41-56da-4770-9e61-d2c1cda514eb",
"updatedTime": "2022-05-27T11:49:01Z",
"statusTime": "2022-05-27T11:49:01Z",
"paysafecash": {
"consumerId": "parag.p@test.com"
},
"profile": {
"firstName": "Parag",
"lastName": "P"
}
}
Exemple de requête de paiement
{
"merchantRefNum": "1644905922",
"amount": "100",
"currencyCode": "USD",
"dupCheck": true,
"settleWithAuth": true,
"paymentHandleToken": "PHD7rsXBgzRbllak",
"customerIp": "172.0.0.1",
"description": "Magazine subscription"
}
Exemple de réponse à un paiement
{
"id": "42da1422-1575-4c35-a36e-b9afd9c6abbe",
"paymentType": "MAZOOMA",
"paymentHandleToken": "PHD7rsXBgzRbllak",
"merchantRefNum": "1644905916",
"currencyCode": "USD",
"settleWithAuth": true,
"dupCheck": true,
"txnTime": "2022-02-15T06:17:38Z",
"billingDetails": {
"street1": "Queen Street West",
"street2": "Queen Street",
"city": "Imphal",
"zip": "14236",
"state": "NY",
"country": "US"
},
"status": "COMPLETED",
"gatewayReconciliationId": "d4474b2c-3ad5-4d2c-bf28-79d0259e6055",
"amount": 100,
"consumerIp": "172.0.0.1",
"liveMode": false,
"simulator": "EXTERNAL",
"updatedTime": "2022-02-15T06:18:37Z",
"statusTime": "2022-02-15T06:18:37Z",
"gatewayResponse": {
"orderId": "305887918",
"errCode": "0",
"id": "d4474b2c-3ad5-4d2c-bf28-79d0259e6055",
"internalRequestId": "394715428",
"processor": "MAZOOMA",
"status": "SUCCESS"
},
"availableToSettle": 0,
"profile": {
"firstName": "ALBERTA",
"lastName": "BOBBETHCHARLESON",
"email": "accountholder0@example.com",
"dateOfBirth": {
"day": 23,
"month": 12,
"year": 1990
},
"phone": "1234567890"
},
"settlements": {
"amount": 100,
"txnTime": "2022-02-15T06:17:38.000+0000",
"merchantRefNum": "1644905916",
"id": "42da1422-1575-4c35-a36e-b9afd9c6abbe",
"status": "COMPLETED"
}
}
Retrait
Exemple de requête de gestion de paiement avec bankToken
{
"merchantRefNum": "mer_ref_1644906040",
transactionType:"transactionType": "STANDALONE_CREDIT",
"paymentType": "MAZOOMA",
"amount": 100,
"currencyCode": "USD",
"customerIp": "172.0.0.1",
"mazooma": {
"consumerId": "PP_100222",
"ach": {
"paymentHandleToken": "BAFtcP4i8r0udbEK"
}
},
"profile": {
"firstName": "ALBERTA",
"lastName": "BOBBETHCHARLESON",
"email": "accountholder0@example.com",
"dateOfBirth": {
"day": "23",
"month": "12",
"year": "1990"
},
"phone": 1234567891
},
"billingDetails": {
"street1": "Queen Street West",
"street2": "Queen Street",
"city": "Imphal",
"state": "NY",
"country": "US",
"zip": "14236"
},
"merchantDescriptor": {
"dynamicDescriptor": "OnlineStore"
},
"returnLinks": [
{
"rel": "default",
"href": "http://www.amazon.ca"
},
{
"rel": "on_failed",
"href": "http://www.costco.ca"
},
{
"rel": "on_cancelled",
"href": "http://www.bestbuy.ca"
}
]
}
Exemple de réponse du gestionnaire de paiement
{
"id": "5c71dce8-61ed-4672-83ae-878293a17c71",
"paymentType": "MAZOOMA",
"paymentHandleToken": "PHWKPdpJr8g7lMwi",
"merchantRefNum": "mer_ref_1644906067",
"currencyCode": "USD",
"txnTime": "2022-02-15T06:21:07Z",
"billingDetails": {
"street": "Queen Street West",
"street2": "Queen Street",
"city": "Imphal",
"zip": "14236",
"state": "NY",
"country": "US"
},
"customerIp": "172.0.0.1",
"status": "PAYABLE",
"liveMode": false,
"simulator": "EXTERNAL",
"action": "NONE",
"amount": 100,
"merchantDescriptor": {
"dynamicDescriptor": "OnlineStore"
},
"timeToLiveSeconds": 899,
"gatewayResponse": {
"processor": "MAZOOMA"
},
"returnLinks": [
{
"rel": "on_failed",
"href": "http://www.costco.ca"
},
{
"rel": "on_cancelled",
"href": "http://www.bestbuy.ca"
},
{
"rel": "default",
"href": "http://www.amazon.ca"
}
],
transactionType:"transactionType": "STANDALONE_CREDIT",
"updatedTime": "2022-02-15T06:21:08Z",
"statusTime": "2022-02-15T06:21:08Z",
"mazooma": {
"consumerId": "PP_100222",
"ach": {
"paymentHandleToken": "BAFtcP4i8r0udbEK"
}
},
"_links": {
"self": {
"href": "http://paysafe-psp-alternatepayments-mazooma.mtl-qa.svc.cluster.local/v1/accounts/9becfecc-e69a-4e38-87dc-36e1d5efbcd1/paymenttypes/mazooma/paymenthandles/b61baa59-0127-4baf-9183-ecf66f150e9b"
}
},
"profile": {
"firstName": "ALBERTA",
"lastName": "BOBBETHCHARLESON",
"email": "accountholder0@example.com",
"dateOfBirth": {
"day": 23,
"month": 12,
"year": 1990
},
"phone": "1234567890"
}
}
Exemple de requête de retrait
{
"merchantRefNum": "mer_ref_1644906067",
"amount": "100",
"currencyCode": "USD",
"dupCheck": true,
"settleWithAuth": true,
"paymentHandleToken": "PHWKPdpJr8g7lMwi",
"customerIp": "172.0.0.1",
"description": "Magazine subscription"
}
Exemple de réponse pour retrait
{
"id": "fa19cd7c-2a41-4d42-adc2-5c9115d7d191",
"paymentType": "MAZOOMA",
"paymentHandleToken": "PHWKPdpJr8g7lMwi",
"merchantRefNum": "mer_ref_1644906067",
"currencyCode": "USD",
"dupCheck": true,
"txnTime": "2022-02-15T06:21:54Z",
"billingDetails": {
"street1": "Queen Street West",
"street2": "Queen Street",
"city": "Imphal",
"zip": "14236",
"state": "NY",
"country": "US"
},
"customerIp": "172.0.0.1",
"status": "COMPLETED",
"gatewayReconciliationId": "49514d38-3741-43f2-94d9-24bfb7b57170",
"amount": 100,
"returnLinks": [
{
"rel": "default",
"href": "http://www.amazon.ca"
},
{
"rel": "on_failed",
"href": "http://www.costco.ca"
},
{
"rel": "on_cancelled",
"href": "http://www.bestbuy.ca"
}
],
"liveMode": false,
"simulator": "EXTERNAL",
"updatedTime": "2022-02-15T06:21:58Z",
"statusTime": "2022-02-15T06:21:58Z",
"gatewayResponse": {
"transactionStatus": "APPROVED",
"errCode": "0",
"id": "49514d38-3741-43f2-94d9-24bfb7b57170",
"externalTransactionId": "7110000000148650",
"processor": "MAZOOMA",
"transactionId": "711000000008001548",
"status": "SUCCESS"
},
"mazooma": {
"consumerId": "PP_100222",
"ach": {
"paymentHandleToken": "BAFtcP4i8r0udbEK"
}
},
"profile": {
"firstName": "ALBERTA",
"lastName": "BOBBETHCHARLESON",
"email": "accountholder0@example.com",
"dateOfBirth": {
"day": 23,
"month": 12,
"year": 1990
},
"phone": "1234567890"
}
}
Annexe
Paiement
Une fois l’appel /paymenthandles effectué, Mazooma vérifie le solde disponible sur le compte de l’utilisateur. Si les fonds sont disponibles, le marchand reçoit le webhook "PAYABLE"; si les fonds ne sont pas disponibles, le marchand reçoit le webhook "FAILED".
À Mazooma, les banques enregistrées sont appelées UPO (User Payment Option). Dans les API Paysafe, la banque ou l’UPO sauvegardée est appelée bankToken (mazooma.achBankAccounts.paymentHandleToken).
Le débit réel sur le compte du client intervient à un stade ultérieur.
Débit sur le compte du client
Mazooma tente de débiter le compte du client le jour T+1.
Si les fonds sont disponibles sur le compte de l’utilisateur, Mazooma débitera le compte de l’utilisateur. Le marchand ne recevra pas de webhook.
Si cette tentative échoue en raison d’une insuffisance de fonds, vous recevrez deux webhooks; webhook "Return" (retour) suivi du webhook "Representment" (représentation)
Si cette tentative échoue en raison d’une erreur ou d’un problème autre que "Insufficient Funds" (insuffisance de fonds) vous recevrez alors 1 Webhooks; webhook "Return" (retour)
Représentation
La représentation est une tentative de débiter le compte bancaire du client si Mazooma n’est pas en mesure de débiter le compte du client le jour T+1.
Il y aura au maximum deux tentatives de représentation.
Représentation 1 : Mazooma tentera de débiter le compte de l’utilisateur le jour T+3 à partir de la date de la transaction.
Si les fonds sont disponibles sur le compte de l’utilisateur, Mazooma débitera le compte de l’utilisateur. Le marchand ne recevra pas de webhook.
Si cette tentative échoue, vous recevrez 2 webhooks; webhook "Return" (retour) suivi du webhook "Representment" (représentation)
Représentation 2 : Tentative de débit du compte bancaire du client en cas d’échec de la première représentation. Mazooma tentera à nouveau de débiter le compte de l’utilisateur soit le 15 du mois ou le dernier jour du mois, selon la date la plus proche.
- Si les fonds sont disponibles sur le compte de l’utilisateur, Mazooma débitera le compte de l’utilisateur. Le marchand ne recevra pas de webhook.
- Si cette tentative échoue, alors le webhook "Return" sera envoyé. Il n’y aura pas de webhook "Representment"
Si la transaction est refusée par Mazooma (puisque la représentation a échoué), vous recevrez un webhook "Return".
Webhooks
À Mazooma, les banques enregistrées sont appelées UPO (User Payment Option).
Paiement sans UPO
1. L’utilisateur a créé un PaymentHandle et a été redirigé vers Mazooma et a effectué le paiement.
- Paymenthandle= PAYABLE
2. L’utilisateur a créé un PaymentHandle et a été redirigé vers Mazooma et a effectué le paiement, puis le marchand a lancé un appel de paiement; la transaction est réussie.
- Paymenthandle=COMPLETED, Payment=COMPLETED
3. L’utilisateur a créé PaymentHandle et n’a pas été redirigé vers Mazooma.
- Paymenthandle=INITIATED
4. L’utilisateur a créé un PaymentHandle et a été redirigé vers Mazooma
- Paymenthandle=PROCESSING
5. L’utilisateur a créé un PaymentHandle et a été redirigé vers Mazooma, mais l’autorisation de la transaction a échoué.
- Paymenthandle=FAILED
6. L’utilisateur a créé un PaymentHandle a été redirigé vers Mazooma, mais une erreur s’est produite lors de la redirection vers le lien PSP.
- Paymenthandle=FAILED
Paiement avec UPO
- L’utilisateur a créé un PaymentHandle avec des détails UPO valides et a été redirigé vers Mazooma pour effectuer le paiement.
- Paymenthandle= PAYABLE
- L’utilisateur a créé un PaymentHandle avec des détails UPO valides et a été redirigé vers Mazooma pour effectuer le paiement, puis le marchand a lancé un appel de paiement; la transaction est réussie.
- Paymenthandle=COMPLETED, Payment=COMPLETED
Retrait (crédit autonome)
- L’utilisateur a créé le SCT_Paymenthandle, et le marchand n’a pas initié l’appel Standalonecredits.
- Paymenthandle=PAYABLE
- L’utilisateur a créé un PaymentHandle, et le marchand a complété l’appel Standalonecredits.
- Paymenthandle=COMPLETED, Standalonecredits=COMPLETED
- L’utilisateur a créé un PaymentHandle, et le marchand a initié un appel Standalonecredits; la transaction est passée à "PROCESSING"
- Paymenthandle=COMPLETED, Standalonecredits=COMPLETED
- Le marchand recevra le webhook Standalonecredit=COMPLETED une fois que l’état passe de PROCESSING à COMPLETED
- L’utilisateur a créé un Paymenthandle, et le marchand a initié un appel Standalonecredits avec des données de transaction non valides.
- Paymenthandle=COMPLETED, Standalonecredits=ERROR)
Instructions de test
Cette section explique comment tester les scénarios pour obtenir les résultats escomptés avec le simulateur interne.
Paiement
Les simulations basées sur les montants ci-dessous sont utilisées pour les transactions de paiement COMPLETE/FAIL avec le simulateur interne. Nous devons envoyer la valeur du montant dans la requête pour obtenir le résultat souhaité.
- L’état changera après la limite de temps. Exemple : pour le montant 101, il attendra 1 minute pour passer à APPROUVED, puis mettra à jour l’état à DECLINED dans 3 minutes.
Montant (en dollars) | Scénario réel | Cas de simulation | Webhooks |
---|---|---|---|
101 | Le compte de l’utilisateur présente un solde suffisant au moment où la transaction est initiée. Mazooma a approuvé la transaction.
Mazooma a essayé de débiter le compte de l’utilisateur le jour T+1, mais la transaction a échoué pour une raison autre que "Insufficient Balance" (solde insuffisant).
|
| Gestionnaire de paiement "PAYABLE" dans les 60 secondes -> Webhook "RETURN" après 180 secondes |
102 | Le compte de l’utilisateur présente un solde suffisant au moment où la transaction est initiée. Mazooma a approuvé la transaction.
Mazooma a essayé de débiter le compte de l’utilisateur le jour T+1, mais la transaction a échoué pour une raison autre que "Insufficient Balance". Admissible pour REPRESENTMENT.
|
| Gestionnaire de paiement "PAYABLE" dans les 60 secondes -> Webhook "RETURN" & Webhook "REPRESENTMENT" après 120 secondes |
103 | Le compte de l’utilisateur présente un solde suffisant au moment où la transaction est initiée. Mazooma a approuvé la transaction.
Mazooma a essayé de débiter le compte de l’utilisateur le jour T+1, mais la transaction a échoué pour une raison autre que "Insufficient Balance". Admissible pour REPRESENTMENT.
Mazooma a essayé de débiter le compte de l’utilisateur le jour T+3, mais la transaction a échoué pour une raison autre que "Insufficient Balance". Non admissible pour REPRESENTMENT.
|
| Gestionnaire de paiement "PAYABLE" dans les 60 secondes -> Webhook "RETURN" & Webhook "REPRESENTMENT" après 120 secondes -> webhook "RETURN" après 180 secondes |
104 | Le compte de l’utilisateur présente un solde suffisant au moment où la transaction est initiée. Mazooma a approuvé la transaction.
Mazooma a essayé de débiter le compte de l’utilisateur le jour T+1, mais la transaction a échoué pour une raison autre que "Insufficient Balance". Admissible pour REPRESENTMENT
Mazooma a essayé de débiter le compte de l’utilisateur le jour T+3, mais la transaction a échoué pour une raison autre que "Insufficient Balance". Admissible pour REPRESENTMENT
|
| Gestionnaire de paiement "PAYABLE" dans les 60 secondes -> Webhook "RETURN" & Webhook "REPRESENTEMENT" après 120 secondes -> webhook "RETURN" & Webhook "REPRESENTMENT" après 180 secondes |
105 | Le compte de l’utilisateur présente un solde suffisant au moment où la transaction est initiée. Mazooma a approuvé la transaction.
Mazooma a essayé de débiter le compte de l’utilisateur le jour T+1, mais la transaction a échoué pour une raison autre que "Insufficient Balance". Admissible pour REPRESENTMENT
Mazooma a essayé de débiter le compte de l’utilisateur le jour T+3, mais la transaction a échoué pour une raison autre que "Insufficient Balance". Admissible pour REPRESENTMENT
Mazooma a essayé de débiter le compte de l’utilisateur le 15 du mois ou le dernier jour du mois, mais le débit a échoué.
|
| Gestionnaire de paiement "PAYABLE" dans les 60 secondes -> Webhook "RETURN" & Webhook "REPRESENTEMENT" après 120 secondes -> webhook "RETURN" & Webhook "REPRESENTMENT" après 120 secondes -> webhook "RETURN" après 180 secondes |
Crédits autonomes
Les simulations basées sur les montants ci-dessous sont utilisées pour les transactions de paiement COMPLETE/FAIL/ERROR avec le simulateur interne.
Montant (en dollars) | État | Notification DMN | Limite de temps |
---|---|---|---|
101 | COMPLETED | APPROUVÉ -> REFUSÉ | APPROUVÉ après 60 secondes – REFUSÉ après 3 minutes |
Codes d’erreur
Codes de réponse API
Code d’erreur Mazooma | Raison | État HTTP Paysafe | Code d’erreur Paysafe | Message d’erreur Paysafe | Détails d’erreur Paysafe | État Paysafe | Raison de l’état | Remarques |
---|---|---|---|---|---|---|---|---|
1000 | Erreur générale | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
1010 | Jeton d’utilisateur non valide | 400 | 5068 | INVALID_FIELD | Soit vous avez soumis une requête pour laquelle il manque un champ obligatoire, soit la valeur d’un champ ne correspond pas au format attendu. | ERROR | s.o. | |
1011 | Données UserPaymentOption manquantes ou non valides | 400 | 5068 | INVALID_FIELD | Soit vous avez soumis une requête pour laquelle il manque un champ obligatoire, soit la valeur d’un champ ne correspond pas au format attendu. | ERROR | s.o. | |
1021 | Horodatage non valide | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
1023 | Option de paiement par l’utilisateur non activée | 400 | 5068 | INVALID_FIELD | Soit vous avez soumis une requête pour laquelle il manque un champ obligatoire, soit la valeur d’un champ ne correspond pas au format attendu. | ERROR | s.o. | mazooma.ach.paymentHandleToken non valide |
1024 | Dépassement de la limite UPO par utilisateur | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
1038 | Erreur de communication | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
1040 | Montant non valide ou manquant | 400 | 5068 | INVALID_FIELD | Soit vous avez soumis une requête pour laquelle il manque un champ obligatoire, soit la valeur d’un champ ne correspond pas au format attendu. | ERROR | s.o. | |
1041 | Devise du montant non valide ou manquante | 400 | 5068 | INVALID_FIELD | Soit vous avez soumis une requête pour laquelle il manque un champ obligatoire, soit la valeur d’un champ ne correspond pas au format attendu. | ERROR | s.o. | |
1064 | Jeton de session non valide Il ne peut y avoir qu’une seule commande par jeton de session. | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
1065 | Jeton non valide | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
1066 | Requête non valide | 502 | 1001 | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | ||
1067 | Type de transaction non valide ou manquant | 502 | 1001 | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | ||
1068 | Mode de paiement non activé | ACCOUNT_NOT_ACTIVATED | ||||||
1069 | Session expirée | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
1074 | L’option de paiement de l’utilisateur a expiré. | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
1090 | L’UPO n’a pas un état valide. Les états valides sont ENABLED, SUSPENDED et FROZEN. | 501 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
1109 | Adresse courriel non valide | 400 | 5068 | INVALID_FIELD | Soit vous avez soumis une requête pour laquelle il manque un champ obligatoire, soit la valeur d’un champ ne correspond pas au format attendu. | ERROR | s.o. | |
1113 | {0}L’État ne fait pas partie du pays | 400 | 5068 | INVALID_FIELD | Soit vous avez soumis une requête pour laquelle il manque un champ obligatoire, soit la valeur d’un champ ne correspond pas au format attendu. | ERROR | s.o. | |
1121 | Marchand non vérifié | 400 | 5017 | Compte désactivé | Le compte fourni est désactivé. | ERROR | s.o. | |
1122 | Site du marchand désactivé | 400 | 5017 | Compte désactivé | Le compte fourni est désactivé. | ERROR | s.o. | |
1125 | Mode de paiement UPO non pris en charge par cette méthode. | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
2006 | Conversion de devise non prise en charge | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
9065 | La devise n’est pas prise en charge par le mode de paiement | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
9066 | Taux de change non disponible | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
9072 | Paiement toujours en cours | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
9073 | Pays et devise non valides ou manquants | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
9083 | clientRequestId non valide ou manquant | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
9084 | Le clientRequestId fourni n’est pas associé à une transaction de paiement. | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
90939093 | Compte introuvable | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
9095 | L’ajout de compte bancaire a échoué. | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
9096 | Impossible de provisionner le compte de l’utilisateur pour l’instant. | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. | |
Pour tous les autres codes d’erreur | 502 | 1001 | Erreur de la passerelle externe | Une erreur de passerelle externe s’est produite. | ERROR | s.o. |