Bonjour! :)

Tout d'abord félicitations à Grafikart pour son tuto sur Paypal ! :)
Je viens donc de suivre ce tuto et j'aurais besoin de précisions.

On a donc 2 possibilités pour la création du formulaire :
1.1 - soit on passe par Paypal (création boutons)... (j'ai pas été jusqu'au bout, 'faudrait que je teste)
1.2 - soit on fait le form en HTML mais a priori le gros MAIS c'est au niveau sécurité ( cf les URLS des pages ipn et cie qu'on met en dur)... donc du coup je trouve que ça ne laisse pas trop le choix, non ? :/

Ma première question est donc :
2 - Si on passe qd même par HTML, comment fait-on pour passer des variables "php" à l'input "item_name" ?
J'ai fait ça (voir ci-dessous) pour récupérer la sélection de l'utilisateur, mais qd on arrive dans paypal, aucune description n'apparait :/

<input name="item_name" type="hidden" value="<?php echo $d'name'];?> - <?php echo $d'price'];?>" />

3 - Dans le même esprit quelle est la syntaxe pour passer une ou plusieurs variables php dans l'input "custom" ?
Doit on faire un truc du style:

<input name="custom" type="hidden" value="user_id=<?php echo $d'id']; ?>" />

?

4 - Et si on passe par l'interface paypal
4.1 ==>doit-on supprimer tout le <form> au niveau page index.php ?
4.2 ==>et si c'est le cas comment peut-on faire alors pour personnaliser (css) notre formulaire, ses champs etc ?

J'avoue que du coup je suis un peu dans le vague là, car l'aspect faille sécurité du form (urls en dur) incite franchement à passer par des boutons paypal mais du coup je trouve cela carrément moins souple. :/

Merci par avance pour votre aide.

Claw

8 réponses


2 : Normalement ce que tu fais marche, fais attention à ne pas avoir de " dans l'affichage des variables (ça casserait la structure HTML)
3 : Oui on doit faire un truc du style (comme dans le tuto)
4 : Non il te donne un code Form avec qques champs mais tu peux mettre des input en plus comme sur le tutoriel, la personalisation c'est comme d'hab ton CSS

Claw69
Auteur

Bonjour et Merci Grafikart pour ton retour.

En revanche je n'arrive toujours pas à passer dynamiquement à Paypal à la fois :

  • la sélection de l'utilisateur concernant l "item_name"...
    ET
  • le montant correspondant à cette sélection

En gros (sur la même base que le tuto), j'aimerais que selon l'abonnement sélectionné, on passe dynamiquement le prix correspondant que je récupère en BDD.
Donc j'ai fait une liste déroulante sur l' "item_name" et pour chaque <option> "value" je passe l'id de l'abonnement.

Ensuite au niveau de l'input "amount", qd le form est validé, je fais une requête SQL pour récupérer le montant de l'abonnement sélectionné (id = $_POST'item_name']) mais qd j'arrive sur Paypal, le montant est à zéro !

Et vice-versa: si je pars du prix pour récupérer la description et la passer dynamiquement dans l'item_name, je perd la description côté Paypal, j'ai même un input type "text" vide à la place.

Je suppose que Paypal perd les infos des requêtes ou des $_POST donc comment puis-je faire ?

<select name="item_name">
    <?php
        // on ajoute une liste déroulante pour récupérer les différentes offres possibles 
    $req = $bdd->query('SELECT * FROM offers');
    while($d = $req->fetch(PDO::FETCH_ASSOC)) // FETCH_ASSOC : pour récupérer sous forme de tableau associatif
    {?>
        <option value="<?php echo $d'id']; ?>"><?php echo $d'name'];?> - <?php echo $d'price'];?> euros</option>
    <?php
    }
    ?>
    </select>  

if (!empty($_POST'item_name']))
{
    $req = $bdd->query('SELECT * FROM offers WHERE id =' .$_POST'item_name']);
    $d_amount = $req->fetch(PDO::FETCH_ASSOC); // FETCH_ASSOC : pour récupérer sous forme de tableau associatif             
}
?>
<input name="amount" type="hidden" value="<?php if (!empty($d_amount)) { echo $d_amount'price']; } ?>" />

Merci par avance pour votre aide car je sèche là.

Claw

Lorsque tu valide le formulaire tu est redirigé directement sur paypal, tu ne passe pas dans ta condition

if (!empty($_POST'item_name']))

Claw69
Auteur

