Introduction

Notre API est conçue selon les principes REST. Elle utilise des URL faciles à prévoir, centrées sur les ressources, et elle accepte et renvoie des informations au format JSON. De plus, elle applique les règles HTTP standard pour les codes de réponse, l'authentification et les verbes. Nous vous fournirons séparément la valeur BASEURL. Vous pouvez utiliser l'API dans un environnement de test sûr, qui ne touchera pas à vos données réelles et ne se connectera à aucun réseau bancaire ou d'argent mobile. Le type de clé API que vous utilisez pour vérifier la demande déterminera s'il s'agit d'un mode en direct ou d'un mode de test. N'oubliez pas que toutes les demandes d'API doivent être envoyées via HTTPS. Les tentatives effectuées via HTTP non sécurisé ne fonctionneront pas. De même, les demandes d'API effectuées sans authentification échoueront.


Authentification

Guide simplifié de l'intégration de l'API

Notre API permet à votre application d'interagir avec notre plateforme de paiement/transfert. Ce guide vous aidera à configurer et à gérer vos clés API, à comprendre les différents modes de fonctionnement et à utiliser les clés correctement pour des transactions sécurisées. Comprendre les clés API

Les clés API sont les "mots de passe" qui permettent à votre application d'accéder à notre API. Gardez ces clés privées pour préserver la sécurité de vos transactions. Vous pouvez gérer ces clés à partir de votre tableau de bord. Notez que le partage de ces clés dans des lieux publics tels que GitHub ou dans le code côté client n'est pas recommandé en raison des risques de sécurité. Obtenir les clés d'API

Vous pouvez trouver vos clés d'API en vous connectant à votre compte et en allant dans le tableau de bord. Si vous avez des difficultés à y accéder, contactez le propriétaire de votre compte. Il se peut qu'il doive vous accorder des autorisations supplémentaires. Types de clés API

Il existe quatre clés API que nous vous fournissons :

  • Clé secrète en mode test : Pour effectuer des appels API côté serveur en mode test.
  • Clé publiable en mode test : Pour tester le code côté client dans les applications.
  • Clé secrète du mode Live : Pour effectuer des appels API côté serveur en mode réel.
  • Clé publiable en mode réel : Pour le code côté client dans les applications une fois qu'elles sont en ligne.

Modes de fonctionnement

Notre API fonctionne selon deux modes : le mode test et le mode réel.

  • Mode test : Utilisez ce mode lorsque vous êtes encore en train de développer votre application. Il simule les interactions de l'API mais ne traite pas les paiements réels.
  • Mode réel : Utilisez ce mode lorsque votre application est prête à traiter de vraies transactions et à accepter de vrais paiements.

Comment utiliser vos clés API

Selon le mode dans lequel vous vous trouvez (test ou réel), utilisez les clés correspondantes.

  • Clés secrètes : Utilisez-les pour les appels API côté serveur. Protégez ces clés ; ne les exposez pas publiquement.
  • Clés publiables : Elles peuvent être incluses dans le code côté client de votre application. Elles sont utilisées pour collecter les informations de paiement en toute sécurité.

Sécurisez vos clés d'API

Votre clé API secrète peut effectuer n'importe quelle transaction en votre nom. Pour la sécuriser :

  • Limitez l'accès aux personnes qui en ont réellement besoin.
  • Ne la laissez pas dans les systèmes de contrôle de version.
  • Utilisez un gestionnaire de mots de passe ou un service de gestion des secrets pour la stocker.
  • N'incluez pas votre clé d'API secrète dans des applications mobiles ou dans d'autres endroits où elle peut être extraite.

Paiement

GET Méthodes de paiement

