YENGAPAY est un agrégateur de moyens de paiements développé par la société KREEZUS permettant aux entreprises partenaires de percevoir des paiements clients depuis leurs plateformes.

NB : Le montant minimum pour un paiement est fixé a 100 F

ETAPES D’INTEGRATION

INTEGRATION YENGAPAY

PRODUCTION

CREATION DU PROJET

Avant toutes chose vous devez créer un compte marchand sur YENGAPAY.

Rendez-vous sur :

<https://app.yengapay.com>

Allez dans la section projet et créez votre projet

<aside> 💡 Vous avez la possibilité de désactiver les moyens de paiements que vous ne voulez pas présenter a l’utilisateur.

</aside>

Capture d’écran 2024-11-29 à 08.57.02.png

<aside> 💡

Vous pouvez définir un Webhook sur lequel YENGAPAY va notifier de chaque paiement entrant.

</aside>

Capture d’écran 2024-11-29 à 08.57.52.png

<aside> 💡 Vous pouvez définir une URL de redirection a la fin du paiement.

</aside>

Capture d’écran 2024-11-29 à 09.03.43.png

INTEGRATION A L’APPLICATION MARCHANDE

Paramètres ⇒ Organisation

Capture d’écran 2024-11-29 à 09.00.01.png

Capture d’écran 2024-11-29 à 09.00.43.png

Paramètres ⇒ Clés Api, pour créer une API qui vous authentifiera lors des requêtes de paiements entrant. Nom de la clé (Créer un paiement entrant)

Capture d’écran 2024-11-29 à 09.02.29.png

Paiement indirect

