Précédent   Forum du club des développeurs et IT Pro > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 29/12/2012, 01h45   #1
Percepto
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : octobre 2011
Messages : 7
Points : 0
Points : 0
Par défaut Envoyer requête post serveur/serveur

Salut tout le monde,

Je doit intégrer un système de paiement sur un site, et bien sûr, il faut envoyer certaines infos au site dédié. Hors, je n'aimerais pas intégrer des inputs en hidden pour plus de sécurité.

Questions :
* Comment je peux envoyer des infos directement au serveur avec redirection ?
* Comment lire la réponse envoyée par le site du paiement ?

J'ai cherché au niveau de http et Curl, mais se n'est pas super détaillé. Vous connaissez certains tutos ou méthodes pratique svp ?

PS : Le site est développé en MVC

J'espère qu'il y aura qq'un pour m'aider, c'est assez urgent.
Merci d'avance
Percepto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2012, 16h39   #2
John Blobsmith
Membre habitué
 
Avatar de John Blobsmith
 
Inscription : avril 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 148
Points : 134
Points : 134
Hello,
il faut que tu utilise curl.
John Blobsmith est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2012, 21h33   #3
Percepto
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : octobre 2011
Messages : 7
Points : 0
Points : 0
Par défaut Ahhh, enfin une réponse

Grand MERCI John pour ta réponse. L’explication est un peux complexe pour moi, y aurait-il pas un autre tuto stp ou un exemple concret ?

PS : Y a aussi le ssl qui est activé sur le site, comment je peux l'utiliser ?

Merci & excellente fête
Percepto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2012, 09h53   #4
John Blobsmith
Membre habitué
 
Avatar de John Blobsmith
 
Inscription : avril 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 148
Points : 134
Points : 134
regarde ca :
http://fr2.php.net/manual/fr/ref.curl.php

tu initialise:
Code :
1
2
 
$ch = curl_init();

tu set les options que tu veux
Code :
1
2
3
4
 
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
liste des options :
http://fr2.php.net/manual/fr/function.curl-setopt.php

tu exécute ta requête
Code :
1
2
 
$content = curl_exec( $ch );
tu récupère des informations sur la requête exécuté :
Code :
1
2
 
$response = curl_getinfo( $ch );
tu récupère les erreurs si il y en a :
Code :
1
2
3
 
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
tu stop la connexion :
Code :
1
2
 
curl_close ( $ch );
John Blobsmith est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 06h23   #5
Percepto
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : octobre 2011
Messages : 7
Points : 0
Points : 0
Par défaut Merci l'ami

Je l'ai testé et sa marche impec en restant sur le site, mais quand je fais une redirection vers un site externe où j'ai placé un print_r($_POST); et un print_r($_REQUEST); Arrivé sur la page, le POST est vide, et le REQUEST ne contient que [PHPSESSID].

C'est parce que je suis en localhost ?

Comment faire pour récupérer ces infos de l'autre coter en sachant qu'il doit y avoir un traitement sur le site de redirection et qui a son tour renverra la réponse après le traitement.

Dsl je suis un casse tête, mais c'est encore du charabia pour moi Au fait, la session ne se fermera qu'apres la réception, ou dès la redirection

Merci et excellente journée

Citation:
Envoyé par John Blobsmith Voir le message
regarde ca :
http://fr2.php.net/manual/fr/ref.curl.php

tu initialise:
Code :
1
2
 
$ch = curl_init();

tu set les options que tu veux
Code :
1
2
3
4
 
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
liste des options :
http://fr2.php.net/manual/fr/function.curl-setopt.php

tu exécute ta requête
Code :
1
2
 
$content = curl_exec( $ch );
tu récupère des informations sur la requête exécuté :
Code :
1
2
 
$response = curl_getinfo( $ch );
tu récupère les erreurs si il y en a :
Code :
1
2
3
 
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
tu stop la connexion :
Code :
1
2
 
curl_close ( $ch );
Percepto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 08h56   #6
grunk
Modérateur
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 2 499
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 28
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 2 499
Points : 5 214
Points : 5 214
Si il sagit simplement de faire une requête POST vers un autre serveur y'a pas besoin de CURL :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
$postdata = http_build_query($mes_donnees);
 
$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);
 
$context  = stream_context_create($opts);
$result = file_get_contents('http://serveur-distant.com/page.php', false, $context);
Dans $result tu auras la réponse affichée par la page à qui tu auras envoyé la requête.
__________________
Pry Framework php5 | Recherche CDI dev. Web sur Dijon et alentours.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/12/2012, 10h42   #7
John Blobsmith
Membre habitué
 
Avatar de John Blobsmith
 
Inscription : avril 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 148
Points : 134
Points : 134
Je comprend trop ton problème de session et de redirection.

Il y a des options spécial sur curl pour setter un dossier qui va stoker les cookies. Pour garder un session ouverte il faut juste faire 1 seul curl_init
au début du groupe de requête et un seul curl_close à la fin.

@grunk je suis pas sur que tu puisse gérer les cookies et les sessions avec cette méthode.
John Blobsmith est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 21h40   #8
Percepto
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : octobre 2011
Messages : 7
Points : 0
Points : 0
Par défaut Re, John

