Bonjour,
Je travaille en ce moment à la refonte du site marchand d’un client. Ce client est hébergé sur un serveur mutualisé XXLPlan chez OVH. Nous avons pris un système de paiement sécurisé Cyberplus (Banque populaire) pour gérer les transactions. Ce système de paiement securisé est hébergé sur le serveur de paiement sécurisé d’OVH.
Comme pour beaucoup de systèmes de paiement, Cyberplus fonctionne autour de 3 fichiers : request.cgi , response.cgi et autoresponse.cgi. Le tout est architecturé autour de 3 serveurs :
[b]
- le serveur hébergeant le site marchand
- le serveur de paiement sécurisé
- le serveur de la banque.[/b]
Le système de paiement est bien intégré sur le site (les paiements fonctionnent, les numeros de commande passent bien, les montants aussi et les bouton annulation et retour à la boutique fonctionne normalement en redirigeant le visiteur sur le site marchand en passant en même temps les variable relatives à la transaction réalisée).
Mon problème se situe au niveau de l’appel automatique à un de mes scripts PHP (sur le serveur hébergeant le site marchand) par le serveur de la banque. Cet appel se fait obligatoirement de serveur à serveur (sans navigateur et sans intervention de l’internaute, comme ça s’il ne clique pas sur le bouton "retour à la boutique, j’ai quand même un retour sur la transaction).
Le script appelé, qui s’appelle majTransaction.php a pour interêt de mettre à jour la base de données en utilisant les variables renvoyées par la banque (notammment le response_code, qui indique si la transaction a reussi (paiement accepté) ou échoué (paiement rejeté)). Avec ces informations, je peux mettre à jour ma table commande et les faire passer de “En attente de paiement” à “Prêt à expédier” ou “Annulée par la banque” le cas échéant.
Lors de l’appel à majTransaction.php la banque passe une variable $DATA qui contient une chaîne cryptée. Le script majTransaction récupére cette variable et l’envoie sur le serveur de paiement sécurisé au cgi request.cgi qui a pour charge de décrypter la variable $DATA en une chaîne lisible et de la retourner.
L’appel à mon script majTransaction.php par la banque se fait bien (j’ai un envoi de mail dedans qui s’effectue bien), je récupére bien la variable $DATA qui contient la chaîne cryptée. Là ou ça coince c’est lors de l’appel à response.cgi, pour le décryptage de $DATA. Côté code (dans majTransaction.php) ça se présente comme ça :
$message=“message=$DATA”;
$login = “loginduclient”; //le login est bien sûr le bon
$path_bin = “http://paisec.ovh.net/~$login/cyberplus/bin/response.cgi”;
$result=exec("$path_bin $message");
et ensuite j’ai un explode("!", $result) sur $result qui me permet de ranger les variables dans un tableau (la chaîne décryptée se présente sous la forme !variable1=truc!variable2=truc!variable3=truc!..
Comme l’appel à response.cgi ne se fait pas (des tests le prouvent), je ne récupére aucune variable…
Aprés test il apparaît que le problème se situe au niveau de la commande exec(); qui ne fonctionne juste pas du tout. La hotline d’OVH me dit pourtant que cette commande n’est pas désactivée sur leurs hébergements mutualisés et si je fait un phpinfo(), je m’aperçois bien que je ne suis pas en SAFE_MODE. J’obtiens ça avec le phpinfo() :
safe_mode Off Off
safe_mode_exec_dir no value no value
Donc rien à priori pour empêcher le fonctionnement de la commande exec();
Je précise que le code que j’utilise a été fourni par Cyberplus.
Là je suis complétement coincé. Quelqu’un sait-il comment je pourrait contourner le problème du exec() en utilisant une commande alternative? J’ai essayé avec system() et passthru(), sans succés. La hotline Cyberplus et la hotline OVH (ainsi que le support par mail) ne m’aident pas beaucoup.