URL : [<https://api.yengapay.com/api/v1/groups/{organization_id}/payment-intent/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>){project_id}
METHODE: POST
PAYLOAD : {
    "paymentAmount": 200, // Montant du paiement, frais applicable
    "reference": "6646846426259895", // Votre identifiant pour ce paiement
    "articles": [
          {
            "title": "Moto venu des USA", // Titre de l'article
            "description": "Une moto neuve sans probleme", //Description de l'article
            "pictures": [ //(optionnel)  Images d'illustration de l'article 
              "<https://www.bmw-motorrad.fr/content/dam/bmwmotorradnsc/common/images/models/modeloverview/2022/nsc-master-modeloverview-s1000rr-P0N3H_600x360.jpg.asset.1663142269837.jpg>"
              ],
            "price": 200 // Montant Illustratif
          }
      ]
}
HEADERS: {
   "x-api-key" : {api_key}
}
CURL

curl -X POST -H 'x-api-key: z3BbBpeBMeegH8MWBNCUSGgukbV5cBqt' -H 'Content-Type: application/json' -d '{"paymentAmount":200,"reference":"6646846426259895","articles":[{"title":"Moto venu des USA","description":"Une moto neuve sans probleme","pictures":["<https://www.bmw-motorrad.fr/content/dam/bmwmotorradnsc/common/images/models/modeloverview/2022/nsc-master-modeloverview-s1000rr-P0N3H_600x360.jpg.asset.1663142269837.jp"],"price>":100}]}' https://[api.yengapay.com](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)/api/v1/groups/{organization_id}/payment-intent/{project_id}

{
  "id": "clx36jfpl0001vx7l7u3p32x3",
  "createdAt": "2024-06-06T11:34:06.153Z",
  "updatedAt": "2024-06-06T11:34:06.177Z",
  "contryOrigin": "BF",
  "reference": "6646846426259895",
  "articleId": null,
  "isPaylink": false,
  "paymentIntentIsUsed": false,
  "apiEnv": "prod",
  "paymentSource": null,
  "articles": [
    {
      "price": 200,
      "title": "Moto venu des USA",
      "pictures": [
        "<https://www.bmw-motorrad.fr/content/dam/bmwmotorradnsc/common/images/models/modeloverview/2022/nsc-master-modeloverview-s1000rr-P0N3H_600x360.jpg.asset.1663142269837.jpg>"
      ],
      "description": "Une moto neuve sans probleme"
    }
  ],
  "token": "6ByXm8zPfxarHaYf8gJLsJCuUJUjClGol2HdnJarCG2CpY25PgImwzDBHgeaApm3P%2FE65CDKPdK0CulG%2BFnpRQUufT7Mqi9wtvH0AWzmhZytInsVeGbi5e7x7KWh1zht",
  "projectId": "67629",
  "checkoutPageUrlWithPaymentToken": "https://[api.yengapay.com](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)/checkout/6ByXm8zPfxarHaYf8gJLsJCuUJUjClGol2HdnJarCG2CpY25PgImwzDBHgeaApm3P%2FE65CDKPdK0CulG%2BFnpRQUufT7Mqi9wtvH0AWzmhZytInsVeGbi5e7x7KWh1zht",
  "customerNumber": "+22660101825",
  "paymentAmount": 195,
  "paymentFees": 5,
  "currency": "XOF",
  "transactionStatus": "PENDING",
  "transactionType": "PAYMENT"
}

Dans la réponse de la requête de création du paiement entrant vous devez récupérer la valeur de {checkoutPageUrlWithPaymentToken} qui est une URL et l’ouvrir sur un navigateur pour que l’utilisateur puisse choisir le moyen de paiement et terminer le processus.

Capture d’écran 2024-11-29 à 09.05.57.png

Paiement direct

Le paiement direct peut se faire de 2 manière différentes,

en initiant d’abord le paiement pour obtenir la liste des opérateurs disponibles, ou en passant directement au paiement avec un opérateur deja connu, nous allons présenter les 2 manières.

1. Initiation pour la liste des opérateurs

URL : [<https://api.yengapay.com/api/v1/groups/{organization_id}/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)projects/{project_id}/direct-payment/init
METHODE: POST

PAYLOAD : {
  "amount": 200, // Montant net réçu par le destinataire
  "articles":[
		  {
			  "title":"Belle Moto",
			  "description":"Sans description",
			  "price":2000
			 }
	  ],
	 "reference": "6646846426259895", // Votre identifiant pour ce paiement
	 "customerEmailToNotify":"[email protected]" // Adresse a notifier après le paiement
}

HEADERS: {
   "x-api-key" : {api_key}
}
CURL

curl -X POST [<https://api.yengapay.com/api/v1/groups/{organization_id}/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)projects/{project_id}/direct-payment/init
 -H 'Content-Type: application/json' 
 -H 'x-api-key: pn7PnmrghXArBHcMWG3ozStzG7XQzQ1s' 
 -d '{"articles":[{"title":"Produit de test","description":"Sans description","price":200}], "customerEmailToNotify":"[email protected]", "amount":200}' 
{
  "paymentIntentId": "cmlgq6djo0007s601ksazqeh5",
  "expiresAt": "2026-02-10T15:12:45.550Z",
  "availableOperators": [
    {
      "code": "ORANGE",
      "name": "Orange Money",
      "countryCode": "BF",
      "countryName": "Burkina Faso",
      "flagUrl": "<https://flagcdn.com/w40/bf.png>",
      "flow": "ONE_STEP",
      "amount": 200,
      "fees": 0,
      "totalAmount": 200,
      "minAmount": 200,
      "maxAmount": 1000000
    },
    {
      "code": "MOOV",
      "name": "Moov Money",
      "countryCode": "BF",
      "countryName": "Burkina Faso",
      "flagUrl": "<https://flagcdn.com/w40/bf.png>",
      "flow": "TWO_STEP",
      "amount": 200,
      "fees": 0,
      "totalAmount": 200,
      "minAmount": 200,
      "maxAmount": 1000000
    },
    {
      "code": "SANKM",
      "name": "Sank Money",
      "countryCode": "BF",
      "countryName": "Burkina Faso",
      "flagUrl": "<https://flagcdn.com/w40/bf.png>",
      "flow": "TWO_STEP",
      "amount": 200,
      "fees": 0,
      "totalAmount": 200,
      "minAmount": 200,
      "maxAmount": 1000000
    },
    {
      "code": "CORISM",
      "name": "Coris Money",
      "countryCode": "BF",
      "countryName": "Burkina Faso",
      "flagUrl": "<https://flagcdn.com/w40/bf.png>",
      "flow": "TWO_STEP",
      "amount": 200,
      "fees": 0,
      "totalAmount": 200,
      "minAmount": 200,
      "maxAmount": 1000000
    },
    {
      "code": "TELECEL",
      "name": "Telecel Money",
      "countryCode": "BF",
      "countryName": "Burkina Faso",
      "flagUrl": "<https://flagcdn.com/w40/bf.png>",
      "flow": "ONE_STEP",
      "amount": 200,
      "fees": 0,
      "totalAmount": 200,
      "minAmount": 200,
      "maxAmount": 1000000
    }
  ]
}
URL : [<https://api.yengapay.com/api/v1/groups/{organization_id}/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)projects/{project_id}/direct-payment/send-otp
METHODE: POST

PAYLOAD : {
  "paymentIntentId": "cmig46tu300013tfbj64ls2ky", // La valeur de "paymentIntentId" obtenue dans l'étape précédente
  "operatorCode":"MOOV", //CORIS, MOOV, SANK
	"countryCode": "BF", // identifiant pays (BF)
	"customerMSISDN":"22670707700" // Numéro de téléphone pour le paiement
}

HEADERS: {
   "x-api-key" : {api_key}
}
CURL

curl -X POST <https://api.yengapay.com/api/v1/groups/{organization_id}/projects/{project_id}/direct-payment/send-otp> 
  -H "Content-Type: application/json" 
  -H "x-api-key: {api_key}" 
  -d '{
    "paymentIntentId": "cmig46tu300013tfbj64ls2ky",
    "operatorCode": "MOOV",
    "countryCode": "BF",
    "customerMSISDN": "22670707700" // Numéro de téléphone pour le paiement
  }'
{
  "status": "OTP_SENT",
  "message": "Moov Money vous a envoyé un code OTP par SMS"
}
URL: <https://api.yengapay.com/api/v1/groups/{organization_id}/projects/{project_id}/direct-payment/pay>
METHODE: POST

PAYLOAD : {
  "customerMSISDN": "22670707700", // Numéro de téléphone pour le paiement
  "countryCode": "BF",
  "operatorCode": "ORANGE", // Operateur de paiement
  "paymentIntentId": "cmig46tu300013tfbj64ls2ky", // La valeur de "paymentIntentId" obtenue dans l'étape précédente
  "operatorCode":"MOOV", // ORANGE, MOOV, TELECEL, CORISM, SANKM
  "otp": "656494"
}

HEADERS :
{
  "Content-Type": "application/json",
  "x-api-key": {api_key}
}
CURL

 curl -X POST <https://api.yengapay.com/api/v1/groups/{organization_id}/projects/{project_id}/direct-payment/pay>
  -H 'Content-Type: application/json'
  -H 'x-api-key: pn7PnmrghXArBHcMWG3ozStzG7XQzQ1s'
  -d '{"customerMSISDN":"22665656565","countryCode":"BF", "operatorCode":"ORANGE","paymentIntentId":"cmig46tu300013tfbj64ls2ky","otp":"65649494"}'
{
  "status": "DONE",
  "transactionId": "YP20260210.1512.91155279",
  "paymentIntentId": "cmlgqokbh000ls601xszwptsn",
  "amount": 200,
  "fees": 5,
  "totalAmount": 205
}

2. Passer directement au paiement

Code USSD pour la génération de code OTP

ORANGE : “14446{montant}#” TELECEL : “80844{montant}#”

URL : [<https://api.yengapay.com/api/v1/groups/{organization_id}/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)projects/{project_id}/direct-payment/init-and-pay
METHODE: POST

PAYLOAD : {
  "amount": 500, // Montant net réçu par le destinataire
  "articles":[
		  {
			  "title":"Ticket d'entrée",
			  "description":"Ticket d'entrée a l'événement",
			  "price":500
			 }
	  ],
	 "reference": "6646846426259895", // Votre identifiant pour ce paiement
	 "operatorCode":"ORANGE", // "ORANGE", "MOOV", "SANKM", "CORISM", "TELECEL", "MTN"
	 "countryCode":"BF", // "BF", "CI"
	 "customerMSISDN":"22665000000", // Numéro de payeur
	 "otp":"123456" // Code OTP généré par le client (Requis pour ORANGE,TELECEL)
	 "customerEmailToNotify":"[email protected]" // Adresse a notifier après le paiement
}

HEADERS: {
   "x-api-key" : {api_key}
}
{
  "status": "DONE",
  "transactionId": "YP2026035.852.96420861",
  "paymentIntentId": "cmmd89dm7000fs6019tazrroz",
  "amount": 475,
  "fees": 25,
  "totalAmount": 500,
  "operator": {
    "code": "ORANGE",
    "name": "Orange Money",
    "countryCode": "BF"
  },
  "customerMSISDN": "22665000000",
  "flow": "ONE_STEP"
}
{
  "status": "OTP_SENT",
  "message": "Moov Money vous a envoyé un code OTP par SMS",
  "flow": "TWO_STEP",
  "paymentIntentId": "cmmd8bpm0000rs60187p2x2k0",
  "operator": {
    "code": "MOOV",
    "name": "Moov Money",
    "countryCode": "BF"
  },
  "nextStep": {
    "endpoint": "POST /direct-payment/pay",
    "description": "Appelez cet endpoint avec le paymentIntentId et le code OTP reçu par SMS",
    "requiredFields": {
      "paymentIntentId": "cmmd8bpm0000rs60187p2x2k0",
      "operatorCode": "MOOV",
      "countryCode": "BF",
      "customerMSISDN": "22660000000",
      "otp": "<code OTP reçu par SMS>"
    }
  }
}
URL : [<https://api.yengapay.com/api/v1/groups/{organization_id}/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)projects/{project_id}/direct-payment/pay
METHODE: POST

PAYLOAD : {
   "paymentIntentId": "cmmd8bpm0000rs60187p2x2k0", // Le paymentIntent obtenu lors de l'étape précédente
	 "operatorCode":"MOOV", // "MOOV", "SANKM", "CORISM"
	 "countryCode":"BF", // "BF", "CI"
	 "customerMSISDN":"22660000000", // Numéro de payeur
	 "otp":"123456" // Code OTP recu par le client
}

HEADERS: {
   "x-api-key" : {api_key}
}
{
  "status": "DONE",
  "transactionId": "YP2026035.856.68546302",
  "paymentIntentId": "cmmd8bpm0000rs60187p2x2k0",
  "amount": 487,
  "fees": 13,
  "totalAmount": 500
}
URL : [<https://api.yengapay.com/api/v1/groups/{organization_id}/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)project/{project_id}/payout
METHODE: POST

PAYLOAD : {
  "paymentMethod": "ORANGE_MONEY", // "ORANGE_MONEY" | "MOOV_MONEY" | "SANK_MONEY" | "TELECEL_MONEY"
  "description": "Description du paiement sortant", // optionnel
  "amount": 200, // Montant net réçu par le destinataire
  "destNumber": "+22670123456", // numéro de téléphone valide du destinataire
  "destName": "Jean KABORE", // optionnel
  "destEmail": "[email protected]", // optionnel
}

HEADERS: {
   "x-api-key" : {api_key}
}
CURL

curl -X POST [<https://api.yengapay.com/api/v1/groups/{organization_id}/>](<https://api.staging.yengapay.com/api/v1/groups/10268496/payment-intent/70038>)project/{project_id}/payout \\
  -H "Content-Type: application/json" \\
  -H 'x-api-key: LSzaUTjm3O8vNAlkEkhUP0M5SiBlOu8e'
  -d '{
    "amount": 5000,
    "paymentMethod": "ORANGE_MONEY",
    "destNumber": "+22674123456",
    "destName": "Jean KABORE",
    "destEmail": "[email protected]",
    "description": "Paiement salaire novembre 2024"
  }'
{
  "id": "YPPO20250113.1538.38055.7265",
  "amount": 5000,
  "fees": 75,
  "totalDebited": 5075,
  "status": "PENDING",
  "createdAt": "2024-01-15T10:30:00Z",
  "destNumber": "+22670123456",
  "paymentMethod": "ORANGE_MONEY"
}
URL : <https://api.yengapay.com/api/v1/groups/{organization_id}/cash-out>
METHODE: POST
PAYLOAD : {
	"cashoutMethod": "ORANGE_MONEY",
	"description": "Description du paiement sortant",
	"amount": 200,
	"destNumber": "+226xxxxxxxx",
	"groupId": [YENGAPAY_ORGANISATION_IDI,
	"projectId" : [YENGAPAY_PROJECT_ID]
}
HEADERS:{
  "x-api-key" : {api_key}
}
CURL
curl -X POST -H 'x-api-key: 8SlmrY5Wwuy5IgEVR0ubAuUMhEygzd0PDJ' -H 'Content-Type: application/json' -d '{"cashoutMethod":"ORANGE_MONEY","description":"Description du paiement sortant","amount":200,"destNumber":"+22606633031","groupId":"10268498","projectId":"40407"}' [<https://api.yengapay.com/api/v1/groups/10268498/cash-out>](<https://api.yengapay.com/api/v1/groups/10268496/cash-out>)

{
  "id": "YPCO20250924.1546.40403.2921",
  "projectId": "40407",
  "groupId": "10268498",
  "amount": 200,
  "fees": 5,
  "destNumber": "+22606633031",
  "cashoutMethod": "ORANGE_MONEY",
  "apiEnv": "test",
  "currency": "XOF",
  "status": "PENDING",
  "description": "Description du paiement sortant",
  "errorMessage": null,
  "technicalError": null,
  "operatorTransId": null,
  "processedAt": null,
  "createdAt": "2025-09-24T15:46:34.502Z",
  "updatedAt": "2025-09-24T15:46:34.502Z"
}

TEST

NOTIFICATION WEBHOOK

VERIFICATION DU STATUT DE PAIEMENT

STATUT CODES

ECHEC

403 : Pas d’autorisation

401 : Non Authentifié

400 : Mauvaise requête

SUCCES

200, 201 : Succès