|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 706 ![]() |
bonjour,
voila je veux gerer mes stocks pour qu'une personne ne puisse pas commander si il n'y en plus en stock je met un message "plus ce produit en stock", au début j'avais enlever les nombre de produits des stocks apres validation de la commande apres paypal avec IPN. mais je me retrouve qu'en meme a me poser certaines question avec cette solution car c'est pas vraiment en temps réel. donc j'ai trouver ca: - 1ère solution : je déstocke au moment où la commande est confirmée (mais pas encore payée) Problème : Si la personne change d'avis au moment de payer réellement, en fermant purement et simplement la fenêtre Paypal, je me retrouve avec des stocks inférieurs à ce que j'ai réellement en stock. - 2ème solution : je déstocke après le paiement Problème : Si une 2ème personne confirme ou commence à remplir les formulaires de paiement alors que la 1ère vient de payer, la 2ème personne peut se retrouver à payer des articles qui ne sont plus en stock. - 3ème solution : déstockage en temps réel, à chaque fois qu'un article est ajouté au panier Problème : si une personne ajoute des articles au panier, puis décide de changer d'avis en fermant tout simplement sa fenêtre, alors je me retrouve avec des stocks inférieurs à ce qui devrait être réellement. A votre avis quelle est la meilleur solution , je pense me tenter pour enlever les articles des quelles sont dans le panier mais la personnes ferme la fenetre j'aurai moins des stock que prevu. comment faire? MERCI. |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Salut
Ce que tu évoques c'est un faut problème (pour faire court). Le vrai fond du problème c'est ton stock, c'est à dire d'en avoir suffisamment pour répondre à la demande, au moins pour la journée. C'est "le nerf de la guerre" (si on peu dire) de tous ceux qui font du commerce il me semble. Et ça c'est ton métier en fin de compte, non ? Le cas N°2 est de loin le plus fiable, malgré qu'un client peu s'endormir un peu devant la page PayPal pour payer. S'il met 10 ou 15 minutes avant de valider tu ne pourras rien y faire si pendant ce temps de latence d'autres clients commandent le même produit. Normalement il faudrait faire patienter les autres clients qui commandent le même produit et qui le font juste après le 1er. C'est ingérable à mon sens. Est-ce que ça arrive souvent ? Il y a au moins 2 domaines particulièrement délicats il est vrai c'est de vendre des tickets de concerts où les ventes peuvent se faire sur un temps très court (le pire c'est de tout vendre la journée même), ou de vendre des produits uniques (1 pièce). Est-ce le cas ? Pour les autres cas, comme décompter au moment de la mise dans le panier ça peu être utile dans ces 2 cas ci-dessus, mais ça demandera qu'il y ait une personne qui surveille les paniers créés pour par exemple supprimer un panier créé il y a 1 heure pour le supprimer et réapprovisionner le stock (en estimant qu'au bout d'une heure le client à quitter le site où ne commandera pas). S'il n'y a pas cette surveillance, tu diminues artificiellement ton stock alors qu'il ne serait pas déjà suffisant, tu perds des ventes au final. En somme, cette manière est bonne que si tu dispose d'un stock suffisant (au moins pour 1 journée), et de lancer une routine (genre cron) tard le soir pour supprimer les paniers non convertis et réapprovisionner le stock. Ceci dit, on peu prévoir de déstocker au niveau du panier (ou prè-commande) et lancer un cron toutes les heures par exemple pour supprimer d'un coté et réapprovisionner de l'autre. Faut voir. L'idéal c'est d'avoir suffisamment de stock, tu n'auras plus de problème, ou un peu moins, non ?
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
00
|
|
|
#3 | ||
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 706 ![]() |
Bonjour,
voila je gère mon panier avec des SESSION,lorsqu'un client commande et arrive sur le panier, les produits sont destocker de ma bdd. Probleme: quand le client ferme la fenetre ou se deconnecter les produits sont tj destocker. Je voudrai donc que tout les 30 min si la commande n'est pas au statut valider dans ma bd donc n est pas passer par paypal, je reinsere les produits du panier SESSION dans ma bdd. Donc je voulais comparer le début actif de la session a l heure est si cela fait plus de 30 min, je réinsérer les produits. voici ce que j ai : mais echo me renvoie 0. Code :
est ce une bonne solution, si oui pouvez m'aider a finir? Merci. |
||
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Il ne faut pas utiliser les sessions, elles sont liées aux utilisateurs (au navigateur plus exactement), ce qui veut dire que si l'utilisateur est inactif par exemple tu ne le sauras pas.
Ce n'est absolument pas fiable (pas pour moi du moins). Le moyen qui me semble fiable c'est d'utiliser une tâche cron (ou tâche planifiée), donc que ce soit déclenché uniquement coté serveur toutes les heures ou 30 minutes par exemple. Faut espérer que ton hébergeur offre ce genre de service. Ceci dit certains sites le proposent. Après ça, il vaut mieux que la gestion des paniers se fassent dans une Bdd liés aux utilisateurs, (ce qui n'empêche pas de les mettre dans la session en parallèle). Ceci devrait faciliter les choses. Puis il faudrait une autre base de temps pour décider si oui ou non le panier sera détruit pour restocker. Théoriquement tu n'as pas besoin de créer un statut pour ça, juste une date (datetime) au niveau du panier, et un délai de validité du panier (un délai de référence, une config). Si le panier n'est pas transformé en commande (pas en court de commande) et si le délai est expiré, alors on détruit le panier et restokage. Il me semble qu'il faut détruire le panier, sinon il risque d'avoir des incohérences vu que c'est à ce moment là que tu prévois le déstockage. Par ailleurs, cela peu de manière indirecte dérouter un utilisateur qui à un moment voit ces produits sans son panier, puis quelque temps après plus rien. Faudra peut être faire attention qu'au bout d'une commande le panier est bien supprimé, sinon il peu avoir des problèmes/incohérences. Enfin, tout ça n'est qu'une suggestion, sans compter que je ne suis pas partisan de déstocker au niveau du panier. Il y a intérêt que tout soit fiable, sinon ça peu être pire.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 706 ![]() |
bonsoir,
merci pour tes conseils j'ai une table existante deja entre commande et article regroupe(id_commande,id_article, quantite, prix_date_commande) donc si j'ai suivi: 1/le client commande arriver au panier le stock est decrementer et la table 2/page confirmation commande: -la commande est enregistrer dans dans la bdd. -la table regrouper(qui joue le role de panier)est remplit. 3/interface paypal 4/retour sur le site: -infos IPN sauvegarder en completant les données de la commande et statut modifier dans l enregistrement de la table en completed. 5/tache cron toute les 30 min qui verifie la date de la table regrouper avec celle de maintenant si depasse 30 min enregistrement: -restockage en modifiant alors la table produit par la qte du produit dans la table regrouper. -supprimer dans regrouper et aussi commande. -suppression session panier. est ce bien ca? je vais me renseigner pour les cron je n en ai jamais fait. merci. |
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
J'ai du mal à comprendre le déroulement que tu décris, comment t'as prévu cette gestion du panier/commande.
D'ailleurs, cette phrase '1/le client commande arriver au panier le stock est decrementer et la table ' est surement incomplète, je n'ai pas compris. Je reste cependant étonné que tu prévois de créer la commande avant que le paiement soit effectué, ça risque de compliquer cette gestion de stock (entre autre), d'avoir des informations contradictoires. Si un client valide la commande (création de la commande donc), arrive sur PP, puis finalement revient sur ton site sans faire de paiement, ce client se retrouve avec non seulement un panier mais aussi sa commande, il aurait donc tout le loisir de modifier son panier (rajout de produits, modif des quantités, etc ...). S'il relance à nouveau la commande, qu'est-ce qu'il se passe ? Normalement la commande devrait être effective uniquement au niveau du IPN, au retour de PP, non ? J'ai idée que tu procèdes comme ceci par précaution, au cas où les choses ne se passent pas très bien au niveau de PP, non ? Un système classique est le suivant, et il y a d'ailleurs 2 cas différents : client non identifié et client identifié. - Pour un client non identifié, le panier est placé uniquement dans la session, puis tant qu'il ne s'identifie pas il ne devrait pas pouvoir lancer une procédure de commande. Donc normalement on ne devrait pas déstocker à ce niveau, seulement une fois identifié, donc le script cron ne devrait pas agir à ce niveau. - Pour un client identifié, le panier devrait se trouver dans la Bdd (et pourquoi pas dans la session en parallèle). C'est là où le script cron pourra agir. Par ailleurs, le script cron est totalement indépendant à celle de la gestion du panier/commande, son déclenchement vient du serveur. Donc quand le script est déclenché, le "restockage" doit se faire selon certaines conditions. C'est ces conditions là que tu dois définir en 1er (tu ne dis rien la dessus). De mon coté j'avais suggéré de se baser sur 3 choses : - une date de création/modification du panier (table panier) - un délai d'expiration (un temps de référence). - ne pas agir si un client lance une procédure de commande (présence d'une commande), sinon c'est là où on risque d'avoir des infos contradictoires/incohérentes (problème évoqué plus haut). - Tu as peut être d'autres conditions ... Donc : si pas de pré-commande + si la date du panier est expiré selon le délai de référence -> on lance cette procédure/action de restockage. Après ça, il te faut déterminer quelles actions il faudra faire si les conditions sont réunies (ci-dessus). - Restocker chaque produits du panier selon la quantité prise. - Détruire le panier (Bdd et session s'il y a les 2)
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 706 ![]() |
bonjour,
desoler du retard cloué au lit pendant 2 semaines, j'ai donc changer mon script: 1/ les gens arrive sur le panier si il ils ne sont pas connecter le panier n'est donc qu'en session. 2/si les gens sont connecter le panier est en session et dans la base de données. Petit probléme pour le cron 1&1 pour mon hébergeur je ne peux pas l'utiliser donc la je suis bloquer sur le destockage et le resthockage en temps réel. Quelqu'un aurai une solution ? merci. |
|
|
00
|
|
|
#8 |
|
Membre chevronné
![]() Ingénieur développement logiciels Inscription : février 2008 Messages : 430 ![]() |
Je suis d'accord avec la solution de RunCode Php.
J'aurais séparé en BDD la notion de panier et de commande. Tant que l'utilisateur modifie des choses dans son panier, tu ne changes pas les stocks en base, tu fais juste vivre les quantité du panier du user en bdd et session sans changer réellement les stocks. Ensuite, quand le user valide sa commande c'est à dire qu'il a cliqué sur un bouton disant qu'il a validé sa commande et va payer, tu crées la commande dans ta table des commandes et tu décrémentes les stocks. Enfin : - Si tu reçois l'IPN de Paypal, c'est tout bon tu touches pas aux stocks ils ont été décrémenté au moment de la valid de commande - Si tu reçois pas d'IPN après X minutes ou heures, tu annules la commande (avec envoie de mail et tout et tout) et réincrémente ton stock. Si tu n'as pas de cron, tu peux tenter de le gérer toi-même c'est à dire sur une machine de chez toi accéder régulièrement (via une tache planifiée ou une cron sur un PC/serveur local) à une page php qui lance cette action. Sinon tu peux utiliser les services de cron online comme webron. Je n'ai jamais utilisé, je ne sais pas ce que ça vaut.
__________________
Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre. Linus Torvalds |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com