Créer des dépôts

Un dépôt est un versement que vous effectuez sur le compte d'un client depuis votre balance. La création d’un dépôt se fait en plusieurs processus.

1 - Requête de création d'un dépôt

Vous devez commencer par envoyer une requête de création de dépôt via l’API. Cette requête doit contenir les paramètres tels que le montant du depôt, la devise à utiliser, la méthode versement (seul MTN Bénin est pris en charge actuellement), les informations du client concerné par cette opération.
Vous avez donc :

  • amount : définir le montant du dépôt. Ce montant doit toujours être un nombre entier
  • currency : préciser la devise à utiliser pour le dépôt
  • Pour cet attribut, il faut soit indiquer le numéro ISO ou l’ISO. Référez-vous au tableau des devises disponibles.

  • customer : préciser le client avec lequel doit se faire le dépôt

Vous avez la possibilité à ce niveau de créer en même temps que le dépôt, un nouveau client à qui sera automatiquement affecté ce dépôt si vous ne l’avez pas encore enregistré auparavant.
Dans ce cas vous devez indiquer nom, prénom, e-mail et numéro de téléphone.
Utilisez le code ci-dessous pour adresser votre requête via l’API.

curl -X POST \
https://sandbox-api.fedapay.com/v1/payouts \
-H 'Authorization: Bearer VOTRE_CLE_API_PRIVEE' \
-H 'Content-Type: application/json' \
-d '{
      "amount" : 2000,
      "currency" : {"iso" : "XOF"},
      "mode": "mtn"
      "customer" : {
          "firstname" : "John",
          "lastname" : "Doe",
          "email" : "john.doe@example.com",
          "phone_number" : {
              "number" : "+22997808080",
              "country" : "bj"
          }
      }
    }'
/* Remplacez VOTRE_CLE_API par votre véritable clé API */
\FedaPay\FedaPay::setApiKey("VOTRE_CLE_API_PRIVEE");

/* Précisez si vous souhaitez exécuter votre requête en mode test ou live */
\FedaPay\FedaPay::setEnvironment('sandbox'); //ou setEnvironment('live');

/* Créer un dépôt */
\FedaPay\Payout::create(array(
  "amount" : 2000,
  "currency" : {"iso" : "XOF"},
  "mode": "mtn"
  "customer" => [
      "firstname" => "John",
      "lastname" => "Doe",
      "email" => "john.doe@example.com",
      "phone_number" => [
          "number" => "+22997808080",
          "country" => "bj"
      ]
  ]
));
const { FedaPay, Payout } = require('fedapay')

/* Remplacez VOTRE_CLE_API par votre véritable clé API */
FedaPay.setApiKey("VOTRE_CLE_API_PRIVEE");

/* Précisez si vous souhaitez exécuter votre requête en mode test ou live */
FedaPay.setEnvironment('sandbox'); //ou setEnvironment('live');

/* Créer un dépôt */
const payout = await Payout.create({
  "amount" : 2000,
  "currency" : {"iso" : "XOF"},
  "mode": "mtn"
  "customer" : {
      "firstname" : "John",
      "lastname" : "Doe",
      "email" : "john.doe@example.com",
      "phone_number" : {
          "number" : "+22997808080",
          "country" : "bj"
      }
  }
});

Dans le cas où votre client est déjà répertorié, donnez juste en paramètre son identifiant (ID) ou son email. L'ID et l'adresse email de votre client se trouvent au niveau de votre tableau de bord dans les détails du client.

curl -X POST \
https://sandbox-api.fedapay.com/v1/payouts \
-H 'Authorization: Bearer VOTRE_CLE_API_PRIVEE' \
-H 'Content-Type: application/json' \
-d '{
      "amount" : 2000,
      "currency" : {"iso" : "XOF"},
      "mode": "mtn",
      "customer" : {
          "email" : "john.doe@example.com",
        }
    }'
/* Remplacez VOTRE_CLE_API par votre véritable clé API */
\FedaPay\FedaPay::setApiKey("VOTRE_CLE_API_PRIVEE");

/* Précisez si vous souhaitez exécuter votre requête en mode test ou live */
\FedaPay\FedaPay::setEnvironment('sandbox'); //ou setEnvironment('live');

