Version complète: sur le forum Webmaster Hub : Problèmes avec Sogenactif
Webmaster Hub > Création et exploitation de Sites Internet > E-commerce
Trash
Bonjour,

Nous utilisons le système de paiement de la Société générale « Sogenactif ». Celui-ci est basé sur deux modules : un module de requête envoyant les informations de paiement au serveur Sogenactif et un module réponse chargé de réceptionner la réponse du serveur Sogenactif suite à la requête envoyée.

Les modules « request » et « response » sont donc deux applications utilisées par le système Sogenactif. Le SAV Sogenactif nous précise que ces deux modules doivent avoir des droits d’exécution pour pouvoir s’exécuter correctement. Les deux modules ont les mêmes CHMOD (755 dans notre cas ce qui est suffisant), cependant le module de requête fonctionne depuis toujours, tandis que le module de réponse ne fonctionne plus depuis plusieurs semaines. Hors, le module de réponse a fonctionné pendant plusieurs jours après l’installation du système et, un jour, celui-ci a cessé de fonctionner, alors qu’aucun fichier n’a été modifié sur le serveur de notre part. Nous avons bien essayé tout ce que le SAV Sogenactif nous a conseillé de faire, même avec des modules compilés pour différentes versions de Linux (Debien dans notre cas), mais rien n’y fait, personne ne semble avoir de solution à notre problème. Le SAV précise également que tout est fonctionnel de leur côté et que le problème vient bien de notre script/configuration. Ils ont également testé nos scripts avec succès de leur côté.

Voici le message d'erreur rencontré :

CITATION
erreur appel response

executable response non trouve /home/sogenactif/payment/bin/response


Auriez-vous une idée de la provenance de ce dysfonctionnement ?

Merci d’avance.
Anonymus
Peux tu mettre en ligne le script qui pose problème ?

Merci.
Trash
CITATION(Anonymus @ mercredi 02 mars 2005, 07h22)
Peux tu mettre en ligne le script qui pose problème ?

Merci.
*


CITATION
<?

echo "<table width=\"100%\" border=\"0\" align=\"center\">
  <tr>
    <td height=\"65\" colspan=\"2\"><div align=\"center\"><img src=\"images/titre1.gif\" width=\"185\" height=\"39\"></div></td>
  </tr>
  <tr>
    <td align=\"center\" height=\"111\" colspan=\"2\"><br><br><font size=\"2\" face=\"Geneva, Arial, Helvetica, sans-serif\">
";

