Erreur sur fichiers request et response

  • Posts: 3
  • Thank you received: 0
11 years 11 months ago #53090

Bonjour à tous,

je suis dans le même cas que toi Joshua, même hébergeur, même serveur 64bits.

Le support m'a fourni ceci par rapport au remplacement de exec() :

Remplacer l'instruction exec() du fichier Php:

$test_infomaniak = new HttpRequest('http://www.monsite.fr/cgi-bin/call_response.pl', HttpRequest::METH_GET);
$test_infomaniak->addQueryData(array('path_bin' => $path_bin, 'pathfile' => $pathfile, 'message' => $message));
$result = $test_infomaniak->send()->getBody();

et récupérer les infos dans le fichier Perl:
my $cgi = new CGI;
print $cgi->header;
my $path_bin = $cgi->param("path_bin");
my $pathfile = $cgi->param("pathfile");
my $parm = $cgi->param("message");


Comme je demandai de l'aide pour le request, depuis le fichier php j'ai fait :
$path_bin="/home/www/xxxxxxxxxxxxxxxxxxxx/web/cgi-bin/bin/static/request";
// remplacement de : $result=exec("$path_bin $parm");
$test_info = new HttpRequest('http://www.mon-site.fr/cgi-bin/call_request.pl', HTTP_METH_GET);
$test_info->addQueryData(array('path_bin'=>$path_bin, 'parm'=>$parm));
$result = $test_info->send()->getBody();

et dans call_request.pl
payment_request();

