osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Module Systempay pour OsCommerce 2.2, Récupérer correctement l'orders_id d'une commande
mickael34
posté 23 Mar 2016, 10:12
Message #1


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 172
Inscrit : 3-January 08
Membre no 20263



Bonjour,

Le problème a déjà été abordé mais jamais la solution n'a été clairement apportée.

Nous utilisons le module de paiement Systempay (version 2.7a) pour OsCommerce 2.2.

Le problème est le suivant :
2 personnes (ou plus) se retrouvent au même moment sur la page de paiement Systempay.
Les 2 paiements vont bien s'enregistrer côté Systempay.
Le 1er à valider son paiement aura bien sa commande d'enregistrée chez nous (dans notre backoffice).
Par contre le 2e se fera "refouler" pour un doublon sur le orders_id (tentative d'enregistrement sur le même orders_id que le client présent au même moment sur Systempay).

J'attends une réponse de la part de leur service technique mais le pb étant très "osCommerce", je viens demander de l'aide par ici.

Je pense que le problème vient de comment le orders_id est récupéré dans le module (d'ailleurs leur commentaire est assez explicite...) :

Code
    /**
     * Try to guess what will be the order's id when osCommerce will register it at the end of the payment process.
     * This is only used to set order_id in the request to the payment gateway. It might be inconsistent with the
     * final osCommerce order id (in cases like two clients going to the payment gateway at the same time...)
     *
     * @return int
     */
    function _guess_order_id() {
        $sql = "SELECT MAX(orders_id) FROM " . TABLE_ORDERS;

        $res = tep_db_query($sql);

        if(tep_db_num_rows($res) == 0) {
            return 0;
        } else {
            return mysql_result($res, 0, 0) + 1;
        }
    }

    /**
     * Test if order corresponding to entered trans_id is already saved.
     *
     * @return boolean true if order already saved
     */
    function _is_order_paid() {
        global $systempayResponse;
        
        $orderId = $systempayResponse->get('order_id');
        $customerId = $systempayResponse->get('cust_id');
        $transId = $systempayResponse->get('trans_id');
        
        $query = tep_db_query("SELECT * FROM " . TABLE_ORDERS .
                " WHERE orders_id >= $orderId" .
                " AND customers_id = $customerId" .
                " AND cc_owner LIKE '%Transaction: " . $transId . "'");
    
        return tep_db_num_rows($query) > 0;
    }
}


Si je comprend bien avec cette fonction, si 2 clients arrivent en même temps sur Systempay, ils auront comme référence le même "MAX(orders_id)", non ?
D'où dans ce cas l'erreur à la sortie sur la duplication de l'orders_id pour le "2e client".


J'utilise la superbe contribution ORDERSCHECK qui dès la page checkout_confirmation pré-enregistre la commande :

Code
// test last orders_id
  $_oders_max_query = tep_db_query("select max(orders_id) as max_id from " . TABLE_ORDERS . "");
  $_oders_max = tep_db_fetch_array($_oders_max_query);
  $_orders_id = $_oders_max["max_id"];

// test last holding_orders_id
  $holding_oders_max_query = tep_db_query("select max(orders_id) as max_id from " . TABLE_HOLDING_ORDERS . "");
  $holding_oders_max = tep_db_fetch_array($holding_oders_max_query);
  $holding_insert_id = $holding_oders_max["max_id"];

// assign last orders_in to prevent duplicate entry
   $insert_id = ($_orders_id >= $holding_insert_id )? $_orders_id+1 : $holding_insert_id+1;



Est-ce que ce n'est pas de ce côté là qu'il faudrait que le module aille chercher le orders_id ?

D'avance merci pour l'aide que vous pourrez m'apporter.

wink.gif



--------------------
Sur OsCommerce 2.2
Go to the top of the page
 
Djemai
posté 18 Oct 2017, 18:27
Message #2


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 162
Inscrit : 27-February 06
Lieu : Troyes
Membre no 9195



Bonsoir
Avez vous résolu le problème avec ce module ?
Cordialement
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 18th November 2017 - 07:38
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)