+ Répondre au sujet
Page 1 sur 4 123 ... DernièreDernière
Affiche les résultats de 1 à 10 sur 33
  1. #1
    Membre Avatar de maniT4c
    Inscrit
    février 2009
    Messages
    79
    Remerciements
    1
    Remercié 6 fois
    dans 4 messages

    Par défaut Envoyer le mail du bon de commande après le paiement

    Lorsqu'on achète un produit sur une boutique virtuemart un email contenant un bon de commande est envoyé juste avant de passer au paiement.

    Certain trouve cela logique car en effet c'est un bon de commande (donc pas forcément réglé). Mais le comportement le plus courant sur internet est d'envoyer une "confirmation de commande" après avoir reçu le paiement.

    Voici donc comment faire pour modifier ce comportement.

    Dans le fichier: administrator/components/com_virtuemart/classes/ps_checkout.php
    trouvez la ligne suivante:
    Code PHP:
    $this->email_receipt($order_id); 
    et remplacez-la par celle-ci
    Code PHP:
    //$this->email_receipt($order_id); 
    Vous venez simplement de désactiver l'envoie du mail comportant le bon de commande.
    Il faut maintenant le réactiver mais au bon endroit cette fois.

    Dans le fichier: administrator/components/com_virtuemart/classes/ps_order.php
    Remplacez le code
    Code PHP:
    if( empty($d['order_item_id']) ) {            
                
    // When the order is set to "confirmed", we can capture
                // the Payment with authorize.net
    if( $curr_order_status=="P" && $d["order_status"]=="C") { 
    Par celui:
    Code PHP:
    $sendRecapMail=false;
            if( empty(
    $d['order_item_id']) ) {            
                
    // When the order is set to "confirmed", we can capture
                // the Payment with authorize.net
                
                /*
                 * J'ai modifie la condition car le status lors d'un paiement par CB avec atos sips etait P-C et non pas P.
                 */
                
                //if( $curr_order_status=="P" && $d["order_status"]=="C") {
                
    if( ($curr_order_status=="P" || $curr_order_status=="P-C")&& $d["order_status"]=="C") {
    $sendRecapMail=true
    Toujours dans le même fichier
    Remplacez le code suivant:
    Code PHP:
    while ($db->next_record()) {
                    
    $item_id $db->f("order_item_id");
                    
    $fields =array( 'order_status'=> $d["order_status"], 
                                                
    'mdate'=> $timestamp );
                    
    $dbu->buildQuery('UPDATE''#__{vm}_order_item'$fields"WHERE order_item_id='" .(int)$item_id "'");
                    
    $dbu->query();
                } 
    Par celui-ci
    Code PHP:
    while ($db->next_record()) {
                    
    $item_id $db->f("order_item_id");
                    
    $fields =array( 'order_status'=> $d["order_status"], 
                                                
    'mdate'=> $timestamp );
                    
    $dbu->buildQuery('UPDATE''#__{vm}_order_item'$fields"WHERE order_item_id='" .(int)$item_id "'");
                    
    $dbu->query();
                    
                    if(
    $sendRecapMail==true) {
                        
    //on envoi le mail de confirmation avec le recap de la commande.
                        
    require_once( CLASSPATH.'ps_checkout.php');
                        
    $ps_checkout = new ps_checkout;
                        
    $ps_checkout->email_receipt($d['order_id']);
                    }
                } 
    Je suis webmaster indépendant et j'ai un petit blog perso qui traite de joomla et de programmation en général. Vous pouvez suivre mon actu sur mon twitter.

  2. Les membres suivants ont remercié maniT4c pour ce message :

    tataye (06/09/2010)

  3. #2
    Membre régulier
    Inscrit
    novembre 2009
    Messages
    423
    Remerciements
    16
    Remercié 4 fois
    dans 4 messages

    Par défaut

    J'ai fais exactement ce qui est dit dans ce topic.

    Sa ne m'envoi aucun mail (avant ou après commande) .... est-ce que ce code a marché chez d'autres que moi ?

  4. #3
    Membre régulier
    Inscrit
    octobre 2010
    Lieu
    La Rochelle
    Messages
    183
    Remerciements
    15
    Remercié 9 fois
    dans 9 messages

    Par défaut

    Intéressant, mais dans le cas où le client paye par chèque, je pense qu'il est bon qu'il ait confirmation de sa commande avant d'avoir envoyé le paiement, ne serait-ce que...pour ne pas oublier de l'envoyer, et qu'il soit sûr que sa commande a bien été prise en compte.

  5. #4
    Membre régulier
    Inscrit
    novembre 2009
    Messages
    423
    Remerciements
    16
    Remercié 4 fois
    dans 4 messages

    Par défaut

    Oui c'est sur. Je ne m'étais pas posé la question car je ne vais pas mettre le paiement par chèque.

  6. #5
    Membre Avatar de maniT4c
    Inscrit
    février 2009
    Messages
    79
    Remerciements
    1
    Remercié 6 fois
    dans 4 messages

    Par défaut

    En effet je n'avais pas non plus la problématique du chèque.

    En ce qui concerne ton problème de mail qui n'arrive pas il faut bien évidemment vérifier ta boite spam etc..

    Il faut regarder si la condition suivante est bien vérifiée:
    Code PHP:
    if( ($curr_order_status=="P" || $curr_order_status=="P-C")&& $d["order_status"]=="C") { 
    Mais j'avoue que le fait que tu ne reçoivent pas les emails peut provenir de beaucoup de chose.
    Je suis webmaster indépendant et j'ai un petit blog perso qui traite de joomla et de programmation en général. Vous pouvez suivre mon actu sur mon twitter.

  7. #6
    Membre régulier
    Inscrit
    novembre 2009
    Messages
    423
    Remerciements
    16
    Remercié 4 fois
    dans 4 messages

    Par défaut

    Merci de m'avoir répondu (au faite j'ai laissé un message sur ton forum, tu peux l'effacer si tu veux ).

    Voici ce que j'ai fais :

    Code PHP:
    //$this->email_receipt($order_id); 
    Afin de ne pas envoyer de mail lorsque l'on va choisir son mode de paiement.

    Pour envoyer le mail seulement après la commande (paiement validé) :

    J'ai modifié /administrator/components/com_virtuemart/html/checkout.sips_response.php

    Remplacer le code suivant :
    Code PHP:
    if($response_code == 0  ) {
                    ?> 
                <img src="<?php echo VM_THEMEURL ?>images/button_ok.png" align="center" alt="Success" border="0" />
                <h2><?php echo $VM_LANG->_('PHPSHOP_PAYMENT_TRANSACTION_SUCCESS'?></h2>
            <?php

    }
    else {
    Par :
    Code PHP:
    if($response_code == 0  ) {
                    ?> 
                <img src="<?php echo VM_THEMEURL ?>images/button_ok.png" align="center" alt="Success" border="0" />
                <h2><?php echo $VM_LANG->_('PHPSHOP_PAYMENT_TRANSACTION_SUCCESS'?></h2>
            <?php
            
                 
    //on envoi le mail de confirmation avec le recap de la commande.
                        
    require_once( CLASSPATH.'ps_checkout.php');
                        
    $ps_checkout = new ps_checkout;
                        
    $ps_checkout->email_receipt($d['order_id']);
    }
    else {
    Si tu penses qu'il y a un problème dans mon code, n'hésite pas à me le dire (sa pourrai aider pas mal de mon de je pense) !

  8. #7
    Membre régulier
    Inscrit
    novembre 2009
    Messages
    423
    Remerciements
    16
    Remercié 4 fois
    dans 4 messages

    Par défaut

    Au passage, j'ai vu que lorsque l'on valide la commande dans l'admin de VM, cela envoi 2 mails au client.

    Afin de ne pas envoyer le mail suivant :

    Bonjour ...,

    L'état de votre commande No. 76 a été modifié.

    Le nouvel état est :
    __________________________________________________ __________

    Confirmée
    __________________________________________________ __________

    Pour voir les détails de la commande, cliquer sur le lien (ou le copier dans votre navigateur):


    Il faut modifier la page/administrator/components/com_virtuemart/classes/ps_order.php

    Faire une recherche de (ligne 290 dans ma version de VM) :

    if( !empty($notify_customer) ) {
    $this->notify_customer( $d );
    }
    Et le commenter :
    /*if( !empty($notify_customer) ) {
    $this->notify_customer( $d );
    }*/

  9. #8
    Membre Avatar de maniT4c
    Inscrit
    février 2009
    Messages
    79
    Remerciements
    1
    Remercié 6 fois
    dans 4 messages

    Par défaut

    J'avoue ça fait un bon moment que j'ai pas mis les main dans virtuemart donc pas facile à dire.
    Mais il y a quelques chose d'incohérent à mon avis dans ta méthode.

    Tu utilise le fichier checkout.sips_response.php qui si je ne me trompe pas est le fichier qui est utilisé lorsque le client reviens sur la boutique après avoir payer.

    Tu ne peux pas utiliser ce fichier pour renvoyer l'email de confirmation de paiement car tu n'as aucune garantie que l'utilisateur après avoir payé reviendra sur ton site, donc s'il ferme son navigateur par exemple, il n'aura jamais d'email de confirmation.

    En fait il faut que tu comprenne comment fonctionne une transaction sécurisée, regarde ici

    Je pense donc que ton problème est que la commande est déjà validée lorsque le client arrive sur le fichier qui devrait envoyé le mail. Par conséquent, la condition n'est pas vérifié et l'email pas envoyé.

    Tu dois faire en sorte que l'email soit envoyé au moment ou la commande est validée.
    Cette validation peut se faire à deux moment:
    1. lorsque le client reviens sur ton site (ce que tu as essayé de faire)
    2. Lorsque la banque appel directement le fichier que tu as du lui spécifié.
    Je suis webmaster indépendant et j'ai un petit blog perso qui traite de joomla et de programmation en général. Vous pouvez suivre mon actu sur mon twitter.

  10. #9
    Membre régulier
    Inscrit
    novembre 2009
    Messages
    423
    Remerciements
    16
    Remercié 4 fois
    dans 4 messages

    Par défaut

    Ok. Pour le 1. sa fonctionne. c'est vrai que je suis un internaute discipliné lol, du coup je clique a chaque sur retour à la boutique.

    Je n'avais pas pensai à sa. Merci pour l'info.

    Du coup c'est checkout.sips_autoresponse.php qu'il faut modifier ?

  11. #10
    Membre Avatar de maniT4c
    Inscrit
    février 2009
    Messages
    79
    Remerciements
    1
    Remercié 6 fois
    dans 4 messages

    Par défaut

    Si tu ne modifie que autoresponse le problème existera aussi, car tu ne peux jamais savoir lequel des deux fichiers sera appelé en premier (celui que lae banque appel ou celui que l'internaute appel en retournant sur la boutique).

    Il faut donc en théorie modifier les deux et mieux encore créer une fonction qui sera appelée dans les deux fichiers. Avec une condition pour ne pas envoyer deux fois le mail.
    Je suis webmaster indépendant et j'ai un petit blog perso qui traite de joomla et de programmation en général. Vous pouvez suivre mon actu sur mon twitter.

Sujets similaires

  1. [Astuce] Mail confirmation commande envoyé après paiement
    Par lylene dans le forum E-commerce
    Réponses: 3
    Dernier message: 11/05/2010, 14h06
  2. Réponses: 4
    Dernier message: 07/10/2009, 01h25
  3. [Problème] envoyer la commande par mail à l'administrateur du site.
    Par joomtogo dans le forum E-commerce
    Réponses: 1
    Dernier message: 14/07/2009, 19h33
  4. Réponses: 2
    Dernier message: 30/03/2009, 12h47
  5. Mail de confirmation de commande après le paiement
    Par .dec dans le forum E-commerce
    Réponses: 3
    Dernier message: 11/03/2009, 21h49

Liens sociaux

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas modifier vos messages
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code HTML est Désactivé