Version complète: sur le forum Webmaster Hub : Gestion du Panier Paypal
Webmaster Hub > Création et exploitation de Sites Internet > E-commerce
XenoDeus
Salut,

Voilà j'ai un pett problème happy.gif

Durant mon stage je dois faire un site de vente en ligne de matèriel informatique.
Je dois utiliser le mode de paiement paypal et un problème se pose.

Voilà je gère moi même un panier que j'ai généré en php et stocké dans des cookies. A la fin, lorsque le client veut commander, je veux envoyer l'intégralité de mon panier vers le panier paypal et empêcher celui-ci d'être modifié (pour des raisons de facilité de sauvegarde de la commande dans la bdd). Et ensuite je voudrais récupérer le nom, l'adresse, le code postal, la ville, sont n°tel et son email pour constitué ma base de donnée.

Est-ce possible?

Voici le code que j'utilise pour créer mon tableau et comment je tente d'envoyer mon panier :

CODE
if(($nbLignes)<1)
    echo '<br /><br /><h2><em>Aucun article n\'a été ajouté au panier.</em></h2>';
else
    {

    // Ouverture de la form du bouton
    echo '<form name="panier" target="paypal" action="https://www.paypal.com/fr/cgi-bin/webscr" method="post">';

    echo '<table class=tabcom width=95% border=1 cellspacing=0 cellpadding=4>';
    echo '<tr>';
    echo '<td><b>Reférence</b></td>';
    echo '<td><b>Désignation</b></td>';
    echo '<td><b>Prix Unitaire</b></td>';
    echo '<td><b>Quantité</b></td>';
    echo '<td><b>Montant</b></td>';
    echo '<td><b>Modification</b></td>';
    echo '<td><b>Suppression</b></td>';
    echo '</tr>';
    if ($connexion)
 {
 $db;
 $RechercheNb=$nbLignes;
 $prod_choix = 0;
 $total=0;
 $qtecommande=0;
 for($i=1;$i<=$nbLignes;$i++)
     {
     $posFin=strpos($commande,'#');
     $article=substr($commande,0,$posFin);
     $commande=substr($commande,$posFin+1);
     $posQte=strpos($article, '*');
     $ref=substr($article,0,$posQte);
     $qte=substr($article,$posQte+1,$posFin);
     $requete="select produit_designation, produit_prix from produit where produit_reference='".$ref."';";
     $produit=mysql_query($requete);
     while ($valeursPdt=mysql_fetch_row($produit))
   {
   $des=$valeursPdt[0];
   $prix=$valeursPdt[1];
   }
     $montant=$qte*$prix;
     $total=$total+$montant;
     $qtecommande=$qtecommande+$qte;
     echo '<tr>';
     echo '<td>'.$ref.'</td>';
     echo '<td>'.$des.'</td>';
     echo '<td align="right">'.$prix.'€</td>';
     echo '<td align="center"><input type=text align="right" size=3 name="prod_qte" value='.$qte.'></td>';
     echo '<td align="right">'.$montant.'€</td>';
     echo '<td align="center">';
     echo '<a href="javascript:void(0)" onclick="javascript:modifPanier('.$prod_choix.','.$RechercheNb.')">Mettre à Jour</a>';
     echo '</td>';
     echo '<td align="center">';
     echo '<a href="javascript:void(0)" onclick="javascript:supprPanier('.$prod_choix.','.$RechercheNb.')">Supprimer</a>';
     echo '</td>';

     // Information pour le panier PayPal
     if ($nbLignes==1)
   {

   // S'il n'y a qu'un seul produit à envoyer, il n'y a aucun problème.
   echo '<input type="hidden" name="item_name" value="'.$des.'">';
   echo '<input type="hidden" name="item_number" value="'.$ref.'">';
   echo '<input type="hidden" name="amount" value="'.$prix.'">';
   echo '<input type="hidden" name="quantity" value="'.$qte.'">';
   echo '<input type="hidden" name="no_note" value="1">';
   }
     else
   {

   // Lorsqu'il y a plusieurs produits, il m'est indiqué que mon panier est vide et qu'il faut que je donne un montant.
   $prod_choix++;
   echo '<input type="hidden" name="item_name_'.$prod_choix.'" value="'.$des.'">';
   echo '<input type="hidden" name="item_number_'.$prod_choix.'" value="'.$ref.'">';
   echo '<input type="hidden" name="amount_'.$prod_choix.'" value="'.$prix.'">';
   echo '<input type="hidden" name="quantity_'.$prod_choix.'" value="'.$qte.'">';
   echo '<input type="hidden" name="no_note_'.$prod_choix.'" value="1">';
   }
     echo '</tr>';
     }

 // Déclarations uniques nécessaires pour le panier paypal
 echo '<input type="hidden" name="add" value="'.$nbLignes.'">';
 echo '<input type="hidden" name="cmd" value="_cart">';
 echo '<input type="hidden" name="business" value="'.$adresse.'">';
 echo '<input type="hidden" name="currency_code" value="EUR">';

 }
    mysql_close($connexion);
    echo '<tr>';
    echo '<td align="right" colspan=3><b>Total</b></td>';
    if ($qtecommande<=1)
 {echo '<td align="right">'.$qtecommande.' article</td>';}
    else
 {echo '<td align="right">'.$qtecommande.' articles</td>';}
    echo '<td align="right">'.$total.'€</td>';
    // Bouton Paypal
    echo '<td colspan=2 align="center">';
    echo '<input type="image" src="https://www.paypal.com/fr_FR/i/btn/view_cart.gif" border="0" name="submit" alt="Effectuez vos paiements via PayPal : une solution rapide, gratuite et sécurisée !">';
    echo '</td>';
    echo '</tr>';
    echo '</table>';
    echo '<br />';
    // Fin de la form du bouton PayPal
    echo '</form>';
    echo '<br />';
    echo '</div>';


Voilà j'espère que c'est assez compréhensible.
Xavfun
Hello,

pour la partie PHP, je peux pas t'aider, mais par contre le problème rencontré par Paypal est qu'il ne gère pas les caractères accentués.

Ce qui pose souvent problème pour passer commande, par exemple si dans l'adresse il y a un accent :

12 rue de rivière => plantage et payment Paypal impossible
12 rue de la riviere => c'est ton bon

Bonne chance, je sais pas si ça pourra t'aider, moi ça m'a déjà bloqué pour payer avec Paypal (j'ai du changer d'adresse pour pouvoir commander biggrin.gif )
XenoDeus
Euh non, le problème vient pas de là unsure.gif
Pour l'instant je lui envoie que des valeurs sans accentuation wacko.gif
Merci quand même tongue.gif
Avec ce code je reçois toujours "Veuillez entrer un montant supérieur à zéro." même après avoir entré manuellement les informations nécessaires:

CODE
echo '<input type="hidden" name="add" value="'.$nbLignes.'">';
echo '<input type="hidden" name="cmd" value="_cart">';
echo '<input type="hidden" name="business" value="'.$adresse.'">';
echo '<input type="hidden" name="currency_code" value="EUR">';
//test
echo '<input type="hidden" name="item_name_1" value="livre1">';
echo '<input type="hidden" name="item_number_1" value="ABCDEF">';
echo '<input type="hidden" name="amount_1" value="15">';
echo '<input type="hidden" name="quantity_1" value="2">';
echo '<input type="hidden" name="no_note_1" value="1">';
echo '<input type="hidden" name="item_name_2" value="livre2">';
echo '<input type="hidden" name="item_number_2" value="GHIJK">';
echo '<input type="hidden" name="amount_2" value="10">';
echo '<input type="hidden" name="quantity_2" value="3">';
echo '<input type="hidden" name="no_note_2" value="1">';
XenoDeus
Personne ne comprend mon problème :'( ça fait une semaine que j'y suis deçu :'( wacko.gif
Dan
CITATION(XenoDeus @ jeudi 17 février 2005, 09h53)
Personne ne comprend mon problème :'( ça fait une semaine que j'y suis deçu :'(  wacko.gif
*

Bonjour,

Non, pas vraiment sad.gif

En regardant sur le site Paypal, tout ce que je trouve c'est comment ajouter UN SEUL item dans le panier (avec une quantité pouvant être différente de 1 bien sûr) ... et pas toute une série à la fois.
Le formulaire d'ajout a un champ nommé "amount" et je n'ai pas trouvé de champ "amount_1", "amount_2", etc.

Est-ce que ton problème ne viendrait pas de là ?... du fait que la variable "amount" n'est pas déclarée, elle est donc nulle.

Dan
XenoDeus
Hum lol, je viens de remarquer un truc en relisant le guide d'intégration de paypal lol. Je me référait au chapitre d'"envoie du montant total" page 56 mais j'étais arrivé à la page suivante par recherche qui indiqué pour insérer plusieurs produits dans ce document. IMSTP5.gif Je crois que je peux sauter par la fenêtre lol
Je crois pas qu'on peut remplir d'un seul coup tout le panier. Je peux juste envoyer la somme totale. biggrin.gif
Merci Dan happy.gif

Edit:
Par contre, vous connaissez le code que je devrais utiliser pour pouvoir récuperer des informations sur le client lorsqu'il passe une commande afin que je puisse les gérer dans ma bases de données? Je voudrais garder le nom, l'adresse de livraison, le num tel, l'email ... voilà happy.gif
Dan
CITATION(XenoDeus @ jeudi 17 février 2005, 14h26)
Je crois pas qu'on peut remplir d'un seul coup tout le panier. Je peux juste envoyer la somme totale.  biggrin.gif
*
C'est bie ce qu'il me semblait... Paypal est un système de paiement, pas autre chose. wink.gif

Mais j'ai vu qu'ils ont toutefois un système de caddie... il doit donc être possible d'insérer les articles un à un.

Pour les infos à récupérer dans la base de données, quel est ton problème ?
Dans la mesure où tu as ces infos à disposition, il suffit de passer par une page intermédiaire qui insèrera ces données en base, avant la validation du caddie et l'appel de la page de règlement Paypal.

Dan
XenoDeus
J'ai essayé une fois d'envoyer en boucle chaque article lorsque je voulais valider la commande mais euh ça a pas trop plus à IE lol, ça ramé à mort avant de m'afficher un message d'erreur: un script est en cours, voulez vous l'arreter, sinon vous risquez de ne plus avoir de réponse de l'ordi ... (un truc comme ça). biggrin.gif

Là je lui ai défini un montant qui est le montant totale: lorsque je clique, il m'ouvre une fenêtre paypal avec un tableau contenant un champ quantité:1 , un champ pour supprimer, un champ vide (là où est censé être la désignation), le champ option vide et le champ prix qui contient le montant total.
Je me suis dit, c'est peut être normale.

J'ai donc continué: validation et paiement sécurisé.
Lorsque je veux voir le contenu de mon panier et il réaffiche la même chose... Est-ce que c'est normale? ou le détail sera affiché après ??? wacko.gif

Y a t-il un moyen de tester sans payer?

Y a t-il aussi un moyen que le site soit intégralement en français? car lorsque j'accepte la commande, la page suivante est en anglais (bon il suffit de rajouter "fr/" apres "http://www.paypal.com/" mais bon pour le client sad.gif

Edit:
Et à propos des infos que je veux savoir concernant le client, si celui-ci est déjà enregistré auprès de paypal, cela lui sera fastidieux, à moins que je lui crée un compte qu'il remplie une fois happy.gif mais le problème c'est que s'il rentre n'importe quoi dans son formulaire d'inscription (alors qu'il sera obligé d'utiliser les bonnes informations sur paypal happy.gif). Je voudrais au moins récupérer l'adresse de livraison par paypal afin de la comparer avec celle enregistrée dans la base et mettre à jour si nécessaire.
Dan
Tu peux tester en payant 1 Euro, et en annulant le paiement ensuite wink.gif
Ils n'ont malheureusement pas d'interface de test.
XenoDeus
On peut utiliser le même compte?
Je veux dire j'achète chez moi wacko.gif
Dan
CITATION(XenoDeus @ jeudi 17 février 2005, 17h24)
On peut utiliser le même compte?
Je veux dire j'achète chez moi  wacko.gif
*

Non , je ne pense pas que ce soit possible sad.gif
XenoDeus
Youpi IMSTP3.gif

J'ai réussi IMSTP3.gif

J'ai réussi à envoyer le contenu complet du panier et aller directement au paiement sans que le client puisse modifier IMSTP3.gif

laugh.gif

CODE
       // Information pour le panier PayPal
       if ($nbLignes==1)
     {
     echo '<input type="hidden" name="add" value="1">';
     //echo '<input type="hidden" name="upload" value="1">'; ne semble pas fonctionner pour un seul produit :(
     echo '<input type="hidden" name="item_name" value="'.$des.'">';
     echo '<input type="hidden" name="item_number" value="'.$ref.'">';
     echo '<input type="hidden" name="amount" value="'.$prix.'">';
     echo '<input type="hidden" name="quantity" value="'.$qte.'">';
     echo '<input type="hidden" name="no_note" value="1">';
     }
       else
     {
     $prod_choix++;
     echo '<input type="hidden" name="upload" value="'.$prod_choix.'">';
     echo '<input type="hidden" name="item_name_'.$prod_choix.'" value="'.$des.'">';
     echo '<input type="hidden" name="item_number_'.$prod_choix.'" value="'.$ref.'">';
     echo '<input type="hidden" name="amount_'.$prod_choix.'" value="'.$prix.'">';
     echo '<input type="hidden" name="quantity_'.$prod_choix.'" value="'.$qte.'">';
     echo '<input type="hidden" name="no_note_'.$prod_choix.'" value="1">';
     }
   echo '</tr>';
   }
     echo '<input type="hidden" name="cmd" value="_cart">';
     echo '<input type="hidden" name="business" value="'.$adresse.'">';
     echo '<input type="hidden" name="currency_code" value="EUR">';
     }