J'ai vue les fonctions que tu m'as filé, et voila un exemple du code que j'utilise.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $Array_Posts);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);<blockquote>
if($result==false):<blockquote>echo 'Erreur Connexion au Site';</blockquote>else: header("Location: $url");
endif;
</blockquote>curl_close($ch);
J'utilise un seul curl_init() et 1 curl_close(). Mais le site de redirection ne recoit aucune donnée en print_r($_POST);. Le but de tout cela, est que le site qui reçoit les données peut les lire en print_r($_POST);. Si je spécifie un doc de stockage, l'autre site ne pourra pas y acceder.

Merci encore pour le temps.
Bonne & Merveilleuse année à toi

Citation:
Envoyé par John Blobsmith Voir le message
Je comprend trop ton problème de session et de redirection.

Il y a des options spécial sur curl pour setter un dossier qui va stoker les cookies. Pour garder un session ouverte il faut juste faire 1 seul curl_init
au début du groupe de requête et un seul curl_close à la fin.

@grunk je suis pas sur que tu puisse gérer les cookies et les sessions avec cette méthode.
Percepto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 21h56   #9
Percepto
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : octobre 2011
Messages : 7
Points : 0
Points : 0
Par défaut Merci grunk

Merci pour cette solu, cependant, sa génère une erreur :
... failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in ...

ou bien :
... failed to open stream: HTTP request failed! HTTP/1.0 405 Method Not Allowed in ...
C'est du a quoi ?

Merci et bonne année


Citation:
Envoyé par grunk Voir le message
Si il sagit simplement de faire une requête POST vers un autre serveur y'a pas besoin de CURL :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
$postdata = http_build_query($mes_donnees);
 
$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);
 
$context  = stream_context_create($opts);
$result = file_get_contents('http://serveur-distant.com/page.php', false, $context);
Dans $result tu auras la réponse affichée par la page à qui tu auras envoyé la requête.
Percepto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 15h26   #10
John Blobsmith
Membre habitué
 
Avatar de John Blobsmith
 
Inscription : avril 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 148
Points : 134
Points : 134
Bonne année 2013
Citation:
Envoyé par Percepto Voir le message
J'utilise un seul curl_init() et 1 curl_close(). Mais le site de redirection ne recoit aucune donnée en print_r($_POST); Le but de tout cela, est que le site qui reçoit les données peut les lire en print_r($_POST); Si je spécifie un doc de stockage, l'autre site ne pourra pas y acceder.
curl te retourne des infos ou des erreurs ?
John Blobsmith est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 17h05   #11
Percepto
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : octobre 2011
Messages : 7
Points : 0
Points : 0
Par défaut Merci idem à toi

Elle ne me retourne rien puise que je fais la redirection vers l'autre site pour recevoir les données par $_POST, se n'est qu'apres certains traitement sur ce site qu'il me retournera la réponse.
Percepto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 18h19   #12
John Blobsmith
Membre habitué
 
Avatar de John Blobsmith
 
Inscription : avril 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 148
Points : 134
Points : 134
Et tu peux pas faire un exit avant la redirection avec un var_dump de $response = curl_getinfo( $ch ); pour savoir ce qu'il ce passe ?
John Blobsmith est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 05h49   #13
Percepto
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : octobre 2011
Messages : 7
Points : 0
Points : 0
avec deux test y a une rep avec une erreur et une autre sans.

sa m'affiche ce tableau
Citation:
Array
(
[url] => http://www.url.com/acceuil/
[content_type] => text/plain
[http_code] => 302
[header_size] => 290
[request_size] => 199
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.044217
[namelookup_time] => 0.000134
[connect_time] => 0.0165
[pretransfer_time] => 0.016502
[size_upload] => 1359
[size_download] => 0
[speed_download] => 0
[speed_upload] => 30734
[download_content_length] => 0
[upload_content_length] => 1359
[starttransfer_time] => 0.030404
[redirect_time] => 0
[certinfo] => Array
(
)

[redirect_url] => http://www.site.com
)
Avec une redirection ver un autre site, y a
Citation:
Access forbidden!

You don't have permission to access the requested object.
It is either read-protected or not readable by the server.


If you think this is a server error, please contact
the webmaster.

Error 403

www.site.com

Wed Jan 2 05:47:43 2013

Apache
Avec google sa m'affiche

405. That’s an error.

The request method POST is inappropriate for the URL /. That’s all we know.


Quoi faire ? je commence a être désespéré

Citation:
Envoyé par John Blobsmith Voir le message
Et tu peux pas faire un exit avant la redirection avec un var_dump de $response = curl_getinfo( $ch ); pour savoir ce qu'il ce passe ?
Percepto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 14h52   #14
John Blobsmith
Membre habitué
 
Avatar de John Blobsmith
 
Inscription : avril 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 148
Points : 134
Points : 134
Hello, j'ai testé ça sur google.fr, ça fonctionne bien, faut juste enlever les options pour le POST.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
$url = 'http://www.google.fr';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
//curl_setopt($ch, CURLOPT_POST, true);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $Array_Posts);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);
 
print_r($result);
exit;
Peut-être que les données que tu met dans CURLOPT_POSTFIELDS ne sont pas corrects ?
John Blobsmith est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h49.


 
 
 
 
Partenaires

Hébergement Web