https://api.digipay.tech/v1/misc/payin/services
Headers
Authorization : Basic TOKEN
Exemple de requête
curl --location 'BASE_URL/v1/misc/payin/services' \
--header 'Authorization: Basic TOKEN'
Exemple de réponse
					
					 
JSON
{
  "code": 200,
  "message": "OK",
  "data": {
    "BJ": [
      {
        "name": "CREDIT_CARD",
        "display_name": "Credit Card",
        "channel": "credit_card",
        "type": "direct",
        "country": {
          "name": "Benin",
          "code": "BJ",
          "prefix": "+229"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "MOOV_BJ",
        "display_name": "Moov Benin Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Benin",
          "code": "BJ",
          "prefix": "+229"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "MTN_BJ",
        "display_name": "MTN Benin Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Benin",
          "code": "BJ",
          "prefix": "+229"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      }
    ],
    "BF": [
      {
        "name": "CREDIT_CARD",
        "display_name": "Credit Card",
        "channel": "credit_card",
        "type": "direct",
        "country": {
          "name": "Burkina Faso",
          "code": "BF",
          "prefix": "+226"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "ORANGE_BF",
        "display_name": "Orange Burkina Faso Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Burkina Faso",
          "code": "BF",
          "prefix": "+226"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "MOOV_BF",
        "display_name": "Moov Burkina Faso Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Burkina Faso",
          "code": "BF",
          "prefix": "+226"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      }
    ],
    "CI": [
      {
        "name": "CREDIT_CARD",
        "display_name": "Credit Card",
        "channel": "credit_card",
        "type": "direct",
        "country": {
          "name": "Côte d'Ivoire",
          "code": "CI",
          "prefix": "+225"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "MOOV_CI",
        "display_name": "Moov Côte d'Ivoire Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Côte d'Ivoire",
          "code": "CI",
          "prefix": "+225"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "MTN_CI",
        "display_name": "MTN Côte d'Ivoire Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Côte d'Ivoire",
          "code": "CI",
          "prefix": "+225"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "ORANGE_CI",
        "display_name": "Orange Côte d'Ivoire Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Côte d'Ivoire",
          "code": "CI",
          "prefix": "+225"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      }
    ],
    "CM": [
      {
        "name": "CREDIT_CARD",
        "display_name": "Credit Card",
        "channel": "credit_card",
        "type": "direct",
        "country": {
          "name": "Cameroon",
          "code": "CM",
          "prefix": "+237"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "MTN_CM",
        "display_name": "MTN Cameroon Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Cameroon",
          "code": "CM",
          "prefix": "+237"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "ORANGE_CM",
        "display_name": "Orange Cameroon Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Cameroon",
          "code": "CM",
          "prefix": "+237"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      }
    ],
    "ML": [
      {
        "name": "CREDIT_CARD",
        "display_name": "Credit Card",
        "channel": "credit_card",
        "type": "direct",
        "country": {
          "name": "Mali",
          "code": "ML",
          "prefix": "+223"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "MOOV_ML",
        "display_name": "Moov Mali Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Mali",
          "code": "ML",
          "prefix": "+223"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "ORANGE_ML",
        "display_name": "Orange Mali Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Mali",
          "code": "ML",
          "prefix": "+223"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      }
    ],
    "SN": [
      {
        "name": "CREDIT_CARD",
        "display_name": "Credit Card",
        "channel": "credit_card",
        "type": "direct",
        "country": {
          "name": "Senegal",
          "code": "SN",
          "prefix": "+221"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "FREE_SN",
        "display_name": "Free Senegal Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Senegal",
          "code": "SN",
          "prefix": "+221"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "ORANGE_SN",
        "display_name": "Orange Senegal Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Senegal",
          "code": "SN",
          "prefix": "+221"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      }
    ],
    "TG": [
      {
        "name": "CREDIT_CARD",
        "display_name": "Credit Card",
        "channel": "credit_card",
        "type": "direct",
        "country": {
          "name": "Togo",
          "code": "TG",
          "prefix": "+228"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "MOOV_TG",
        "display_name": "Moov Togo Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Togo",
          "code": "TG",
          "prefix": "+228"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      },
      {
        "name": "TMONEY_TG",
        "display_name": "T-Money Togo Mobile Money",
        "channel": "mobile_money",
        "type": "direct",
        "country": {
          "name": "Togo",
          "code": "TG",
          "prefix": "+228"
        },
        "meta": {
          "otp": false,
          "otp_length": 0,
          "redirect_customer_to_url_processing": false,
          "before_payment_instructions": "Make sure you have enough balance.",
          "after_payment_instructions": "Check your account for the transaction details."
        }
      }
    ]
  }
}
					
					
					

POST Initialisation d'un paiement

Initialisation d'un paiement
https://api.digipay.tech/v1/payment/init
Initier un paiement

Ce guide vous aidera à initier un paiement à n'importe quel opérateur pris en charge par notre API.

Corridors

Voici les pays et les modes de paiement acceptés :

Code du pays Nom du pays Prend en charge le portefeuille mobile ? Prend en charge les cartes de crédit ? Devise
BJ Bénin Oui Oui XOF
CI Côte d'Ivoire Oui Oui XOF
Méthodes de paiement disponibles

Voici les modes de paiement disponibles par pays et leurs limites minimales et maximales de transaction :

Code du pays Nom du pays Méthode de paiement Montant min Montant max
BJ Bénin CREDIT_CARD, MOOV_BJ, MTN_BJ 200 1 500 000
CI Côte d'Ivoire CREDIT_CARD, MOOV_CI, MTN_CI, ORANGE_CI, WAVE_CI 200 1 500 000
Statuts des paiements

Les paiements peuvent avoir l'un des statuts suivants :

Statut Description
new Le paiement a été nouvellement créé
success Le paiementest réussi
pending Le paiement est en attente
failed Le paiement a échoué
refunded Le paiement a été remboursé
cancelled Le paiement a été annulé
Statuts des paiements

Les paiements peuvent avoir l'un des statuts suivants :

Statut Description
new Le paiement a été nouvellement créé
success Le paiementest réussi
pending Le paiement est en attente
failed Le paiement a échoué
refunded Le paiement a été remboursé
cancelled Le paiement a été annulé
Devises valides

Ci-dessous les devises valides :

Devise Description
XOF Union économique et monétaire ouest-africaine
EUR Euro
Valid Payee Phone Number

Le numéro de téléphone du bénéficiaire doit être au format E.164. Ce format commence par le signe plus (+), suivi de l'indicatif du pays et du numéro de téléphone. Par exemple, le numéro de téléphone de la Côte d'Ivoire (CIV) serait le suivant : +2250102030405.

Canaux valides

Les canaux valides sont indiquées ci-dessous :

Canal Description
mobile_money Paiement effectué par le biais d'un service d'argent mobile
credit_card Paiement par carte de crédit
wave Paiement effectué par l'intermédiaire d'une application de portefeuille mobile appelée Wave
Demande d'information

Voici les paramètres que vous devez inclure dans votre demande :

Paramètre Type Est obligatoire Description
merchant_transaction_id Chaîne de caractère Oui Identifiant unique du commerçant pour la transaction
amount Entier Oui Le montant du paiement
currency valid_currency_string Oui La devise dans laquelle le paiement est fait
description string Non Brève description de l'opération de paiement
payee valid_payee_phone_number Oui Numéro de téléphone du bénéficiaire
payee_first_name string Non Prénom du bénéficiaire
payee_last_name string Non Nom du bénéficiaire
channel valid_channel_string Oui Le canal utilisé pour effectuer le paiement
webhook_url string Non L'URL à laquelle la confirmation de paiement sera envoyée
custom_field string Non Un champ personnalisé facultatif pour des informations supplémentaires

Veuillez noter que vous pouvez forcer l'utilisation d'une méthode de paiement en ajoutant "payment_method" avec une méthode valide.

Informations sur la réponse

Voici les paramètres que vous recevrez dans votre réponse :

Paramètre de la réponse Type Description
code entier Le code d'état HTTP renvoyé par l'API
message string Un message indiquant le résultat de l'opération API
data objet Un objet contenant les détails du traitement du paiement
description string Brève description de l'opération de paiement
payee valid_payee_phone_number Numéro de téléphone du bénéficiaire
data.payment_status string Le statut actuel du paiement
data.payment_token string Un identifiant unique pour l'opération de paiement
data.payment_method string Le mode de paiement utilisé pour la transaction
data.payment_type string Le type de paiement effectué
data.country string Le pays où le paiement a été effectué
data.country_prefix string Préfixe de l'indicatif de pays pour le numéro de téléphone mobile
data.country string Le pays où le paiement a été effectué
data.country string Le pays où le paiement a été effectué
data.country string Le pays où le paiement a été effectué
data.channel string Le canal utilisé pour initier le paiement
data.payment_meta objet Métadonnées supplémentaires relatives à l'opération de paiement
data.payment_meta.otp booleen Indique si le paiement nécessite un code OTP
data.payment_meta.otp_length entier La longueur du code OTP requis
data.payment_meta.redirect_customer_to_url_processing booleen Indique si le client doit être redirigé vers une URL pour traitement.
data.process_request_data objet Données supplémentaires nécessaires au traitement du paiement
data.process_request_data.payment_token booleen Indique si un jeton de paiement est nécessaire pour traiter le paiement.
data.process_request_data.otp_code booleen Indique si un code OTP est requis pour le traitement du paiement.
data.instruction chaine Instructions pour le client sur la manière d'effectuer le paiement
Simulation des statuts de paiement : phase de test uniquement

L'API vous permet de simuler différents états de paiement pendant la phase de test. Les modèles ci-dessous déclenchent différents états de paiement et différentes réponses, ce qui vous permet de vérifier que votre système gère correctement divers scénarios.

Test du canal "mobile_money

Voici une liste des numéros de téléphone testés et des statuts de paiement associés :

Bénéficiaire Type de transaction Statut final
+2250707000200 Une étape Succès
+2250707000205 Deux étapes Succès
+2250707000202 Deux étapes a échoué avec une erreur générique
+2250707000203 Deux étapes a échoué avec une erreur générique
+2250707000204 Deux étapes a échoué avec une erreur générique
+2250707000206 Une étape a échoué avec une erreur générique
+2250707000206 Une étape a échoué avec une erreur générique
Tout autre numéro Deux étapes a échoué avec une erreur générique
AUTHORIZATION Bearer Token
Token : TOKEN
HEADERS
Authorization : Basic TOKEN

JSON
{
    "merchant_transaction_id": "7b1a3468-178b-419b-a797-0210c5466e35",
    "amount": 500,
    "currency": "XOF",
    "description": "Payment description",
    "payee": "+22996721268",
    "payee_first_name": "Amidou",
    "payee_last_name": "Amada",
    "channel": "mobile_money",
    "webhook_url": "https://webhook.site/3533c510-719c-4f52-9c2d-be163501db09",
    "success_url": "http://my-url1.com",
    "error_url": "http://my-url1.com",
    "custom_field": "any_string"
}

POST Processus de paiement

https://api.digipay.tech/v1/payment/process
Processus de paiement

Ce guide vous aide à comprendre comment traiter un paiement qui a déjà été initialisé à l'aide de l'API.

Informations sur la réponse

Lors du traitement du paiement, l'API renvoie les informations suivantes :

Paramètre de la réponse Type Description
code entier Le code d'état HTTP renvoyé par l'API
message string Un message indiquant le résultat de l'opération de l'API
data objet Un objet contenant les détails du traitement du paiement
data.payment_token string Un identifiant unique pour l'opération de paiement
data.merchant_transaction_id string Identifiant unique du commerçant pour la transaction
amount entier Le montant du paiement dans la plus petite unité monétaire (par exemple, cents)
currency string Code de la devise du paiement (au format ISO 4217)
description string Brève description de l'opération de paiement
payee valid_payee_phone_number Numéro de téléphone du bénéficiaire
data.payment_method string Le mode de paiement utilisé pour la transaction
data.payment_reference string Une référence unique pour l'opération de paiement (attribuée par la passerelle de paiement ou le processeur)
data.custom_field string Un champ personnalisé ou des informations supplémentaires fournies par le commerçant
data.payment_status string Le statut actuel du paiement
data.payment_message string Le statut actuel du paiement
data.payment_message string Un message associé à l'état du paiement (par exemple, "succès", "échec")
data.payment_processing_url string Une URL pour le traitement du paiement (si la méthode de paiement l'exige)
HEADERS
Authorization : Basic TOKEN

JSON
{
    "payment_token": "payment_token",
    "otp_code": "1234",
    "payee": "+2250707895086",
    "payment_method": "ORANGE_CI"
}

GET Statut du paiement

https://api.digipay.tech/v1/payment/:payment_token
Récupérer les détails d'une opération de paiement

Ce guide vous aide à comprendre comment récupérer les détails d'une opération de paiement qui a été précédemment initialisée à l'aide de l'API. Utilisation du point de terminaison

Pour utiliser ce point de terminaison, remplacez :payment_token dans l'URL du point de terminaison par le jeton de paiement unique attribué à la transaction au cours du processus d'initialisation du paiement. Informations sur la réponse

L'API renvoie une réponse JSON contenant les détails de la transaction de paiement, y compris, mais sans s'y limiter, les informations suivantes :

  • Le montant du paiement
  • La devise dans laquelle le paiement a été effectué
  • Le statut actuel de la transaction de paiement
  • Le mode de paiement utilisé pour la transaction
  • la référence unique de l'opération de paiement attribuée par la passerelle de paiement ou le processeur
  • tout champ personnalisé ou toute information supplémentaire fournie par le commerçant
  • une URL pour le traitement du paiement, si la méthode de paiement l'exige.
Exemple de requête

curl --location 'BASE_URL/v1/payment/payment_token' \
--header 'Authorization: Basic TOKEN'
Exemple de réponse

{
  "code": 200,
  "message": "OK",
  "data": {
    "payment_token": "91ce0608-16b3-4bf4-a2d8-1ab46e776cc2",
    "merchant_transaction_id": "string",
    "amount": 100,
    "currency": "XOF",
    "description": "Payment description",
    "payee": "+22507070707",
    "payment_method": "ORANGE_CI",
    "payment_processing_reference": "CI.230312.1042.343DG",
    "custom_field": "{userId: 12345}",
    "payment_status": "success",
    "payment_status_code": "200",
    "payment_status_message": "SUCCESS"
  }
}
Usage

Ce point d'accès peut être utilisé pour récupérer le statut d'une transaction de paiement et pour réconcilier le paiement avec vos propres enregistrements internes. Il est utile lorsque vous devez vérifier les détails de la transaction ou traiter les litiges ou les demandes de renseignements des clients concernant la transaction.

N'oubliez pas de traiter avec soin toutes les informations sensibles renvoyées par ce point de terminaison afin de garantir la confidentialité et la sécurité de vos clients.

Headers
Authorization : Basic TOKEN

PATH VARIABLES
payment_token : payment_token

Services de paiement

Nos services de paiement constituent un moyen simple, sûr et efficace d'envoyer des transferts (Airtime, MobileMoney, etc.) à vos clients ou à vos employés. Que vous gériez une place de marché internationale, une entreprise technologique ou que vous deviez simplement payer quelques fournisseurs, nos services de paiement simplifient le processus pour vous.

Caractéristiques principales :
  1. Accès mondial : Avec nos services de paiement, vous pouvez effectuer des transferts vers des destinataires situés dans de nombreux pays. Nous prenons en charge un large éventail de méthodes, ce qui facilite l'accès à vos bénéficiaires, où qu'ils se trouvent.
  2. Efficacité et rapidité : Nous traitons les transferts rapidement, ce qui permet à vos bénéficiaires de recevoir leur argent dans les meilleurs délais.
  3. Transactions sécurisées : Nous accordons la priorité à la sécurité de vos transactions. Toutes les informations relatives aux transferts sont cryptées et stockées en toute sécurité afin de protéger votre entreprise et les bénéficiaires de vos paiements.
  4. Intégration facile : Nos services de paiement peuvent être facilement intégrés à vos systèmes existants grâce à notre API. Cela facilite l'automatisation des paiements et réduit les efforts manuels.
  5. Rapports transparents : Nous fournissons des fonctions de reporting complètes, vous permettant de suivre tous vos paiements en temps réel et de gérer efficacement vos opérations de paiement.

Que vous fassiez un transfert unique ou que vous gériez des paiements de masse, nos services de paiement offrent une solution flexible et évolutive pour répondre aux besoins de votre entreprise.

GET Méthodes disponibles

https://api.digipay.tech/v1/misc/payout/services

Ce point d'accès fournit des informations sur les méthodes disponibles, y compris leurs noms, leurs canaux et les pays où elles sont disponibles.

Chaque méthode est représentée par un objet dans le tableau "data". Chaque objet possède les propriétés suivantes

  • name : le nom de la méthode (par exemple, "Airtime" ou "Money Transfer").
  • canal : Le canal par lequel la méthode de paiement fonctionne (par exemple, "airtime" ou "mobile_money").
  • available_countries : Tableau des pays où la méthode de paiement est disponible. Chaque pays est représenté sous la forme d'un objet doté de propriétés :
    • name : le nom du pays.
    • préfixe : L'indicatif téléphonique du pays.
    • code : Le code ISO à deux lettres du pays.

Par exemple, la méthode "Airtime" est disponible dans de nombreux pays, dont le Bénin (+229, BJ), le Burkina Faso (+226, BF), etc.

La réponse du point d'accès commence par un message d'état, qui comprend :

  • code : Le code d'état HTTP de la réponse (dans ce cas, 200, indiquant une demande réussie).
  • message : Une brève description de l'état de la réponse (dans ce cas, OK).

Ces informations peuvent être utiles pour comprendre quels types de transferts peuvent être effectués par l'intermédiaire de votre service et où ces transferts peuvent être envoyés.

Headers
Authorization : Basic TOKEN

POST Exécuter un transfert

https://api.digipay.tech/v1/payout/transfer
Exécuter un transfert

Ce guide vous aidera à exécuter un transfert vers n'importe quel couloir disponible.

Ceci est valable pour les canaux : mobile_money, airtime.

Statuts de transfert

Le transfert peut avoir l'un des statuts suivants :

Statut Description
new Le transfert est nouvellement créé
success Le transfert a réussi
pending Le transfert est en attente
failed Le transfert a échoué
refunded Le transfert est remboursé
cancelled Le transfert est annulé

Headers
Authorization : Basic TOKEN

Headers
Authorization : Basic TOKEN
Body

JSON
{
    "merchant_transaction_id": "c7b8a6e0-6fd1-49b0-afec-c73056a7ce37",
    "amount": 500,
    "currency": "XOF",
    "description": "Payment description",
    "channel": "airtime",
    "country_code": "CI",
    "receiver_account": "+2250707000200",
    "receiver_first_name": "Amidou",
    "receiver_last_name": "Amada",
    "webhook_url": "https://webhook.site/3533c510-719c-4f52-9c2d-be163501db09",
    "custom_field": "any_string"
}
Exemple de requête

JSON
curl --location 'BASE_URL/v1/payout/transfer' \
--header 'Authorization: Basic TOKEN' \
--data '{
    "merchant_transaction_id": "a01cba0d-9d33-4c48-9044-cb5173272f99",
    "amount": 500,
    "currency": "XOF",
    "description": "Payment description",
    "channel": "mobile_money",
    "country_code": "CI",
    "receiver_account": "+2250707000200",
    "receiver_first_name": "Amidou",
    "receiver_last_name": "Amada",
    "webhook_url": "https://webhook.site/3533c510-719c-4f52-9c2d-be163501db09",
    "custom_field": "any_string"
}'
Exemple de réponse

JSON
{
  "code": 201,
  "message": "CREATED",
  "data": {
    "transfer_token": "992883ba-ce2b-46fd-9fc3-4154c77f692f",
    "merchant_transaction_id": "1612a5a0-dfc5-4175-ab62-8f657d689670",
    "country_name": "Côte d'Ivoire",
    "country_code": "CI",
    "amount": 500,
    "description": "Payment description",
    "channel": "mobile_money",
    "receiver_account": "+2250707000200",
    "receiver_first_name": "Amidou",
    "receiver_last_name": "Amada",
    "webhook_url": "https://webhook.site/3533c510-719c-4f52-9c2d-be163501db09",
    "custom_field": "any_string",
    "status": "new"
  }
}

GET Statut de transfert

https://api.digipay.tech/v1/payout/transfer/:transfer_token
Récupérer les détails d'un transfert

Ce guide vous aide à comprendre comment récupérer les détails d'une transaction de transfert qui a été initialisée précédemment en utilisant l'API DigiPay. Utilisation du point de terminaison

Pour utiliser ce point de terminaison, remplacez le :transfer_token dans l'URL du point de terminaison par le jeton de paiement unique assigné à la transaction lors du processus d'initialisation du paiement.

Usage

Ce point d'accès peut être utilisé pour récupérer le statut d'une transaction de transfert et pour la réconcilier avec vos propres enregistrements internes. Il est utile lorsque vous devez vérifier les détails de la transaction ou traiter les litiges ou les demandes des clients concernant la transaction.

N'oubliez pas de traiter avec soin toutes les informations sensibles renvoyées par ce point de terminaison afin de garantir la confidentialité et la sécurité de vos clients.

Headers
Authorization : Basic TOKEN
PATH VARIABLES
transfer_token : 992883ba-ce2b-46fd-9fc3-4154c77f692f
Exemple de requête

CURL
curl --location 'BASE_URL/v1/payout/transfer/992883ba-ce2b-46fd-9fc3-4154c77f692f' \
--header 'Authorization: Basic TOKEN'
Exemple de réponse

JSON
{
  "code": 200,
  "message": "OK",
  "data": {
    "transfer_token": "992883ba-ce2b-46fd-9fc3-4154c77f692f",
    "merchant_transaction_id": "1612a5a0-dfc5-4175-ab62-8f657d689670",
    "country_name": "Côte d'Ivoire",
    "country_code": "CI",
    "amount": 500,
    "description": "Payment description",
    "channel": "mobile_money",
    "receiver_account": "+2250707000200",
    "receiver_first_name": "Amidou",
    "receiver_last_name": "Amada",
    "webhook_url": "https://webhook.site/3533c510-719c-4f52-9c2d-be163501db09",
    "custom_field": "any_string",
    "status": "new"
  }
}

Webhook

https://api.digipay.tech/v1/payout/transfer/:transfer_token
Intégration de Webhook

Le webhook de paiement de l'API est un outil puissant qui permet à votre système d'être informé de l'état des transactions traitées par l'intermédiaire de l'API. Ce guide vous guidera à travers les étapes de l'intégration du webhook de paiement de l'API dans votre système.

Étape 1 : Configurer une URL de webhook

La première étape consiste à créer un point de terminaison dans votre application qui recevra et traitera les requêtes POST entrantes du webhook. Cette URL doit être accessible au public et doit utiliser HTTPS pour garantir la sécurité des données transmises.

Étape 2 : Enregistrer l'URL du webhook

Après avoir défini votre point de terminaison et l'avoir configuré sur le système. L'API enverra des notifications webhook à votre point de terminaison spécifié.

Étape 3 : Traitement de la charge utile du webhook

La charge utile envoyée par la requête POST du webhook contient des informations sur l'événement qui a déclenché le webhook et les détails de l'événement. Vous devrez analyser ces données et les utiliser pour mettre à jour votre système.

Voici quelques-uns des champs que l'on peut s'attendre à trouver dans la charge utile :

  • event : Le type d'événement qui a déclenché le webhook (par exemple, "payment.success.webhook" ou "payment.failed.webhook").
  • data : Un tableau contenant des informations détaillées sur l'événement :
    • payment_token : Identifiant unique de l'intention de paiement.
    • merchant_transaction_id : Référence interne de la transaction.
    • amount : Le montant du paiement.
    • currency : La devise du paiement.
    • payee : Le destinataire du paiement.
    • payment_method : Le mode de paiement utilisé pour la transaction.
    • payment_processing_reference : Référence du processeur de paiement.
    • payment_status : Statut actuel du paiement (par exemple, "succès", "échec").
    • payment_status_code : Code d'état de l'organisme de paiement pour la transaction.
    • payment_status_message : Message de l'organisme de paiement décrivant le statut de la transaction.
Étape 4 : Vérifier la signature

Pour vous assurer que la demande entrante provient bien de l'API, vous devez valider l'en-tête "X-SIGNATURE". Utilisez la clé secrète de votre webhook et l'algorithme HMAC SHA-256 pour calculer une signature et la comparer à la signature reçue. Rejetez toutes les demandes pour lesquelles la signature calculée ne correspond pas à la signature reçue.

Voici un exemple en PHP :


PHP

$payload = json_encode($data); // Assume $data is the 'data' array from the webhook payload
$receivedSignature = $_SERVER['HTTP_X_SIGNATURE']; // Assume this is the received 'X-OrizonPay-SIGNATURE' header
$privateKey = 'your_private_key';
$calculatedSignature = hash_hmac('sha256', $payload, $privateKey);
if (hash_equals($calculatedSignature, $receivedSignature)) {
    echo "Signature is valid!";
   // Process the webhook information here
} else {
    echo "Signature is invalid!";
}

Voici un exemple en Javascript :


Javascript

import * as crypto from 'crypto';
const payload = JSON.stringify(data); // Assume data is the 'data' array from the webhook payload
const receivedSignature = 'received_signature'; // Assume this is the received 'X-SIGNATURE' header
const privateKey = 'your_private_key';
const hmac = crypto.createHmac('sha256', privateKey);
hmac.update(payload);
const calculatedSignature = hmac.digest('hex');
if (calculatedSignature === receivedSignature) {
    console.log('Signature is valid!');
    // Process the webhook information here
} else {
    console.log('Signature is invalid!');
}
Étape 5 : Envoyer une réponse

Après avoir traité le webhook, renvoyez une réponse avec le code d'état HTTP 200 pour accuser réception. Cela indique au système de l'API DigiPay que vous avez bien reçu le webhook et qu'il n'a pas besoin de l'envoyer à nouveau.


Introduction
Authentification
Paiement
Services de paiement
Webhook