sub payment_request
{

my $cgi = new CGI;
print $cgi->header;
my $path_bin = $cgi->param("path_bin");
my $parm = $cgi->param("parm");

# affichage du debut de la page

 print "Content-type: text/html\n\n";

ou
payment_request();

sub payment_request
{

use CGI;
my $cgi = new CGI;
print $cgi->header;
my $path_bin = $cgi->param("path_bin");
my $parm = $cgi->param("parm");


ou
payment_request();

sub payment_request
{


my $test_info = new CGI;
print $test_info->header;
my $path_bin = $cgi->param("path_bin");
my $parm = $test_info->param("parm");


ou
payment_request();

sub payment_request
{

use CGI;
my $test_info = new CGI;
print $test_info->header;
my $path_bin = $cgi->param("path_bin");
my $parm = $test_info->param("parm");


J'arrive à avoir un résultat du contenu d'origine du Perl dans le Php mais que en mode debug en ajoutant -d : #!/usr/bin/perl -d
Mais clairement mes paramètres ne sont pas envoyés au Perl car visiblement il ne récupère pas les infos php :
> my $test_infomaniak = new CGI;
> Can't locate object method "new" via package "CGI" (perhaps you forgot to load "CGI"?) 

J'en peux plus, je désespère d'obtenir ton aide car tout le monde fuit devant Perl ou me dit trop simplement "change d'hébergeur". :pinch: le message de Joshua qui a effectivement réussi me redonne un peu d'espoir. :woohoo:

Merci pour votre aide.

Please Log in or Create an account to join the conversation.

  • Posts: 70
  • Thank you received: 6
11 years 10 months ago #53380

Bonsoir Greg,

Désolé pour le retard mais je n'étais pas dispo depuis un moment.
Pour le remplacement de la commande exec() tu as bien la bonne solution fournie par Infomaniak si tu la suis telle quelle.

Pour le fichier Perl, voici ce qu'il faut faire avec comme exemple le fichier call_request.pl (et adapter pour call_response.pl) :

#!/usr/bin/perl
use CGI;
use CGI::Carp qw(fatalsToBrowser);

payment_request(); 

sub payment_request 
{
	my $cgi = new CGI;
	print $cgi->header;
        my $path_bin = $cgi->param("pathbin");
	my $parm = $cgi->param("parm");	
	my $result;	
	open(INFO, $path_bin . " " . $parm . "|");
	for ($res = 0, $i = 0; <INFO>; $i++)
		{
			$res = $res . $_;
			$result = $res;
		}
	close(INFO);
	print $result;
}

Voila ceci devrait t'aider. N'oublie pas de mettre les fichiers ".pl" en droits 755 comme les binaires d'ailleurs.

Concernant les binaires, chez Infomaniak si tu es encore en PHP 5.2.17 il faut prendre les binaires 32bits (base i686).
Si tu es passé en PHP 5.3 tu as dû passer en serveur 64 bits donc prendre les binaires adéquats.

A+

The following user(s) said Thank You: Greg75

Please Log in or Create an account to join the conversation.

  • Posts: 3
  • Thank you received: 0
11 years 10 months ago #53525

Bonjour Joshua et pour commencer voici un premier : :silly: MERCIIIiiiiii ! ! ! :silly:

Je me voyais condamné à utiliser un header vraiment pas propre pour communiquer avec mon fichier Perl.

Franchement je te tire mon chapeau, je n'étais pas sûr de savoir si je devais laisser perl générer le tableau, ton

print $result;
à été magique, je perdais espoir car par exemple le simple oubli de
my $result;
génère un 'appel request non trouvé', une erreur que l'on retrouve si on oublie, au choix, de mettre : #!/usr/bin/perl ou le bon chmod ou que l'on a des binaires 32bits sur du 64bits etc...

Donc forcément maintenant je bloques au response, j'ai vraiment essayer de chercher toute la journée la solution :dry: mais je plante avec l'erreur suivante :
Error get DATA response parameter (wrong length)
.

Mon code est ok dans le php :
	$message="message=$HTTP_POST_VARS[DATA]";

	$pathfile="/home/www/xxx/web/cgi-bin/pathfile";

	$path_bin="/home/www/xxx/web/cgi-bin/response";

  	$message=escapeshellcmd($message);
	
	$cgi = new HttpRequest('http://www.site.com/cgi-bin/call_response_ok.pl', HttpRequest::METH_GET);	
	$cgi->addQueryData(array('
	path_bin' => $path_bin,
	'pathfile' => $pathfile,
	'message' => $message
	));

	$result = $cgi->send()->getBody();


Mais comme toujours c'est dans le Perl que ça pêche :
#!/usr/bin/perl

use CGI;
use CGI::Carp qw(fatalsToBrowser);

payment_response();

my $cgi2 = new CGI;
print $cgi2->header;
my $path_bin = $cgi2->param("path_bin");
my $pathfile = $cgi2->param("pathfile");
my $message =  $cgi2->param("message");
my $result;
	
sub get_data_field {

# Accès au STDIN à l'aide de la fonction read

read(STDIN, $save_string, $ENV{CONTENT_LENGTH});

# Dissocie la chaîne de caractères en une liste

@prompts = split(/&/, $save_string);

# parcours de la liste

foreach (@prompts) {
	# dissocie la paire nom=valeur
	($name, $value) = split (/=/, $_);
	# decode les valeurs
	$name=~	s/\%(..)/pack("c",hex($1))/ge;
	$value=~	s/\%(..)/pack("c",hex($1))/ge;
	# cree une liste associative
	$fields{$name} = $value;
	}
	$data=$fields{DATA};
}

sub payment_response
{
	get_data_field();	

	$message="message=$data";	

	$parm = $message;

	open(INFO, $path_bin . " " . $pathfile . " " . $parm . "|");

	for ($res = 0, $i = 0; <INFO>; $i++)
	{
		$res = $res . $_;
		$result = $res;
	}

	close(INFO);

	print $result;
}

J'espère que tu va pouvoir comparer avec ton propre fichier perl et repérer une erreur évidente à tes yeux.

Please Log in or Create an account to join the conversation.

  • Posts: 70
  • Thank you received: 6
11 years 10 months ago #53536

Greg, je t'ai fourni l'intégralité du fichier Perl que j'utilise. Pourquoi rajoutes-tu dedans toutes ces lignes (le read stdin, la boucle foreach) ?

Le but est de remplacer la fonction exec(), ce qui est fait par le HttpRequest qui appelle le binaire via le fichier Perl (un pour request et un pour response).

Donc dans atos.php et atos_end.php je ne remplace que la ligne exec(), je ne touche pas au reste et surtout pas aux chemins. Je ne touche donc pas aux fichiers du plugin ATOS à part la ligne exec().

A moins que tu ne veuilles exploiter d'autres fonctionnalités, je ne vois pas pourquoi tu fais tout ça. Sauf si tu n'utilises pas Hikashop.

The following user(s) said Thank You: nicolas, Greg75

Please Log in or Create an account to join the conversation.

  • Posts: 3
  • Thank you received: 0
11 years 10 months ago #53640

Bonjour Joshua,

Dans peu de temps l'hébergement du site que je dois refondre se termine, je vais sans doute le refondre avec Hikashop sur le futur hébergement.
Mais avant d'y travailler je dois déjà adapter le module de paiement en perl pour que le site actuel continue de fonctionner tel quel.

Donc oui ce n'est pas de l'Hikashop mais en même temps cette partie du problème concerne uniquement le module de paiment.

je ne remplace que la ligne exec(), je ne touche pas au reste

Moi aussi bien sûr

Pourquoi rajoutes-tu dedans toutes ces lignes (le read stdin, la boucle foreach) ?

Tu penses bien que je n'ai pas ajouté une fonction pareille dans du Perl où j'ose à peine ajouter un point, c'était le fichier perl fourni par la banque...

Je t'ai fourni l'intégralité du fichier Perl que j'utilise.

HEUREUSEMENT que tu as écris ça !
- J'ai copié/collé le contenu de TON call_request.pl et modifié QUE request par response, et là j'ai enfin eu une erreur avec un indice du debug (certif)
- J'ai uploadé un ancien certif de test (celui du 32bits) et... ca fonctionne purée ! ! ! :woohoo:
( Merci les fichiers tests vérolés histoire de bien faire tourner en rond :pinch: )

Comme le site actuel utilise un module 64bits, je l'ai transféré et adapté et... ça fonctionneee encore ha ha !

On trouve vraiment RIEN sur le net et encore moins coté support des banques : coté BANQUE on m'as dit TEXTO pas de support pour le Perl et coté ATOS on étudie mon cas, mais...ah oui c'est vrai je l'attends toujours )

Donc par rapport à ce constat encore merci, merci, merci Joshua d'avoir partagé !

A+

Last edit: 11 years 10 months ago by Greg75. Reason: Erreurs de balises d'édition

Please Log in or Create an account to join the conversation.

  • Posts: 2608
  • Thank you received: 65
11 years 7 months ago #66866

quels doivent etre les droits sur le dossier media/com_hikashop/b et sur les fichiers response et request ?

Please Log in or Create an account to join the conversation.

  • Posts: 81636
  • Thank you received: 13086
  • MODERATOR
11 years 7 months ago #66869

755 et si cela ne fonctionne pas 777

Please Log in or Create an account to join the conversation.

  • Posts: 2608
  • Thank you received: 65
11 years 7 months ago #66870

le dossier est en 755 mais request et response sont en 644 je dois mettre aussi request et response en 755 ?
etil faut une config particuliere du serveur pour ces executables ?
car depuis hier midi j'ai que des erreur request plus un paiement ne passe


merci

Attachments:
Last edit: 11 years 7 months ago by erickb.

Please Log in or Create an account to join the conversation.

  • Posts: 81636
  • Thank you received: 13086
  • MODERATOR
11 years 7 months ago #66873

Oui. Ce sont des executables. Pour les executer, il faut que les droits soit 755 sinon, il n'est pas possible de les executer.

Please Log in or Create an account to join the conversation.

  • Posts: 2608
  • Thank you received: 65
11 years 7 months ago #66874

oui bien sur mais au cas où 705 ou 750 allaient
tous mes droits avaient sautés

merci

Last edit: 11 years 7 months ago by erickb.

Please Log in or Create an account to join the conversation.

  • Posts: 5
  • Thank you received: 0
11 years 6 months ago #71865

Bonjour,

Je me permet de me greffer sur ce post afin de savoir comment faire fonctionner le paiement ATOS lorsque les fichiers RESPONSES et REQUEST ne sont pas présent dans le dossier /media/com_hikashop/b mais dans le dossier /cgi-bin ?
Je suis chez l'hébergeur OVH et les executables doivent être dans ce dossier CGI-BIN.
Les fichiers présent au sein de WWW ne sont pas exécutés.

J'ai placé mes fichiers dans le dossier CGI-BIN (et dans le doute dans /media/com-hikashop/b), les droits sont en 755, l'envoi a été fait en mode binaire, mais j'obtiens l'erreur :

erreur appel request
executable request non trouve /homez.xx/xxxx/www/media/com_hikashop/b/request

Ce qui parait logique puisque seul le dossier CGI-BIN permet l'execution.

J'ai modifier le dossier de téléchargement pour y mettre /cgi-bin ou /homez.xx/xxxx/cgi-bin mais j'ai toujours le même message d'erreur !

Comment spécifié au module ATOS d'utiliser le dossier /homez.xx/xxxx/cgi-bin au lieu de homez.xx/xxxx/www/media/com_hikashop/b ?

Quelqu'un as t-il déjà utiliser ce paiement chez l'hébergeur OVH ?

Merci de votre aide

Please Log in or Create an account to join the conversation.

  • Posts: 81636
  • Thank you received: 13086
  • MODERATOR
11 years 6 months ago #72120

Bonjour,

Oui le plugin fonctionne chez OVH. Nous utilisons nous même OVH pour nos serveurs.

Il faut utiliser /homez.xx/xxxx/cgi-bin pour le dossier. Biensur, il faut remplacer les x par les vrais noms de dossier sur votre site. De même, les droits d'accès sur les fichiers request et response doivent permettre l'exécution des fichiers.

Please Log in or Create an account to join the conversation.

  • Posts: 5
  • Thank you received: 0
11 years 6 months ago #72136

Merci pour la confirmation :cheer:

Ou ce chemin doit-il être spécifié ?
Car comme je le dit dans la question, j'ai indiqué ce chemin (en remplacant les xx :P ) dans le module de paiement ATOS rubrique "dossier de téléchargement" mais j'ai toujours le message d'erreur.
Dans ce message j'ai clairement l'adresse du dossier /www et non le chemin absolu du dossier cgi-bin...

Merci pour les précisions.

Please Log in or Create an account to join the conversation.

  • Posts: 81636
  • Thank you received: 13086
  • MODERATOR
11 years 6 months ago #72143

C'est en effet dans cette option qu'il faut mettre le chemin absolu du dossier cgi-bin.

Please Log in or Create an account to join the conversation.

  • Posts: 5
  • Thank you received: 0
11 years 6 months ago #72236

Bonjour,

J'ai testé en mettant /homez.xx/xxx/cgi-bin et /homez.xx/xxx/cgi-bin/ dans le champ, visiblement il faut le / à la fin :P
J'ai mes 3 fichiers (REQUEST, RESPONSES et certif.fr.01234567879) dans le dossier cgi-bin.
Lors que je valide la configuration du module j'obtiens :

Le fichier request n'existe pas (/homez.xx/xxx/cgi-bin/b/request)
Le fichier request n'existe pas (/homez.xx/xxx/cgi-bin/b/request)
Le fichier de certificat n'existe pas ( /homez.xx/xxx/cgi-bin/b/ct.fr.0123456789 ). Ce nom de fichier a été détecté en utilisant votre id marchant. Verifiez donc que ce dernier est bon!

J'ai créé un dossier "b" dans le dossier cgi-bin et déplacé mes 3 éléments dedans, vérifier une nième fois qu'il était bien en 755, remplacer le nom du certificat fourni (certif.fr.01234567879) par ct.fr.01234567879 puis revalider la configuration du module.
Aucun message d'erreur.
Il a donc "trouver" les 3 fichiers en question...

Je publie le module et simule une commande.
Je choissi le moyen de paiement ATOS et là j'obtiens toujours la même erreur :
erreur appel request

executable request non trouve /homez.xx/xxx/www//homez.xx/xxx/cgi-bin/b/request

On voit, comme je l'indiquais dans le précédent post, qu'il cherche dans le dossier www au lieu de cgi-bin, puis que l'adresse ne devrais pas être :
/homez.xx/xxx/www//homez.xx/xxx/cgi-bin/b/request

mais
/homez.xx/xxx/cgi-bin/b/request

Une piste ?

Please Log in or Create an account to join the conversation.

  • Posts: 81636
  • Thank you received: 13086
  • MODERATOR
11 years 6 months ago #72474

Apparement, vous avez une configuration un peu spéciale de votre PHP qui fait que le chemin des binaires n'est pas calculé comme il faut.
Pourriez vous essayer d'ajouter le code:

$os=substr(PHP_OS, 0, 3);
			$os=strtolower($os);
			if($os=='win'){
				if($method->payment_params->upload_folder_relative[1]==':')
					$path=$method->payment_params->upload_folder;
				else
					$path=JPATH_ROOT.DS.$method->payment_params->upload_folder_relative;
			}
			else{
				if($method->payment_params->upload_folder_relative[0]==DS)
					$path=$method->payment_params->upload_folder;
				else
					$path=JPATH_ROOT.DS.$method->payment_params->upload_folder_relative;
			}
avant le code:
$vars["upload_folder"]=$path;
			$vars["bin_folder"]=$path.'b'.DS;
dans le fichier plugins/hikashoppayment/atos/atos.php et voir si cela corrige le problème?

Please Log in or Create an account to join the conversation.

  • Posts: 5
  • Thank you received: 0
11 years 6 months ago #72555

La modification corrige bien l'erreur de chemin mais j'ai toujours le message :

erreur appel request

executable request non trouve /homez.xx/xxx/cgi-bin/b/request

J'ai constaté que j'avais un dossier /homez.xx/xxx/cgi-bin/ qui avais été créé dans le dossier /www avec les fichiers :
- pathfile
- pc.0123456789
- pc.x

Par contre malgré avoir ouvert le module de paiement ATOS pour l'activé et vérifier que le dossier été toujours /homez.xx/xxx/cgi-bin/ je ne retrouve pas ces 3 fichiers dans le dossier cgi-bin...

Pourtant ils ont forcement étaient créés lors de la dernière tentative quand le chemin du dossier n'été pas bon.

Une autre piste ?

Please Log in or Create an account to join the conversation.

  • Posts: 81636
  • Thank you received: 13086
  • MODERATOR
11 years 6 months ago #72574

Le fait de changer le dossier dans les options ne déplace pas les fichiers déjà uploadés.

Vous pouvez essayer de les réuploader, sinon il vous suffit de les uploader manuellement dans le dossier /homez.xx/xxx/cgi-bin/ et ensuite vérifiez bien qu'ils soient exécutable.

Please Log in or Create an account to join the conversation.

  • Posts: 5
  • Thank you received: 0
11 years 5 months ago #77728

Bonjour,

Je n'arrive toujours pas à utiliser ATOS sur ma boutique.

J'ai reuploadé les fichiers REQUEST et RESPONSES ainsi que le certificat via le module de configuration, je vois bien les 3 fichiers (+ un .htaccess) dans le chemin :

/www/homez.xx/XXX/cgi-bin/b

Les 3 fichiers pathfile, pc.0123456789, pc.x sont présent dans le chemin :
/www/homez.xx/XXX/cgi-bin

Sachant que le dossier permettant les executables est /cgi-bin et non le contenu de /www.
donc je ne comprends pas l'interêt pour Hikashop de créer le dossier /www/homez.xx/XXX/cgi-bin/b

A noter que dans le dossier /cgi-bin je n'ai pas les fichiers pathfile, pc.0123456789 et pc.x !
est-ce normal ?

Le fichier pathfile contient le code
DEBUG!NO!
D_LOGO!/media/com_hikashop/l/!
F_DEFAULT!/homez.xx/XXX/www//homez.xx/XXX/cgi-bin/pc.x!
F_PARAM!/homez.xx/XXX/www//homez.xx/XXX/cgi-bin/pc!
F_CERTIFICATE!/homez.xx/XXX/www//homez.xx/XXX/cgi-bin/b/ct!

Pourquoi le double "/" entre le www et le homez.xx ?

Et pc.x
TEMPLATE!!

Le problème semble pourtant simple et je ne comprends pas pourquoi cela ne marche pas !
Mes fichiers certificat, RESPONSES et REQUEST DOIVENT être dans le dossier cgi-bin qui se trouve à la base de mon hébergement alors que le site lui même et par conséquent la boutique, se trouve dans le dossier www .

Le chemin est donc : /homez.xx/XXX/cgi-bin
Pour le site : /homez.xx/XXX/www

Les fichiers ont un droit en 755

dans le module de paiement SPIPS ATOS j'ai réglé :
- le dossier de téléchargement avec /homez.xx/XXX/cgi-bin/
- le dossier des logos avec media/com_hikashop/l/
- en haut des lignes pour sélectionner le fichier request, responses et le certificat il est indiqué /homez.xx/XXX/cgi-bin/b/ (les fichiers ont étaient renvoyé)

Avez-vous une piste ou un autre conseil ?

Last edit: 11 years 5 months ago by iggydodie.

Please Log in or Create an account to join the conversation.

Time to create page: 0.125 seconds
Powered by Kunena Forum