Jump to content

Validation order pb


Vinz3056

Recommended Posts

Bonjour,

 

Je modifie actuellement le module cic 3.0 car comme beaucoup, j'ai l'erreur CGI2 not ok.

 

J'ai découvert plein de pb et là je sèche...

 

Lors d'un achat, si tout se passe bien, la banque attend un code retour. Si je commente la ligne

$abcd_cmcic30->validateOrder(intval($cart->id), _PS_OS_PAYMENT_, substr($CMCIC_bruteVars['montant'], 0, -3), 'CB CIC', 'Paiement '.intval($CMCIC_bruteVars['reference']), null, $id_currency, false, $cart->secure_key);

le retour est ok, mais le panier non transformé en commande (logique !)

 

Si je dé-commente cette ligne, le retour à la banque ne se fait pas (page blanche) mais la commande est validé...

 

Quelqu'un veut se prendre la tête avec moi ?

Merci !

Link to comment
Share on other sites

Si je rajoute 2 logger (1 avant et 1 après)

Logger::addLog("validateorder 1");
$abcd_cmcic30->validateOrder(intval($cart->id), Configuration::get('PS_OS_PAYMENT'), substr($CMCIC_bruteVars['montant'], 0, -3), 'CB CIC', 'Paiement '.intval($CMCIC_bruteVars['reference']), array(), $id_currency, false, $cart->secure_key);
Logger::addLog("validateorder 2");

Aucun des 2 n'est exécuté alors que le validateOrder lui est bien exécuté... Bizarre !

Edited by Vinz3056 (see edit history)
Link to comment
Share on other sites

Bonjour,

 

l'url CGI2 est testé par la banque lors de la validation du paiement. Il faut transmettre cette information à la banque sinon cela ne fonctionnera jamais et surtout n'a strictement aucun lien avec le module.

 

Par contre il peut aussi arriver que cette url ne fonctionne pas mais je n'ai jamais rencontré ce cas.

Link to comment
Share on other sites

J'avance... A priori, lorsque je commente le validateorder, les logs sont ok, le retour banque ok.

 

Dès que j'utilise le validateorder, plus rien, page blanche (comme si php ne traitait que la ligne validateorder), pas de log et pas de retour banque.

Link to comment
Share on other sites

Je poste régulièrement le même bout de code qu'il faut presque toujours appliquer lorsque vous avez des modules de différentes génération.

La couche backward_compatibility oublie de nombreux cas et dans le cas de la validation c'est fatal.

Si ton module ne déclare pas par lui-même la methode validateOrder(), lui en ajouter une comme suit:

 public function validateOrder($id_cart, $id_order_state, $amount_paid, $payment_method = 'Unknown',
                $message = null, $extra_vars = array(), $currency_special = null, $dont_touch_amount = false,
                $secure_key = false, Shop $shop = null)
        {
                global $cookie, $cart;

                if (!is_object($cookie))
                {
                        $cart = new Cart($id_cart);
                        $cookieLifetime = (time() + (((int)Configuration::get('PS_COOKIE_LIFETIME_FO') > 0 ? (int)Configuration::get('PS_COOKIE_LIFETIME_FO') : 1)* 3600));
                        $cookie = new Cookie('ps', '', $cookieLifetime);

                        $cookie->id_currency = (int)$cart->id_currency;
                        $cookie->id_lang = (int)$cart->id_lang;
                        $cookie->id_country = (int)Configuration::get('PS_COUNTRY_DEFAULT');
                        $cookie->id_customer = (int)$cart->id_customer;
                }
                return parent::validateOrder($id_cart,$id_order_state,$amount_paid,$payment_method,
                        $message,$extra_vars,$currency_special,$dont_touch_amount,$secure_key,$shop);
        }

Si il en a déjà une mettre le code en début de methode:

                global $cookie, $cart;

                if (!is_object($cookie))
                {
                        $cart = new Cart($id_cart);
                        $cookieLifetime = (time() + (((int)Configuration::get('PS_COOKIE_LIFETIME_FO') > 0 ? (int)Configuration::get('PS_COOKIE_LIFETIME_FO') : 1)* 3600));
                        $cookie = new Cookie('ps', '', $cookieLifetime);

                        $cookie->id_currency = (int)$cart->id_currency;
                        $cookie->id_lang = (int)$cart->id_lang;
                        $cookie->id_country = (int)Configuration::get('PS_COUNTRY_DEFAULT');
                        $cookie->id_customer = (int)$cart->id_customer;
                }

Link to comment
Share on other sites

  • 3 weeks later...

Bonsoir,

 

je souhaitais avoir un peu plus d'informations sur vos différents tests, avez-vous pu faire fonctionner ce module ? Je me bat depuis ce matin pour le faire fonctionner !

 

j'ai toujours ce CGI NOT OK alors que la commande est bien crédité dans le site et le panier vide lors du retour de paiement.

 

Cordialement,

Link to comment
Share on other sites

  • 2 months later...

Bonjour,

Je rencontre le même problème de CGI2 NOT OK, alors que la commande ce valide bien et envoi les mails de confirm au client et à la boutique

 

En faisant mes tests de debug je me suis aperçu que le problème viendrait de :  Configuration::get('PS_OS_PAYMENT')

 

Car si je passe en PS_OS_BANKWIRE or PS_OS_CHEQUE le CGI2 est OK et la commande est bien validée également

 

Quelqu'un à t'il trouvé une solution à ce problème ?

 

Cordialement

Link to comment
Share on other sites

Humm,

 

Tu dois avoir un sérieux problème dans ton code...

Le statut n'entre pas en ligne de compte pour le retour CGI2.

 

Ce qui doit surement se passer est que la validation complète de la commande dans le cas de OS_PAYMENT provoque une erreur qui pollue l'output de ton CGI2.

En effet la banque veux exclusivement OK tout autre cas de figure est considéré par elle en KO.

 

Rajoute un ob_start() en début de ton code, puis un ob_clean() juste avant de retourner le CGI2 OK....

Tu peux éventuellement logguer le contenu du buffer afin de connaitre la source du pb

 

Sinon fais moi un pv pour que je regarde ton problème.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...