Lire toutes les sections en bleues pour mieux comprendre la documentation et les sections en orange signifiant l'alerte afin d'éviter des erreurs à commettre durant les intégrations et les procédures détaillées pour les intégration.
Les clés d'API sont vos références numériques auprès des systèmes de PayDunya. Nous les utilisons afin d'identifier votre compte et les applications que vous allez créer. Ces clés sont nécessaires pour toute intégration des APIs de paiements PayDunya. Voici chronologiquement la marche à suivre :
Vous devez d'abord avoir un compte PayDunya Business activé. Créez-en un si besoin y est.
Connectez-vous à votre compte et cliquez sur oneAPI au niveau du menu à gauche.
Cliquez sur le bouton Configurer une nouvelle application et remplissez le formulaire.
Choisissez MODE TEST, JE VEUX FAIRE DES TESTS DE PAIEMENT.
puis
ACTIVER LE MODE DE PRODUCTION
.
https://app.paydunya.com/api/v1/checkout-invoice/create
curl -H "Content-Type: application/json" \
-H "PAYDUNYA-MASTER-KEY: wQzk9ZwR-Qq9m-0hD0-zpud-je5coGC3FHKW" \
-H "PAYDUNYA-PRIVATE-KEY: live_private_rMIdJM3PLLhLjyArx9tF3VURAF5" \
-H "PAYDUNYA-TOKEN: IivOiOxGJuWhc5znlIiK" \
-X POST -d '{"invoice": {"total_amount": 5000, "description": "Chaussure VANS dernier modèle"},"store": {"name": "Magasin le Choco"}}' \
"https://app.paydunya.com/api/v1/checkout-invoice/create"
{
"response_code":"00",
"response_text":"https://app.paydunya.com/checkout/invoice/ERtyuILouhhRHICF0HboN",
"description":"Checkout Invoice Created",
"token":"ERtyuILouhhRHICF0HboN"
}
Voici présentée ci-dessous, la structure complète de l'objet JSON de facturation PayDunya. La plupart des éléments sont optionnels, mais prenez l'habitude de tous les fournir car cela vous offrira beaucoup plus de flexibilité. Les nœuds JSON obligatoires pour la soumission d'une requête HTTP POST de paiement de facture vers nos Endpoints API sont : le nœud racine invoice
et son noeud enfant total_amount
ainsi que le nœud racine store
et son noeud enfant name
.
{
"invoice": {
"items": {
},
"taxes": {
},
"total_amount": 5000,
"description": ""
},
"store": {
"name": "Magasin le Choco",
"tagline": "",
"postal_address": "",
"phone": "",
"logo_url": "",
"website_url": ""
},
"custom_data": {
},
"actions": {
"callback_url": ""
}
}
Référez-vous à la structure complète JSON afin de savoir de manière exacte où insérer la structure suivante. Les "items"
sont utilisés pour afficher au client sur la page de paiement la liste des articles qu'il a commandé. PayDunya n'utilisera en aucun cas l'un des montants déclarés dans "items"
pour facturer le client.
{
"items": {
"item_0": {
"name": "Chaussures Croco",
"quantity": 3,
"unit_price": "10000",
"total_price": "30000",
"description": "Chaussures faites en peau de crocrodile authentique qui chasse la pauvreté"
},
"item_1": {
"name": "Chemise Glacée",
"quantity": 1,
"unit_price": "5000",
"total_price": "5000",
"description": ""
}
}
Si vous désirez afficher sur la facture PayDunya les taxes que vous appliquez (TVA, Frais de livraison...) vous pouvez le faire en utilisant le noeud JSON taxes
comme illustré ci-dessous.
"taxes": {
"tax_0": {
"name": "TVA (18%)",
"amount": 6300
},
"tax_1": {
"name": "Livraison",
"amount": 1000
}
}
Si vous avez besoin d'ajouter des données supplémentaires (par exemple pour un jeu concours, vous pouvez enregistrer des informations sur chaque gagnant) à des fins d'utilisation ultérieure, nous vous offrons la possibilité de sauvegarder ces données sur nos serveurs et de pouvoir les récupérer une fois le paiement réussi.
{info.fa-lightbulb-o}
Les données personnalisées ne sont affichées ni sur la page de paiement, ni sur les factures/reçus, ni sur les téléchargements et impressions. Elles sont uniquement récupérées à l'aide de notre action de callback confirm
au niveau de l'API.
"custom_data": {
"categorie": "Jeu concours",
"periode": "Noël 2015",
"numero_gagnant": 5,
"prix" : "Bon de réduction de 50%"
}
"custom_data": {
"phone_brand": "Nokia",
"IMEI": "72892821010728",
"model": "Luna"
}
Il se peut que pour des raisons x ou y, que la confirmation de paiement ne soit pas instantanée (par exemple le temps que le client tape son code secret sur son téléphone ou le temps de latence du réseau téléphonique), l'IPN vous permet de recevoir instantanément les informations de la transaction pour un paiement confirmé
, annulé
ou échoué
.
L'IPN correspond à l'URL d'un fichier sur votre serveur sur lequel vous souhaitez recevoir les informations de la transaction de paiement, ces informations sont à traiter en backoffice. PayDunya utilise cette URL afin de vous envoyer instantanément, par requête POST
, les informations relatives à la transaction de paiement.
"actions": {
"callback_url": "http://www.magasin-le-choco.com/callback_url.php"
}
La validation réussie de la transaction de paiement retourne la structure ci-dessous contenant les informations sur le client, l'URL de sa facture PayDunya en version PDF et également un hash permettant de vérifier que les données reçues proviennent bien de nos serveurs.
Par ailleurs il est capital de comprendre à titre d'information que les paiements annulés
ou échoués
gardent le même format de reponse sauf la valeur du statut qui change : pour les paiements échoués le statut devient failed
et pour les paiements annulés
devient cancelled
.
array (
'data' =>
array (
'response_code' => '00',
'response_text' => 'Transaction Found',
'hash' => '8c6666a27fe5daeb76dae6abc7308a557dca5be1bda85dfe5d81fa330cdc0bc3c4b37765fe5d2cc36aa2ba0f9284226a80f5488d14740fa70769d6079a179406',
'invoice' =>
array (
'token' => 'test_jkEdPY8SuG',
'items' =>
array (
'item_0' =>
array (
'name' => 'Chaussures Croco',
'quantity' => '3',
'unit_price' => '10000',
'total_price' => '30000',
'description' => 'Chaussures faites en peau de crocrodile authentique qui chasse la pauvreté',
),
'item_1' =>
array (
'name' => 'Chemise Glacée',
'quantity' => '1',
'unit_price' => '5000',
'total_price' => '5000',
'description' => '',
),
),
'taxes' =>
array (
'tax_0' =>
array (
'name' => 'TVA (18%)',
'amount' => '6300',
),
'tax_1' =>
array (
'name' => 'Livraison',
'amount' => '1000',
),
),
'token': 'test_Jh2T8skw1j',
'total_amount' => '42300',
'description' => 'Paiement de 42300 FCFA pour article(s) achetés sur Magasin le Choco',
),
'custom_data' =>
array (
'categorie' => 'Jeu concours',
'periode' => 'Noël 2015',
'numero_gagnant' => '5',
'prix' => 'Bon de réduction de 50%',
),
'actions' =>
array (
'cancel_url' => 'http://magasin-le-choco.com/cancel_url.aspx',
'callback_url' => 'http://magasin-le-choco.com/callback_url.aspx',
'return_url' => 'http://magasin-le-choco.com/return_url.aspx',
),
'mode' => 'test',
'status' => 'completed',
'customer' =>
array (
'name' => 'Alioune Faye',
'phone' => '774563209',
'email' => 'aliounefaye@gmail.com',
),
'receipt_url' => 'https://paydunya.com/sandbox-checkout/receipt/pdf/test_jkEdPY8SuG.pdf',
),
)
Le hash renvoyé par PayDunya est le hash de votre MasterKey (clé principale). Ce hash vous permettra de vous assurer que les données que vous avez reçues proviennent de nos serveurs. L'algorithme utilisé pour obtenir le hash est du SHA-512
. Dans la réponse attendue un message d'échec est renseigné dans le noeud fail_reason
seulement pour les transactions par carte bancaires échouées
ou annulées
.
https://app.paydunya.com/api/v1/softpay/card
{
"full_name": "John Doe",
"email": "test@paydunya.com",
"card_number": "1234567890123456",
"card_cvv": "123",
"card_expired_date_year": "25",
"card_expired_date_month": "11",
"token": "T3JgbeD3xHXoWtmqOktm"
}
{
"success": true,
"message": "Le paiement a été effectué avec succès.",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency" : "XOF" // Si c'est le payeur qui supporte les frais.
}
{
"success": true,
"message": "Rediriger vers cette URL pour completer le paiement.",
"url": "https://paydunya.com/card_3ds_redirect?key=eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjYwYmRjNmU0LWRjNjMtNDIxNy05OTU3LTVjZDc0M5zSUQiOiJmZjkxMzc1Mi0zOGRmLTRjZTYtYjM5Zi00MTg4MTE0OTg1ZWQiLCJjaGFsbGVuZ2VXaW5kb3dTaXplIjoiMDUiLCJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIn0&url=https://authentication.cardinalcommerce.com/ThreeDSecure/V2_1_0/CReq",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency" : "XOF" // Si c'est le payeur qui supporte les frais.
}
Après avoir généré le token, vous devez demander à l'utilisateur final de générer un code de paiement Orange Money en suivant le code USSD suivant:
#144#391*USER_ORANGE_MONEY_PIN_CODE#
https://app.paydunya.com/api/v1/softpay/orange-money-senegal
{
"customer_name": "John Doe",
"customer_email": "test@gmail.com",
"phone_number": "778676477",
"authorization_code": "152347",
"invoice_token": "GS46gkCAnRv3WfRwFdJU"
}
{
"success": true,
"message": "Transaction effectuée avec succès",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency" : "XOF" // Si c'est le payeur qui supporte les frais.
}
https://app.paydunya.com/api/v1/softpay/free-money-senegal
{
"customer_name": "John Doe",
"customer_email": "test@gmail.com",
"phone_number": "768690999",
"payment_token": "GS46gkCAnRv3WfRwFdJU"
}
{
"success": true,
"message": "Opération réussie, Veuillez tapez #150# pour finaliser votre paiement.",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency" : "XOF" // Si c'est le payeur qui supporte les frais.
"data": {
"status": "PENDING",
"amount": 200,
"currency": "XOF",
"customermsisdn": 768690999,
"transactionid": "MP210921.1230.B04577",
"externaltransactionid": "FM076_93108370"
}
}
https://app.paydunya.com/api/v1/softpay/expresso-senegal
{
"expresso_sn_fullName": "John Doe",
"expresso_sn_email": "test@gmail.com",
"expresso_sn_phone": "705189525",
"payment_token": "GS46gkCAnRv3WfRwFdJU"
}
{
"success" : true,
"message" : "Votre paiement est en cours de traitement. Merci de valider le paiement après reception de sms pour le compléter.",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency": "XOF" // Si c'est le payeur qui supporte les frais.
}
https://app.paydunya.com/api/v1/softpay/wave-senegal
{
"wave_senegal_fullName": "John Doe",
"wave_senegal_email": "test@gmail.com",
"wave_senegal_phone": "777777777",
"wave_senegal_payment_token": "OnW1IkMIQDTiJnQ9S3Ix"
}
{
"success": true,
"message": "Rediriger vers cette URL pour completer le paiement.",
"url": "https://pay.wave.com/c/cos-1cj669hbr1350?a=200&c=XOF&m=JOE",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency": "XOF" // Si c'est le payeur qui supporte les frais.
}
https://app.paydunya.com/api/v1/softpay/wizall-money-senegal
{
"customer_name": "John Doe",
"customer_email": "test@gmail.com",
"phone_number": "777777777",
"invoice_token": "RAV6KK9Ncfy2a6vb3KDT"
}
{
"success": true,
"message": "Requête de paiement effectuée!",
"data": {
"Operation": "MerchantGetMoney",
"TransactionID": "286513913",
"details": {
"message": "MerchantGetMoney Successful",
"service": "merchant-get-money",
"cid": "489eca906856e440e193ab19"
}
},
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency": "XOF" // Si c'est le payeur qui supporte les frais.
}
https://app.paydunya.com/api/v1/softpay/wizall-money-senegal/confirm
{
"authorization_code": "461050",
"phone_number": "777777777",
"transaction_id": "286513913"
}
{
"success": true,
"message": "Paiement réussi",
"return_url": "https://www.paydunya.com/successful-payment",
"token": "oeKyZGwexXkBk4uYyRoJ"
}
Après avoir généré le token, vous devez demander à l'utilisateur final de générer un code de paiement Orange Money en suivant le code USSD suivant:
#144*82# + option 2 pour obtenir le code de paiement.
https://app.paydunya.com/api/v1/softpay/orange-money-ci
{
"orange_money_ci_customer_fullname": "John Doe",
"orange_money_ci_email": "test@gmail.com",
"orange_money_ci_phone_number": "0777568646",
"orange_money_ci_otp": "8562",
"payment_token": "ljUZxD5T3RRxhpoOl66b"
}
{
"success": true,
"message": "Paiement effectué avec succès."
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency": "XOF" // Si c'est le payeur qui supporte les frais.
}
https://app.paydunya.com/api/v1/softpay/mtn-ci
{
"mtn_ci_customer_fullname": "John Doe",
"mtn_ci_email": "test@gmail.com",
"mtn_ci_phone_number": "664142312",
"mtn_ci_wallet_provider": "MTNCI",
"payment_token": "OnW1IkMIQDTiJnQ9S3Ix"
}
{
"success": true,
"message": "success message",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency": "XOF" // Si c'est le payeur qui supporte les frais.
}
https://app.paydunya.com/api/v1/softpay/moov-ci
{
"moov_ci_customer_fullname": "Camille",
"moov_ci_email": "camillemilly7@gmail.com",
"moov_ci_phone_number": "0153401679",
"payment_token": "dzSNGqLCohvsFq9KlCmN"
}
{
"success": true,
"message": "Votre transaction a été validée avec succès.",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency" : "XOF" // Si c'est le payeur qui supporte les frais.
}
Lorsque vous lancez un paiement par MOOV CI
, un popup s'ouvre automatiquement sur votre téléphone avec un champs de saisie de votre code secret
pour validation du paiement.
Si le delai de la validation dépasse 30 secondes
, L'API renvoie la réponse ci-dessous :
{
"success": false,
"message": "Vous avez dépassé le délai de validation de la transaction."
}
https://app.paydunya.com/api/v1/softpay/wave-ci
{
"wave_ci_fullName": "Camille",
"wave_ci_email": "test@gmail.com",
"wave_ci_phone": "774599837",
"wave_ci_payment_token" : "eVnEmduF6DmaXKxsJn4r"
}
{
"success": true,
"message": "Rediriger vers cette URL pour completer le paiement.",
"url": "https://pay.wave.com/c/cos-1cj669hbr1350?a=200&c=XOF&m=JOE",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency": "XOF" // Si c'est le payeur qui supporte les frais.
}
https://app.paydunya.com/api/v1/softpay/orange-money-burkina
{
"name_bf": "John Doe",
"email_bf": "test@gmail.com",
"phone_bf": "76950976",
"otp_code": "89525",
"payment_token": "lLTs7h0tor82tchzvSec"
}
{
"success": true,
"message": "success message",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency": "XOF" // Si c'est le payeur qui supporte les frais.
}
https://app.paydunya.com/api/v1/softpay/moov-burkina
{
"moov_burkina_faso_fullName": "John Doe",
"moov_burkina_faso_email": "test@gmail.com",
"moov_burkina_faso_phone_number": "51765664",
"moov_burkina_faso_payment_token": "lLTs7h0tor82tchzvSec"
}
{
"success": true,
"message": "Veuillez compléter le paiement en composant le *555*6#.",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency": "XOF" // Si c'est le payeur qui supporte les frais.
}
https://app.paydunya.com/api/v1/softpay/moov-benin
{
"moov_benin_customer_fullname": "Camille",
"moov_benin_email": "camillemilly7@gmail.com",
"moov_benin_phone_number": "0140253725",
"payment_token": "lLTs7h0tor82tchzvSec"
}
{
"success": true,
"message": "Success message",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency": "XOF" // Si c'est le payeur qui supporte les frais.
}
https://app.paydunya.com/api/v1/softpay/mtn-benin
{
"mtn_benin_customer_fullname": "Camille",
"mtn_benin_email": "camillemilly7@gmail.com",
"mtn_benin_phone_number": "66414231",
"mtn_benin_wallet_provider": "MTNBENIN",
"payment_token": "lLTs7h0tor82tchzvSec"
}
{
"success": true,
"message": "Votre paiement est en cours de traitement. Merci de valider le paiement après reception de sms pour le compléter",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency": "XOF" // Si c'est le payeur qui supporte les frais.
}
https://app.paydunya.com/api/v1/softpay/t-money-togo
{
"name_t_money": "Camille",
"email_t_money": "exemple@paydunya.com",
"phone_t_money": "70707070","
"payment_token": "lLTs7h0tor82tchzvSec"
}
{
"success": true,
"message": "Votre paiement est en cours de traitement. Merci de valider le paiement après reception de sms pour le compléter.",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency": "XOF" // Si c'est le payeur qui supporte les frais.
}
https://app.paydunya.com/api/v1/softpay/orange-money-mali
{
"orange_money_mali_customer_fullname": "Camille",
"orange_money_mali_email": "camillemilly7@gmail.com",
"orange_money_mali_phone_number": "90239415",
"orange_money_mali_customer_address" : "Bamako",
"payment_token": "9MHW084mlDTpExGW8OY4",
"orange_money_mali_wallet_otp" : "3333"
}
{
"success": true,
"message": "Paiement effectué avec succès.",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency" : "XOF" // Si c'est le payeur qui supporte les frais.
}
https://app.paydunya.com/api/v1/softpay/moov-mali
{
"moov_ml_customer_fullname": "John Doe",
"moov_ml_email": "test@paydunya.com",
"moov_ml_phone_number": "90239415",
"moov_ml_customer_address" : "Bamako",
"payment_token": "6KIFXkAiAU70uuam5Dix"
}
{
"success": true,
"message": "Merci de finaliser le paiement sur votre téléphone.",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency" : "XOF" // Si c'est le payeur qui supporte les frais.
}
https://app.paydunya.com/api/v1/softpay/paydunya
{
"customer_name": "John Doe",
"customer_email": "exemple@paydunya.com",
"phone_phone": "77777777",
"password": "12345678",
"invoice_token": "lLTs7h0tor82tchzvSec"
}
{
"success": true,
"message": "Success message",
"fees" : 100, // Si c'est le payeur qui supporte les frais.
"currency": "XOF" // Si c'est le payeur qui supporte les frais.
}