Maintenant, il faut que je récupère l'accusé de réception pour savoir s'il la commande a bien été validé afin de valider la commande dans ma base de donnée. Vous savez comment le faire?

Au fait, j'ai entendu parler d'ipn : kesako ???? wacko.gif


Edit: Ben je viens de me rendre compte que je n'avais pas besoin de gérer s'il n'y a qu'un seul produit.

CODE
// Information pour le panier PayPal
       //if ($nbLignes==1)
     //{
     //echo '<input type="hidden" name="upload" value="1">';
     //echo '<input type="hidden" name="item_name_1" value="'.$des.'">';
     //echo '<input type="hidden" name="item_number_1" value="'.$ref.'">';
     //echo '<input type="hidden" name="amount_1" value="'.$prix.'">';
     //echo '<input type="hidden" name="quantity_1" value="'.$qte.'">';
     //echo '<input type="hidden" name="no_note_1" value="1">';
     //}
       //else
     //{
     $prod_choix++;
     echo '<input type="hidden" name="upload" value="'.$prod_choix.'">';
     echo '<input type="hidden" name="item_name_'.$prod_choix.'" value="'.$des.'">';
     echo '<input type="hidden" name="item_number_'.$prod_choix.'" value="'.$ref.'">';
     echo '<input type="hidden" name="amount_'.$prod_choix.'" value="'.$prix.'">';
     echo '<input type="hidden" name="quantity_'.$prod_choix.'" value="'.$qte.'">';
     echo '<input type="hidden" name="no_note_'.$prod_choix.'" value="1">';
     //}
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.