Dernière mise à jour le 19/09/2023 à 12:14
MPay met à disposition une API REST qui permet d'interagir avec le service.
Un utilisateur de test, mpay-test@ytsamy.name (avec un mot de passe identique mpay-test@ytsamy.name), est mis à votre disposition afin de pouvoir procéder à des essais avant de travailler sur vos données réelles. Vous pouvez créer, modifier, supprimer les données de cet utilisateur sans danger; elles sont recréées à l'identique quotidiennement à 05:00.
L'URL d'accès à l'API est https://mpay.ytsamy.name/api/.
Note: Afin de ne pas surcharger notre infrastructure, une limitation de débit (rate-limiting) est appliquée au nombre de requêtes par utilisateur (ceci est indiqué dans l'en-tête de la réponse du serveur). Vous pouvez nous contacter si vous avez besoin de capacités supplémentaires.
Les exemples sont donnés avec l'outil en ligne de commande cURL. À vous de les adapter à votre client/langage de programmation favori. Le format général de la commande est le suivant:
curl [options] -i URL...
Les principales options sont les suivantes:
Cette requête permet, après vérification du mot de passe, de récupérer la clé d'accès à l'API (indispensable pour les requêtes suivantes), la date d'expiration de l'abonnement et la liste des puces SIM.
curl -X POST -H 'Content-Type: application/json' -i https://mpay.ytsamy.name/api/user/authenticate --data '{
"email": "mpay-test@ytsamy.name",
"password": "mpay-test@ytsamy.name",
"forceRecreation": true
}'
{
"accessKey": "7kGDSAdKuKHs8dv9Wn9p",
"expiry": "2018-10-09 23:59:59",
"sims": ["4:Orange BF", "5:TELECEL", "SIM 3"]
}
Note: la clé d'accès à l'API est constante. Elle ne change que si vous le demandez explicitement (via le paramètre "forceRecreation", ou sur le site web, à la page d'informations de votre compte). Il s'ensuit que vous avez le choix dans l'écriture de votre client: vous pouvez récupérer la clé de manière dynamique via la méthode "/user/authenticate", ou décider de l'utiliser de manière statique en la copiant directement dans votre code.
Cette requête permet de récupérer la liste des puces SIM.
curl -X GET -i https://mpay.ytsamy.name/api/user/sims
{
"sims": ["4:Orange BF", "5:TELECEL", "SIM 3"]
}
Les puces SIM actuellement installées dans votre smartphone
(cette liste est mise à jour au moment où vous
démarrez le moniteur sur votre smartphone). Le chiffre indiqué
avant chaque nom de puce est un identifiant, utilisé lors
de la création d'un SMS ou d'un
code USSD.
Indiquer ou connaître le nombre de SMS restants sur votre forfait.
Si vous avez activé un forfait qui vous donne droit à un certain
nombre de SMS, vous pouvez l’indiquer à MPay. A chaque envoi de SMS, le
compteur sera décrémenté en conséquence.
curl -X GET -H 'Content-Type: application/json' -i https://mpay.ytsamy.name/api/user/sms-count
curl -X POST -H 'Content-Type: application/json' -i https://mpay.ytsamy.name/api/user/sms-count --data '{
"puceId": 1,
"count": 10
}
Ces deux requêtes sont pratiquement identiques.
La première permet d’obtenir la valeur des compteurs de toutes les puces.
Elle utilise la méthode GET et ne prend pas de paramètre.
La seconde, elle, permet d’indiquer la valeur du compteur pour une puce
donnée. Elle utilise la méthode POST et prend les paramètres suivants:
Le décompte est uniquement à but indicatif. S’il arrive à 0, cela n’empêchera pas l’envoi des SMS. Il peut même être négatif, indiquant ainsi le nombre de SMS que vous avez envoyés au-delà de votre forfait.
Le décompte est stocké sur 2 octets (ce qui permet de prendre en compte des nombres allant de -32768 à 32767). Pour désactiver la fonctionnalité sur une puce, mettez-y la valeur minimale (-32768).
Cette requête sert à modifier un mot de passe
curl -X POST -H 'Content-Type: application/json' -i https://mpay.ytsamy.name/api/user/new-password --data '{
"email": "mpay-test@ytsamy.name",
"oldPassword": "mpay-test@ytsamy.name",
"newPassword": "nouveau"
}'
Obtenir la liste de toutes les opérations effectuées
curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Basic N2tHRFNBZEt1S0hzOGR2OVduOXA6' -i https://mpay.ytsamy.name/api/paiements
[{
"id": 173,
"type": "transfertReception",
"transaction_id": "PP171213.2245.B30709",
"amount": 100,
"amount_debit": null,
"statut": "Pending",
"date": "2017-12-13 22:45:00",
"last_modified": "2018-11-11 23:14:29",
"reseau": "OrangeMoney",
"original_sms": "Vous avez recu 100 FCFA du 75353535,Zia. Le solde de votre compte est de 100 FCFA Trans ID: PP171213.2245.B30709.",
"original_sender": "75353535",
"nom_expediteur": "Zia",
"numero_destinataire": null,
"nom_destinataire": null,
"solde": 100,
"creation_date": "2018-11-11 23:14:29",
"callbackResult": "200"
}, {
"id": 174,
"type": "transfertReception",
"transaction_id": "PP171214.0646.B30710",
...
"creation_date": "2018-11-11 23:17:50",
"callbackResult": "200"
}]
Voir la description des champs au paragraphe Détails d'une opération
Pour cette requête, comme pour toutes celles qui renvoient des enregistrements (liste, affichage, recherche de paiements, de SMS ou de codes USSD), il est possible de préciser les champs qui vous intéressent et économiser ainsi de la bande passante à l'aide du paramètre GET "fields":
curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Basic N2tHRFNBZEt1S0hzOGR2OVduOXA6' -i https://mpay.ytsamy.name/api/paiements?fields=id,transaction_id,amount,statut
Le résultat devient alors:
[{
"id": 173,
"transaction_id": "PP171213.2245.B30709",
"amount": 100,
"statut": "Pending"
}, {
"id": 174,
"transaction_id": "PP171214.0646.B30710",
"amount": 200,
"statut": "Pending"
}, {
...
}]
Il est possible de trier les résultats avec le paramètre sort
(ex: sort=date pour trier par date, sort=-date pour un tri décroissant) ou de donner
des critères de sélection. Ex: PaiementSearch[xxx]=yyy
avec xxx le nom du champ,
et yyy la valeur qu’il doit avoir.
Des critères peuvent être donnés pour tous les champs existants (en particulier les champs id ou transaction_id). En outre les critères supplémentaires suivants sont disponibles:
PaiementSearch[debut]
et PaiementSearch[fin]
: permettent de limiter la recherche à
une période donnée (la date est au format YYYY-mm-dd)
PaiementSearch[nom_correspondant]
: permet de rechercher le nom du correspondant (que ce
soit un expéditeur ou un destinataire)
PaiementSearch[numero_correspondant]
: idem, mais avec le numéro (expéditeur
ou destinataire)
PaiementSearch[montant]
: permet de rechercher un montant, qu’il soit porté
au crédit ou au débit. Il est même possible de faire
précéder le montant d’un opérateur:
PaiementSearch[montant]=>=500
pour avoir les débits ou crédits
supérieurs ou égaux à 500F
curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Basic N2tHRFNBZEt1S0hzOGR2OVduOXA6' -i https://mpay.ytsamy.name/api/paiements?sort=-date&per-page=5&PaiementSearch[debut]=2019-02-01&PaiementSearch[fin]=2021-02-22&PaiementSearch[montant]=>=300
Si le nombre d'enregistrement est important, le résultat est scindé en plusieurs pages. Les en-têtes suivants sont ajoutés à la réponse:
Link: <https://mpay.ytsamy.name/api/paiements?page=1&per-page=10>; rel=self,
<https://mpay.ytsamy.name/api/paiements?page=2&per-page=10>; rel=next,
<https://mpay.ytsamy.name/api/paiements?page=200&per-page=10>; rel=last
X-Pagination-Current-Page: 1
X-Pagination-Page-Count: 200
X-Pagination-Per-Page: 10
X-Pagination-Total-Count: 2000
Link
: les liens vers les pages actuelle (rel=self), première (rel=first),
précédente (rel=prev), suivante (rel=next) et dernière (rel=last)
X-Pagination-Current-Page
: index de la page actuelle
X-Pagination-Page-Count
: nombre total de pages
X-Pagination-Per-Page
: nombre d'enregistrements par page
X-Pagination-Total-Count
: nombre total d'enregistrements
2 paramètres supplémentaires sont disponibles pour gérer la pagination:
page
: indique la page que vous souhaitez rapatrier
per-page
: indique le nombre d’enregistrement que vous souhaitez sur chaque
page (indiquer perpage=0
pour désactiver la pagination et rapatrier ainsi
tous les résultats en une seule fois)
Afficher les détails d'une opération unique à partir de son identifiant interne d'enregistrement
Affichage de l'enregistrement 174:
curl -X GET -H 'Authorization: Basic N2tHRFNBZEt1S0hzOGR2OVduOXA6' -i https://mpay.ytsamy.name/api/paiements/174
{
"id": 174,
"type": "transfertReception",
"transaction_id": "PP171214.0646.B30710",
"amount": 200,
"amount_debit": null,
"statut": "Pending",
"date": "2017-12-14 06:46:00",
"last_modified": "2018-11-11 23:17:49",
"reseau": "OrangeMoney",
"original_sms": "Vous avez recu 200 FCFA du 76161616,Tao. Le solde de votre compte est de 300 FCFA Trans ID: PP171214.0646.B30710.",
"original_sender": "76161616",
"nom_expediteur": "Tao",
"numero_destinataire": null,
"nom_destinataire": null,
"solde": 300,
"creation_date": "2018-11-11 23:17:49",
"callbackResult": "200"
}
Cette requête est dépréciée (sera prochainement supprimée). Privilégiez la requête pour la liste des opérations qui permet d’indiquer davantage de critères de recherche (y compris l’identifiant de transaction)
Retrouver un paiement à partir de l'identifiant de la transaction que vous indique votre utilisateur
curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Basic N2tHRFNBZEt1S0hzOGR2OVduOXA6' -i https://mpay.ytsamy.name/api/paiement/search --data '{
"transaction_id": "PP171214.0646.B30710",
"statut": "any"
}'
{
"id": 174,
"type": "transfertReception",
"transaction_id": "PP171214.0646.B30710",
...
"creation_date": "2018-11-11 23:17:49",
"callbackResult": "200"
}
Voir la description des champs au paragraphe Détails d'une opération.
Une fois qu'un paiement a été pris en compte, il est bon de le noter afin d'éviter un double usage. Cela se fait en modifiant le statut du paiement.
curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Basic N2tHRFNBZEt1S0hzOGR2OVduOXA6' -i https://mpay.ytsamy.name/api/paiement/statut --data '{
"id": 173,
"statut": "OK"
}'
Télécharge un relevés de vos opérations
curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Basic N2tHRFNBZEt1S0hzOGR2OVduOXA6' -i https://mpay.ytsamy.name/api/paiement/export-excel --data '{
"debut": "2018-04-01",
"fin": "2018-04-30 23:59:59"
}'
Affiche une liste de tous les SMS envoyés.
curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Basic N2tHRFNBZEt1S0hzOGR2OVduOXA6' -i https://mpay.ytsamy.name/api/sms
Pour limiter les champs renvoyés, vous pouvez utiliser le paramètre GET fields:
https://mpay.ytsamy.name/api/sms?fields=id,destinataire,contenu
Avec limitation des champs...
[{
"id": 571,
"destinataire": "71815140",
"contenu": "Message de test 19:41"
}, {
"id": 574,
"destinataire": "71815140",
"contenu": "Message de test 20:35"
},{
...
"id": 581,
"destinataire": "71815140",
"contenu": "Message de test 22:27"
}]
La description des champs se trouve dans le paragraphe Affichage d'un SMS
Affichage de l'enregistrement correspondant à un SMS à partir de l'identifiant.
Affichage de l'enregistrement 581:
curl -X GET -H 'Authorization: Basic N2tHRFNBZEt1S0hzOGR2OVduOXA6' -i https://mpay.ytsamy.name/api/sms/581
{
"id": 581,
"destinataire": "71815140",
"contenu": "Message de test 22:27",
"puceId": 1,
"puce": "ONATEL",
"creation_date": "2018-10-13 22:27:17",
"modification_date": "2018-10-13 22:27:30",
"statut": 5,
"numberOfParts":3,
"sentParts":"1, 2, 3",
"deliveredParts":"1",
"erreur": null
}
Création d'un SMS pour envoi à un numéro donné
curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Basic N2tHRFNBZEt1S0hzOGR2OVduOXA6 ' -i https://mpay.ytsamy.name/api/sms --data '{
"destinataire": "71815140",
"puceId": "1",
"contenu": "Message de test 22:01"
}'
Note: d'autres codes HTTP peuvent apparaitre, en fonction de la situation.
Dans la réponse du serveur, l'en-tête Location indique l'URL à laquelle on peut consulter l'enregistrement:
Location: /sms/598
ce qui signifie:
https://mpay.ytsamy.name/api/sms/598
Un autre en-tête intéressant est Sms-Count
Sms-Count: 10
Si vous avez activé un forfait vous donnant droit à un certain nombre de SMS,
vous avez la possibilité de l’indiquer à MPay. Ainsi, à chaque
SMS envoyé, le compteur sera décrémenté. Ici, il reste 10 SMS
pour la puce sélectionnée pour l'envoi.
Attention: il s’agit de la
valeur au moment de la soumission de la requête, mais avant envoi effectif par
le smartphone, ce qui veut dire par exemple que si le SMS que vous venez de soumettre est
fragmenté en 2 parties pour envoi, le compteur de la puce 1 (celle qui
est utilisée pour envoyer le SMS) passera de 10 à 8.
Pour activer cette fonctionnalité de décompte des SMS restants,
rendez-vous à au paragraphe décompte des SMS restants.
Affiche une liste de tous les codes USSD envoyés au smartphone.
curl -X GET -H 'Authorization: Basic X2d4VGhMb01HanZGY0gxVTFzREU6' -i https://mpay.ytsamy.name/api/ussdcodes
Pour limiter les champs renvoyés, vous pouvez utiliser le paramètre GET fields:
https://mpay.ytsamy.name/api/ussdcodes?fields=id,code,puce
Avec limitation des champs...
[{
"id":21,
"code":"*200*3*1*1*1*1*1#",
"puce":"ONATEL"
},{
"id":22,
"code":"*110#",
"puce":"TELECEL"
},{
"id":23,
"code":"*144*9*1*1234#",
"puce":"Orange BF"
},{
...
"id":27,
"code":"*110#",
"puce":"T-Mobile"
}]
La description des champs se trouve dans le paragraphe Affichage d'un code USSD
Affichage de l'enregistrement correspondant à un code USSD à partir de l'identifiant.
Affichage de l'enregistrement 23:
curl -X GET -H 'Authorization: Basic N2tHRFNBZEt1S0hzOGR2OVduOXA6' -i https://mpay.ytsamy.name/api/ussdcodes/23
{
"id":23,
"code":"*144*9*1#,1234",
"statut":5,
"response":"Votre solde disponible est ... FCFA,Compte Retrait Gratuit ... FCFA Trans ID: ....",
"creation_date":"2019-08-14 00:52:01",
"modification_date":"2019-08-14 00:52:01",
"puce":"Orange BF",
"puceId":3
}
Création et envoi d'un code USSD pour exécution par le smartphone
curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Basic N2tHRFNBZEt1S0hzOGR2OVduOXA6 ' -i https://mpay.ytsamy.name/api/ussdcodes --data '{
"puceId": "4",
"code": "*200*3*1*1*1*1*1#"
}'
La réponse du serveur contient, entre autres, l'en-tête Location indiquant l'URL à laquelle on peut consulter l'enregistrement:
Location: /ussdcodes/598
ce qui signifie:
https://mpay.ytsamy.name/api/ussdcodes/598
Note: d'autres codes HTTP peuvent apparaitre, en fonction de la situation
Envoie un signal (un ping) à l'application mobile pour vérifier qu'elle tourne effectivement (auquel cas elle répondra par un pong). Au passage, on récupère des informations utiles sur l’état du téléphone.
curl -X POST -H 'Authorization: Basic X2d4VGhMb01HanZGY0gxVTFzREU6' -i https://mpay.ytsamy.name/api/ping
{
"id": 1,
"userId": 3,
"ping_date": "2023-09-19 10:15:19",
"pong_date": null,
"status": 3,
"erreur": null,
"batteryLevel": null,
"batteryStatus": null,
"batteryPlug": null,
"gsmLevels": null
}
La description des champs se trouve dans le paragraphe Affichage des informations d'un ping
Affiche toutes les informations sur le ping en cours
curl -X GET -H 'Authorization: Basic X2d4VGhMb01HanZGY0gxVTFzREU6' -i https://mpay.ytsamy.name/api/ping/view
{
"id": 1,
"userId": 3,
"ping_date": "2023-09-19 10:15:19",
"pong_date": "2023-09-19 10:19:31",
"status": 4,
"erreur": null,
"batteryLevel": 100,
"batteryStatus": "FULL",
"batteryPlug": "USB",
"gsmLevels": "0, 4"
}