/* Créer un dépôt */
\FedaPay\Payout::create(array(
  "amount" => 2000,
  "mode" => "mtn",
  "currency" => ["iso" => "XOF"],
  "customer" => [
    "email" => "john.doe@example.com" /* ou "id" => 105 */
  ]
));
const { FedaPay, Payout } = require('fedapay')

/* Remplacez VOTRE_CLE_API par votre véritable clé API */
FedaPay.setApiKey("VOTRE_CLE_API_PRIVEE");

/* Précisez si vous souhaitez exécuter votre requête en mode test ou live */
FedaPay.setEnvironment('sandbox'); //ou setEnvironment('live');

/* Créer un dépôt */
const payout = await Payout.create({
  description: 'Description',
  amount: 2000,
  mode: "mtn",
  currency: {
      iso: 'XOF'
  },
  customer: {
      email: 'john.doe@example.com' /* ou id: 105 */
  }
});

2- Envoi d'un dépôt

A cet instant précis, le dépôt que vous avez créé est en attente d'envoi. Il vous faudra procéder à l'envoi. Pour envoyer un dépôt, vous avez la possibilité de l'envoyer à une moment ultérieur our de l'envoyer à l'instant.

Utilisez ce code pour envoyer votre requête via l’API.

curl -X PUT \
https://sandbox-api.fedapay.com/v1/payouts/start \
-H 'Authorization: Bearer VOTRE_CLE_API_PRIVEE' \
-H 'Content-Type: application/json'
-d '{
      "payouts" : [
        { "id": 23 },
        { "id": 24 , "scheduled_at": "{now}"}
      ]
    }'
$payout = \FedaPay\Payout::create(array(...));
// Envoi du dépôt maintenant
$payout->sendNow();
 // Envoie le dépôt plus tard
$payout->schedule("{now}");
// Programmer plusieurs envoies
Payout::scheduleAll([
    [
        "id" => 23 // Envoie le dépôt instantanément
    ],
    [
        "id" => 24,
        "scheduled_at" => "{now}" // Envoie le dépôt plus tard
    ]
]);
// Envoyer tous les paiements instantanément
Payout::sendAllNow([
    [ "id" => 23 ],
    [ "id" => 24 ]
]);
const payout = await Payout.create({...});
// Envoi du dépôt maintenant
await payout.sendNow();
// Envoi du dépôt plus tard
await payout.schedule("{now}");
// Programmer plusieurs envois
await Payout.scheduleAll([
    {
        id: 23,
        scheduled_at: "{now}"
    },
    {
        id: 24,
        scheduled_at: "{now}"
    }
]);
// Envoyer tous les dépôts instantanément
await Payout.sendAllNow([
    { id: 23 },
    { id: 24 }
]);
3- Récupération des détails d'un dépôt

Pour récupérer les informations concernant un dépôt donné, et faire des traitements avec cette dernière procédez comme suit

curl -X GET \
https://sandbox-api.fedapay.com/v1/payouts/ID \
-H 'Authorization: Bearer VOTRE_CLE_API_PRIVEE' \
-H 'Content-Type: application/json'
$payout = \FedaPay\Payout::retrieve(ID);
if ($payout->status == "sent") {
    echo "Dépôt effectué";
}
const payout = await Payout.retrieve(ID);
if (payout.status == "sent") {
    console.log("Dépôt effectué");
}

Cycle de vie des dépôts

Lorsque vous créez un dépôt, il passe par différents états ou statuts exactement comme les transactions.
Ces statuts sont :

  • pending: En attente.
  • started: Démarré. C'est le statut d'un dépôt lorque l'envoi a démarré.
  • processing: En cours d'envoi. C'est le statut lorque le système est entrain de procéder à l'envoi au destinataire.
  • sent: Envoyé. C'est le statut lorsque le dépôt est envoyé avec succès.
  • failed: Echoué. C'est le statut lorsque l'envoi du dépôt a échoué
  • Au départ, dès que vous créez votre dépôt, il est en En attente. C’est le statut par défaut.
    Le dépôt passera à Démarré lorsque l'envoi a démarré.

    Il passe à En cours d'envoi si le système est entrain d'envoyer le dépôt au destinataire.

    Il est Envoyé lorsqu'il est envoyé avec succès.

    Echoué lorsque l'envoi a échoué pour plusieurs raisons.

    Vous pourrez consulter le statut de chacun de vos dépôts toujours au niveau de votre tableau de bord FedaPay dans le menu Paiements pour suivre leur évolution.