Le client web MPay est un mini site web à installer sur votre serveur afin de faciliter l'ajout de la fonctionnalité de paiement. Il est disponible sur la page des téléchargements.
Attention: le client MPay requiert une mise en œuvre plutôt complexe et ne sert réellement que si vous avez des besoins avancés. Considérez l'utilisation du client hébergé, ne serait-ce que pour un début.
La première chose à faire est de créer une entrée dans votre zone DNS qui fera pointer l'url de votre choix (par exemple mpay.votresite.com) vers l'adresse de votre serveur.
mpay.votresite.com A ip.de.votre.serveur 0 86400
L'installation se fait ensuite en décompressant l'archive dans un
répertoire accessible à votre serveur web (en général ce sera
/var/www/html
)
cd /var/www/html
wget https://www.mpay.ytsamy.name/files/mpay-client-0.4.tar.gz (lien à prendre sur la page téléchargements)
tar zxf mpay-client-0.4.tar.gz
Exemple de configuration Apache:
<VirtualHost *:80>
ServerName mpay.votresite.com
DocumentRoot /var/www/html/mpay-client/web
<Directory /var/www/html/mpay-client/web>
AllowOverride All
</Directory>
</VirtualHost>
Ou, si vous utilisez le SSL:
<VirtualHost *:443>
ServerName mpay.votresite.com
DocumentRoot /var/www/html/mpay-client/web
<Directory /var/www/html/mpay-client/web>
AllowOverride All
</Directory>
... autres options SSL...
</VirtualHost>
Note: il est fortement recommandé d'utiliser la version SSL.
Vérifiez que le serveur web a bien accès aux fichiers (notez que les deux
répertoires runtime/
et web/assets/
doivent être
accessibles en lecture et en écriture :
cd mpay-client
find -type d -exec chmod go+rx {} \;
find -type f -exec chmod go+r {} \;
sudo chgrp apache runtime/ web/assets/
chmod 775 runtime/ web/assets/
Vous pouvez exécuter le script requirements.php à la racine du répertoire (directement en ligne de commande ou en passant par votre navigateur) afin de vérifier que les prérequis sont satisfaits.
config/db.php
config/secret.php
.
config/secret.php
, votre clé
privée afin que le client MPay puisse vérifier les données
transmises.
config/constants.php
(le fichier contient des commentaires pour vous guider).
CLE_VALIDATION_COOKIES
doit
obligatoirement être renseigné (mais vous pouvez y mettre
une chaîne quelconque, genre 'macleDeVaLidat10n').
./yii migrate
Le client MPay crée 3 tables dans votre base de données:
mpay_client_paiement
: cette table contient les informations des paiements.
Les champs sont peu ou prou les mêmes que ceux utilisés par
l'API Mpay (cf «Détails
d'une opération»)
mpay_client_queue
: cette table est utilisée pour le système
de queue afin de gérer de manière asynchrone les accès
à l'API
mpay_client_migration
: cette table assure le suivi des évolutions
des deux autres table, dans le cas d'une migration vers une version
supérieure.
Le préfixe mpay_client_ peut être modifié dans le
fichier config/constants.php
.
Lorsque vous souhaitez qu'un de vos utilisateurs fasse un paiement,
envoyez-le sur le module client MPay en précisant dans la query string
les paramètres du paiement. Le fichier config/constants.php
du client MPay permet de définir des valeurs par défaut
que vous n'aurez plus à préciser lors de l'invocation.
<?php
$params=http_build_query([
'amount' => 800,
'description' => 'nom article',
'return_url' => 'https://www.votresite.com/payment/success?id=%ID%',
'number_orange' => NUMBER_ORANGE,
'number_telmob' => NUMBER_TELMOB,
'shop_name' => NOM_BOUTIQUE,
'logo_url' => PAIEMENT_LOGO_URL,
// 'immutableRowIds' => [id1, id2],
]);
$sum=hash('sha256',$params);
if(defined('PUBLIC_KEY')) {
while ($msg = openssl_error_string()) {};
$sumTmp=$sum;
$rv=openssl_public_encrypt($sumTmp, $sum, PUBLIC_KEY);
$str="";
while ($msg = openssl_error_string())
$str.=$msg . "\n";
// if($str) print_r($str);
}
$query_string = http_build_query(array('enc' => base64_encode($params), 'sum' => base64_encode($sum), 'id' => base64_encode(MPAY_USER_ID)));
?>
<p>effectuer le <a href=<?= "\"https://mpay.votresite.com?" . $query_string . "\""?>">paiement</a>.</p>
Les paramètres à fournir sont les suivants:
amount
: le montant à payer. Ce peut être un entier ou un tableau (s'il y a plusieurs possibilités)
[
[
'label' => '1 mois',
'montant' => 200,
],
[
'label' => '6 mois',
'montant' => 1100,
],
[
'label' => '1 an',
'montant' => 2000,
],
]
description
: le nom de l'article à payerreturn_url
: l'url vers laquelle renvoyer l'utilisateur si le paiement
est effectif. Au moment de rediriger l’utilisateur, les substitutions
suivantes sont faites:
%ID%
est remplacé par l’identifiant de
l’enregistrement dans la table mpay_client_paiement
%TRANSACTION_ID%
est remplacé par l’identifiant
du transfert tel qu’indiqué dans le SMS de confirmation de
l’opérateur
%AMOUNT%
est remplacé par le montant du transfert.
number_orange
et number_telmob
: les numéros
de téléphone Orange et Telmob sur lesquels l'argent du paiement
doit être envoyéshop_name
: le nom de votre boutique / site weblogo_url
: l'url d'un logo (au format 32x32 pixels)
à afficher en regard du nom de votre boutiqueimmutableRowIds
: si vous avez créé des codes promos
(sous forme de transfert avec entre autre, identifiant de transfert)
qui peuvent être utilisés par plusieurs personnes, une fois le paiement
fait, les enregistrements doivent rester au statut 'Pending' au lieu de
passer à 'OK'. Ce paramètre vous permet d'indiquer les identifiants
des enregistrements correspondants auxdits codes promos.La constante PUBLIC_KEY
sert à chiffrer la somme de contrôle
avant envoi afin de s'assurer qu'un petit malin n'a pas modifié les
informations de vérification du paiement. Elle doit être initialisée
avec votre clé publique (disponible sur la page d'informations de votre compte). Quant à la constante MPAY_USER_ID
, il s'agit de
l'identifiant (attention!, l'identifiant, et non l'adresse mail)
de votre compte MPay (également disponible sur la page
d'informations de votre compte).
Le client MPay apparaît à l'utilisateur sous la forme suivante
(et peut être personnalisé en modifiant les fichiers
views/site/index.php
et views/layout/main.php
):
RETURN_URL
,
défini plus haut.
RETURN_URL
, après avoir
effectué les substitutions (%AMOUNT%
, %ID%
,
%TRANSACTION_ID%
) et mis l'enregistrement au statut 'OK'
sur le serveur MPay.
A vous à présent d'utiliser votre logique interne pour d'abord vérifier que le montant reçu correspond à celui qui était attendu (mesure supplémentaire de sécurité), et ensuite associer ce paiement à un utilisateur donné.
Dans ce second schéma, c'est le serveur MPay qui se connecte au client web (sur votre site) pour le notifier que vous avez reçu un paiement, et le client rapatrie les informations dudit paiement. Étant donné que dans ce second schéma, l'utilisateur ne passe pas au préalable sur votre site pour choisir un produit, cela sous-entend que vous êtes en mesure de déterminer l'objet de l'achat à partir uniquement du montant (cas d'un abonnement par exemple).
https://mpay.votresite.com/incoming?id=%ID%
.
files/mpay-client-yii-queue.service
:
sudo install -o root -m 600 files/mpay-client-yii-queue.service /usr/lib/systemd/system/
systemctl start mpay-client-yii-queue
systemctl enable mpay-client-yii-queue
Note: ces commandes s'appliquent à un système Fedora Linux avec Systemd; veillez à les adapter si vous êtes sur une distribution différente (en particulier Ubuntu).
SERVICE_RETURN_URL
dans le fichier
config/constants.php
.
Ex: https://www.votresite.com/paiement/success?recordId=%ID%
.
Dès que le serveur MPay enregistre un paiement, celui-ci est
répercuté sur la base de données de votre site (avec un
statut Pending, tandis que l'enregistrement côté
serveur est mis à OK). Ensuite, l'url
SERVICE_RETURN_URL
est invoquée (via la méthode
HEAD, avec, en query string,
l'identifiant de l'enregistrement qui vient d'être
créé) pour vous permettre d'effectuer vos traitements:
vérification du montant, association à un utilisateur
donné (à partir du numéro de l'expéditeur),
correspondance avec vos produits,...