Merci Grafikart :) donc sous-entendu si je veux passer des variables php au form, elle doivent toutes êtres alimentées avant <u></u>l'arrivée sur le form "paypal"...

Si on reprends ton exemple d'abonnement, il faudrait donc:
1 . un 1er form où l'utilisateur choisit son abonnement dans une liste d'option
2 . ensuite il valide le form qui le dirige vers le form "paypal" que l'on rempli en arrière plan avec les variables php qu'on a récupéré des $_POST du 1er form...
3 . et quand on valide ça dirige cette fois-ci vers le traitement paypal

Ce te semble correct comme fonctionnement?

Sinon j'aurais une autre question:
Dans ton tuto, tu considères que l'achat est fait par un utilisateur membre connecté (forcément c'est pour des abonnements)...mais est-ce que pour d'autres types d'achat (d'objets par exemple) on pourrait laisser la possibilité à un visiteur lambda de faire une transaction de paiement? y' aurait-il un danger au niveau sécurité?

Merci.

P.S. 1 : as-tu prévu un 2ème tuto pour gérer un panier d'achats...? autrement dit plusieurs items pour le même achat.
P.S. 2 : rien à voir, à chaque retour de ta part, je reçois 2 alertes mails au lieu d'une, avais-tu identifié ce petit problème?

Oui la fonctionnement semble correcte.

Oui c'est immaginable mais il faut sauvegarder au moins une information de l'utilisateur (comme son email par exemple en cas de problème). Niveau sécurité pas trop de risque, je ne connais pas de robot qui spam de un formulaire et qui paye :D

PS : Un tuto sur un panier est prévu, mais je ne détaillerais pas la phase paiement (l'idée c'est d'envoyer l'id de la commande plutot que la liste des produits)
PS2 : Bizarre je regarde d'ou ça peut venir.

Claw69
Auteur

Merci pour ton retour ! :)
Ok je garde de toute façon une info pertinente (email etc) pour lié le visiteur à son achat.

p.s. : ok pour le tuto "panier", p-e j'irai aussi jeter un oeil sur la doc "paypal" à l'occas' (466 pages d'anglais...arrgghhh) car je crois qu'ils parlent de panier d'achat.
p.s. 2 : ok...
p.s. 3 : imaginons un Monde où les robots iraient sur les formulaires de paiement.... ;)

Claw69
Auteur

Hello Grafikart,

J'aurais une ou 2 petites questions supplémentaires:

1) voilà, je propose un formulaire à l'utilisateur où il a le choix entre 5 "produits" (choix unique).
J'ai décidé pour des raisons de déco et de souplesse technique de traduire ça avec des zones d'options.
une fois ce formulaire validé, j'alimente mon form paypal et au niveau de l'input "amount", je précise en value le bon prix que j'ai récupéré en BDD... MAIS le problème c'est que comme j'ai créé mon form via l'interface paypal, à chaque fois que je fais une transaction, paypal récupère le prix que j'ai précisé dans l'interface lorsque j'ai créé mon bouton! :(
'Y a pas moyen d'écraser la valeur précisée par défaut ?
ou alors je créé 5 boutons similaires avec mes 5 prix, et je conditionne leur appel via php en fonction du produit choisi, ça te semblerait ok ?

2) A la fin d'une transaction, Paypal informe l'utilisateur qu'il va recevoir un email lui confirmant sa transaction. J'ai bien précisé une email valide MAIS je ne reçois pas cet email. Est-ce que c'est le fait d'être en mode Sandbox ?

3) j'ai un problème d'encodage visiblement: je passe des infos à paypal comme prénom, nom etc, . Lors d'une transaction les infos sont bien rapatriées dans Paypal mais les accents sont mal interprétés, comment dire à Paypal que je suis en UTF-8 (sans BOM) car je suppose que le problème vient de là?

Merci par avance.

Claw

Claw69
Auteur

Bonjour,

Une ptite question:
Si lors des contrôles (montant, etc) effectués sur la page IPN, il y a incohérence(s), comment doit-on faire pour empêcher paypal de générer la transaction, car Paypal file "tout droit", génère la transaction et nous redirige vers la page success. (Logique je suppose puisqu'on fait les contrôles alors qu'on est déjà dans la condition où le paiement est considéré comme "COMPLETED".
Ne devrait-on pas faire nos contrôles avant et où ?

Merci par avance.

Par rapport à mon message précédent, auriez-vos une idée pour les points 2 et 3 (sachant que j'ai géré mon point 1)?

Claw