Cette page répertorie les différents fichiers utiles dans le cadre de l'utilisation de MPay.
L'application Android (v1.0.32.5.WIP) peut être téléchargée
sur Google Play
ou directement
ici.
A installer sur le smartphone qui contient les puces SIM
recevant les paiements.
La différence entre la version du Google Play et celle du site web
réside en ce que Google Play exige, au moment de la compilation, que l'on
cible l'API niveau 31 (Android 12). Mais Android, depuis le niveau d'API 29
(version 10) ne permet plus à une application
tournant en tâche de fond de démarrer une activité. Or, c'est
par ce procédé que MPay exécute les codes USSD qui lui sont soumis
via l'API. La version disponible ici sur le site web est compilée
en ciblant l'API niveau 26 (Android 8) et peut donc offrir toutes les
fonctionnalités initialement prévues.
Si vous n'avez pas besoin d'exécuter des codes USSD via
l'API, ou si votre smartphone tourne sur Android 9 (ou inférieur), vous ne
noterez pas de différence entre les deux versions. Si par contre vous utilisez
Android 10 (ou supérieur), privilégiez la version disponible directement sur
cette page.
mpay-client-0.6.tar.gz
Il s'installe sur votre site web. Son rôle est de faciliter les
paiements par vos utilisateurs en offrant une page de paiement personnalisable
et un rapatriement automatique des paiements vers votre site web.
La documentation est sur la page
dédiée.
Usage:
mpay_ping.sh [--url <mpay-api-url>] [--delay-warn <delay>] [--delay-crit <delay>] [--interval-checks <interval>] [--timeout <delay>] --apikey <apikey>
Le seul paramètre obligatoire est --apikey <apikey>
où <apikey>
est votre clé d'accès à l'API suivie d'un
deux points (:), le tout encodé en base64.
--url <mpay-api-url>
: url de l'API MPay
--delay-warn <delay>
: délai au-delà duquel le plugin renvoie un statut WARNING
--delay-crit <delay>
: délai au-delà duquel le plugin renvoie un statut CRITICAL
--interval-checks <interval>
: intervalle entre les vérifications successives pour voir si l'application mobile a répondu au ping
--timeout <delay>
: délai maximum d'attente de la réponse de l'application mobile
Exemple de configuration Nagios:
define command {
command_name ping_mpay
command_line $USER1$/mpay_ping.sh --apikey $ARG1$ --timeout $ARG2$ --delay-warn $ARG3$ --delay-crit $ARG4$
}
define service{
use generic-service
host_name nomServeur
service_description MPay Mobile App
check_command ping_mpay!base64apiKey==!30!10!20
}
20211206paymentmpay-0.0.3.zip
Ce plugin permet d'intégrer facilement une option de paiement mobile
à une boutique PrestaShop.
Les paramètres du plugin sont les suivants:
Ces scripts ont été écrits pour simplifier certaines
utilisations courantes de l'API. À vous de
les adapter suivant vos besoins spécifiques.
Note: au début de chaque script est définie une
variable apiKey
ou base64ApiKey
. Il s'agit de la
clé d'accès à l'API (déjà
encodée en base64). À remplacer donc par la vôtre.
sendSms.sh: envoi de SMS.
#!/bin/bash
#set -x
base64key=''
send=false
sendCmd() {
data='{
"destinataire": "'$1'",
"puce": "'$2'",
"contenu": "'$3'"
}'
if [ $send == "false" ]; then
echo curl -s -X POST -H \"Content-Type: application/json\" -H \"Authorization: Basic ${base64key}\" -i https://mpay.ytsamy.name/api/sms --data \'$data\'
else
curl -s -X POST -H "Content-Type: application/json" -H "Authorization: Basic ${base64key}" -i https://mpay.ytsamy.name/api/sms --data "$data"
fi
}
usage() {
echo "Usage: $0 --numero --puce --texte ";
}
if [ $# -lt 1 ]; then
usage
exit 1
fi
while [ -n "$1" ]; do
case "$1" in
--numero)
numero=$2
shift
;;
--texte)
texte="$2"
shift
;;
--puce)
puce=$2
shift
;;
--send)
send=true
;;
--help)
usage
exit 0
;;
*)
echo "parametre inconnu: $1"
usage
exit 2
esac
shift
done
if [ -z "$numero" ]; then echo "Option --numero manquante"; exit 3;fi
if [ -z "$puce" ]; then echo "Option --puce manquante"; exit 3; fi
if [ -z "$texte" ]; then echo "Option --texte manquante"; exit 3; fi
sendCmd $numero $puce "$texte"
sendUssd.sh: exécution de code USSD.
#!/bin/bash
mpay_api="https://mpay.ytsamy.name/api/"
apikey=""
while [ -n "$1" ]; do
case "$1" in
--code)
code=$2
shift
;;
--puce)
puce=$2
shift
;;
*)
echo "parametre inconnu: $1"
exit 2
esac
shift
done
if [ -z "$code" ]; then echo "Option --code manquante"; exit 3;fi
if [ -z "$puce" ]; then echo "Option --puce manquante"; exit 3; fi
data='{
"puce": "'$puce'",
"code": "'$code'"
}'
curl -s -X POST -H "Content-Type: application/json" -H "Authorization: Basic ${apikey}" -i ${mpay_api}ussdcodes --data "$data"
mpayForfaitSms.sh: souscription au forfait SMS de Moov ou Orange par l'exécution d'un code USSD.
#!/bin/bash
# set -xv
mpayApiUrl="https://mpay.ytsamy.name/api/"
mpayBase64key=''
puce_orange=3
puce_moov=1
forfait_sms_orange_ussd="*101*1#"
forfait_sms_moov_ussd="*146*210#"
forfait_sms_orange_count=10
forfait_sms_moov_count=10
dummy=false
echoHelp() {
echo "Usage: $0 [--dummy <count>] orange|moov"
}
recharge() {
reseau=$1
count=0
code=""
puce=""
case $reseau in
moov)
code=$forfait_sms_moov_ussd
count=$forfait_sms_moov_count
puce=$puce_moov
;;
orange)
code=$forfait_sms_orange_ussd
count=$forfait_sms_orange_count
puce=$puce_orange
;;
esac
if [ $count -ne 0 ] && [ -n "$code" ] && [ -n "$puce" ] ; then
if [ "$dummy" == "false" ]; then
sendUssd.sh --code "$code" --puce $puce > /dev/null
sleep 10s
else
count=$2
fi
data='{
"puce": "'$puce'",
"count": "'$count'"
}'
curl -s -X POST -H "Content-Type: application/json" -H "Authorization: Basic ${mpayBase64key}" "${mpayApiUrl}user/sms-count" --data "$data" >/dev/null
if [ "$dummy" == "false" ]; then echo "Recharge forfait SMS $reseau"
else echo "Recharge factice forfait SMS $reseau"; fi
fi
}
# if [ $# -ne 1 ]; then echoHelp; exit -1; fi
reseau=""
while [ -n "$1" ]; do
case "$1" in
moov|orange)
reseau=$1
;;
--dummy)
dummy=true
count=$2
shift
;;
*)
echo "Paramètre inconnu $1"
echoHelp
exit -2
;;
esac
shift
done
if [ "$reseau" != "orange" ] && [ "$reseau" != "moov" ]; then
echoHelp
exit -3
fi
recharge $reseau $count
smsRappelAbonnementFasoPharmacies.sh: Ce script est écrit
dans le cadre de l'application mobile
Faso Pharmacies. Il
interroge le serveur pour connaître les numéros de téléphone
des utilisateurs dont l'abonnement expire dans n
jours (n
pouvant être négatif) et leur envoie un SMS de rappel. Le script identifie
le réseau et la puce SIM à employer. En outre, étant donné
qu'il envoie potentiellement un grand nombre de SMS, il prend en compte les
limitations de débit de l'API, et les limites des forfaits SMS des
opérateurs, lançant une nouvelle souscription si besoin.
#!/bin/bash
# set -xv
# Valeurs de production
# API Url & clé API
fasopharmaciesApiUrl="https://www.fasopharmacies.ytsamy.name/api/"
fasoPharmaciesBase64key=''
mpayApiUrl="https://mpay.ytsamy.name/api/"
mpayBase64key=''
#durée de la pause entre les envois, en secondes
pause=10
# envoi direct?
send=""
# date d'expiration
dexpiry=""
# debut=`date -d "-1 day" "+%F"`
shortUrl='https://msoft.bf/Pharma'
puce_orange=3
puce_moov=1
echoHelp() {
echo "Usage: $0 [--pause <seconds> ] [--send] [--delai <nb jours>] [--date <date expiration>]"
}
getReseau() {
case ${#1} in
1)
chiffre=$1
;;
8)
chiffre=${1:1:1}
;;
11)
chiffre=${1:4:1}
;;
12)
chiffre=${1:5:1}
;;
esac
case $chiffre in
0|1|2|3)
echo "moov"
;;
4|5|6|7)
echo "orange"
;;
8|9)
echo "telecel"
;;
*)
echo "inconnu"
esac
}
getPuce() {
case $1 in
moov)
puce=1
;;
orange)
puce=3
;;
*)
puce=""
;;
esac
echo $puce
}
sendSms() {
number=$1
reseau=`getReseau $1`
puce=`getPuce $reseau`
if [ $puce ]; then
message="Votre abonnement"
if [ $delai -lt 0 ]; then message="$message a expiré"
else message="$message expire"
fi
message="$message le $ddisplay. Vous pouvez le renouveler en cliquant sur $shortUrl.\n\nFaso Pharmacies"
sendSms.sh $send --numero $number --puce $puce --texte "$message"
fi
}
while [ -n "$1" ]; do
case "$1" in
--pause)
pause=$2
shift
;;
--send)
send="--send"
;;
--date)
dexpiry=$2
shift
;;
--delai)
delai=$2
shift
;;
*)
echo "Paramètre inconnu $1"
exit -1
;;
esac
shift
done
if [ -z "$delai" ]; then
echo "Paramère manquant: delai"
echoHelp
exit -2
fi
if [ -z "$dexpiry" ]; then
dexpiry=`date -d "$delai day" "+%F"`" 23:59:59"
fi
dparameter=`echo $dexpiry | sed "s/ /%20/g" | sed "s/:/%24/g" `
ddisplay=`date -d "$dexpiry" "+%d/%m/%Y"`
if [ $send ]; then
line=0
curl -s -X GET -H "Content-Type: application/json" -H "Authorization: Basic ${fasoPharmaciesBase64key}" "${fasopharmaciesApiUrl}user/index?fields=telephone,telephoneAbonnement&UserSearch\[expiry\]=$dparameter" | jq -r '(.[0] | keys_unsorted) as $keys | map([.[ $keys[] ]])[] | @tsv' | awk 'NF' | while read num1 num2; do
line=$((line+1))
# echo ligne: $line
for num in $num1 $num2; do
if [ $num ]; then
resultat=$(sendSms $num)
if [ -n "$resultat" ]; then
echo "Envoi SMS au $num"
reseau=`getReseau $num`
p=`getPuce $reseau`
smsRestants=`echo "$resultat" | grep Sms-Count | sed "s/.*: //" | tr -d "\r" `
if [ -n "$smsRestants" ] && [ "$smsRestants" -le 1 ]; then
mpayForfaitSms.sh $reseau > /dev/null
echo "Recharge Forfait SMS $reseau"
fi
nb=`echo "$resultat" | grep Remaining | sed "s/.*: //" | tr -d "\r"`
#echo "line $line; Remaining = $nb; ID Trans: $idtrans"
if (($nb<50)); then
echo "line $line: Remaining = $nb; sleeping $pause seconds..."
sleep $pause
fi
sleep 5
else
echo "SMS non envoyé au $num"
fi
fi
done
done
else
# Cette version, qui n'envoie pas directement les SMS mais crée un fichier de commandes,
# n'inclut pas de routine de suivi du nombre de SMS envoyés
# tmpCmdFile=$(mktemp)
# (
echo "#!/bin/bash"
line=0
curl -s -X GET -H "Content-Type: application/json" -H "Authorization: Basic ${fasoPharmaciesBase64key}" "${fasopharmaciesApiUrl}user/index?fields=telephone,telephoneAbonnement&UserSearch\[expiry\]=$dparameter" | jq -r '(.[0] | keys_unsorted) as $keys | map([.[ $keys[] ]])[] | @tsv' | awk 'NF' | while read num1 num2; do
line=$((line+1))
# echo ligne: $line
if [ $num1 ]; then sendSms $num1; fi
echo "sleep $pause"
if [ $num2 ]; then sendSms $num2; fi
echo "sleep $pause"
done
# ) > $tmpCmdFile
# . $tmpCmdFile
# rm $tmpCmdFile
fi