Téléchargements

Cette page répertorie les différents fichiers utiles dans le cadre de l'utilisation de MPay.

Application Android

L'application Android (v1.0.28) peut être téléchargée sur Google Play, sur Aptoide 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 29 (Android 10) qui 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.

Client web

mpay-client-0.4.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.

Plugin Nagios

mpay_ping.sh

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.
Les autres paramètres:
  • --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                       vps4
        service_description             MPay Mobile App
        check_command                   ping_mpay!dlJYM2V0NUQzSmq3VnN5eEs3nMc6Cg==!30!10!20
        }
  • Scripts shell

    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