// Récupération de la variable cryptée DATA
$message="message=$DATA";

        // Initialisation du chemin du fichier pathfile (à modifier)
    // ex :
    //    -> Windows : $pathfile="pathfile=c:\\repertoire\\pathfile";
    //    -> Unix    : $pathfile="pathfile=/home/repertoire/pathfile";
    //
    // Cette variable est facultative. Si elle n'est pas renseignée,
    // l'API positionne la valeur à "./pathfile".

        //        $parm="$parm pathfile=chemin_du_fichier_pathfile";

        // Initialisation du chemin de l'executable response (à modifier)
        // ex :
        // -> Windows : $path_bin = "c:\\repertoire\\bin\\response";
        // -> Unix    : $path_bin = "/home/repertoire/bin/response";
        //

        $path_bin = "/home/sogenactif/payment/bin/response";

        // Appel du binaire response

        $result=exec("$path_bin $message $pathfile");

        //        Sortie de la fonction : !code!error!v1!v2!v3!...!v29
        //                - code=0        : la fonction retourne les données de la transaction dans les variables v1, v2, ...
        //                                : Ces variables sont décrites dans le GUIDE DU PROGRAMMEUR
        //                - code=-1      : La fonction retourne un message d'erreur dans la variable error


        //        on separe les differents champs et on les met dans une variable tableau

        $tableau = explode ("!", $result);

        //        Récupération des données de la réponse

        $code = $tableau[1];
        $error = $tableau[2];
        $merchant_id = $tableau[3];
        $merchant_country = $tableau[4];
        $amount = $tableau[5];
        $transaction_id = $tableau[6];
        $payment_means = $tableau[7];
        $transmission_date= $tableau[8];
        $payment_time = $tableau[9];
        $payment_date = $tableau[10];
        $response_code = $tableau[11];
        $payment_certificate = $tableau[12];
        $authorisation_id = $tableau[13];
        $currency_code = $tableau[14];
        $card_number = $tableau[15];
        $cvv_flag = $tableau[16];
        $cvv_response_code = $tableau[17];
        $bank_response_code = $tableau[18];
        $complementary_code = $tableau[19];
        $return_context = $tableau[20];
        $caddie = $tableau[21];
        $receipt_complement = $tableau[22];
        $merchant_language = $tableau[23];
        $language = $tableau[24];
        $customer_id = $tableau[25];
        $order_id = $tableau[26];
        $customer_email = $tableau[27];
        $customer_ip_address = $tableau[28];
        $capture_day = $tableau[29];
        $capture_mode = $tableau[30];
        $data = $tableau[31];

        //  analyse du code retour

  if (( $code == "" ) && ( $error == "" ) )
      {
          print ("<BR><CENTER>erreur appel response</CENTER><BR>");
          print ("executable response non trouve $path_bin");
      }

        //        Erreur, affiche le message d'erreur

        else if ( $code != 0 ){
                print ("<center><b><h2>Erreur appel API de paiement.</h2></center></b>");
                print ("<br><br><br>");
                print (" message erreur : $error <br>");
        }

        // OK, affichage des champs de la réponse
        else
        {
                echo "<meta http-equiv=\"refresh\" content=\"0; URL=index.php?cat=28&newuser=$return_context&id=$transaction_id\">";
        }

echo "      </font>
    </td>
  </tr>
</table>
";

?>
Ben
j'ai eu le même problème avec le script call_response.php
ma solution a été de remplacer
CODE
$message="message=$DATA";

par
CODE
$message="message=".$_POST['DATA'];

sachant que DATA est envoyé par une methode POST (et non pas GET)

Il suffit que PHP ait été réinstallé avec les options de protection des variables globales pour faire planter le script.

*Bon courage
Trash
CITATION(Ben @ mardi 22 mars 2005, 14h15)
j'ai eu le même problème avec le script call_response.php
ma solution a été de remplacer
CODE
$message="message=$DATA";

par
CODE
$message="message=".$_POST['DATA'];

sachant que DATA est envoyé par une methode POST (et non pas GET)

Il suffit que PHP ait été réinstallé avec les options de protection des variables globales pour faire planter le script.

*Bon courage
*


J'ai testé en enregistrant la variable $message dans une base de données, il en résulte une valeur correcte. Le problème ne vient donc pas de là... :s

Merci quand même.
sam75
Contrepartie financière assurée pour la résolution de ce problème.

Très urgent.

Merci de votre aide,
NiGhMa
Je ne sais pas si le problème vient de là mais tu as oublié de préciser un chemin pour :
CODE
   // Initialisation du chemin du fichier pathfile (à modifier)
   //  ex :
   //    -> Windows : $pathfile="pathfile=c:\\repertoire\\pathfile";
   //    -> Unix    : $pathfile="pathfile=/home/repertoire/pathfile";
   //
   // Cette variable est facultative. Si elle n'est pas renseignée,
   // l'API positionne la valeur à "./pathfile".

       //        $parm="$parm pathfile=chemin_du_fichier_pathfile";


Aussi, peux-tu nous dire d'où vient le $DATA ? Vient-il du POST ?

Si tu ajoutes un echo ' '.$DATA.' '; , as-tu un résultat ? et pour $result ? Y a-t-il qqch de dans ?

Je ne sais pas si tu l'utilises déjà mais un bon débugger dans une chouette interface GUI c'est ZEND... Il m'a déjà beaucoup aidé dans ce genre de cas.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.