Question

J'ai des problèmes avec la transaction de paiement par carte de crédit et je suis presque sûr que le quote_id en est la cause.Le problème est que je ne sais pas comment incrémenter manuellement le quote_id afin de savoir si j'ai raison ou si je me trompe.

Était-ce utile?

La solution 2

Tout d'abord, le problème que j'avais était d'obtenir la réponse "ABORTED", la raison était qu'un champ était toujours envoyé avec la même valeur, cette valeur était orderid (qui est en fait le quote_id car l'identifiant de commande n'a pas été créé à ce stade), ce qui est interdit car il s'agit d'un champ unique dans leur base de données.Magento ne crée jamais de nouveau devis pour un utilisateur jusqu'à ce que sa transaction en cours soit terminée (ou lorsqu'une autre session est créée, je ne suis pas encore sûr), le quote_id est envoyé (en tant qu'ID de commande) avec la même valeur pour un utilisateur, plus et encore une fois, donc chaque transaction est annulée.

La solution:désactivez simplement le devis en cours lorsque la passerelle de carte de crédit ne répond pas avec la chaîne "APPROVED", dans sales_flat_quote il suffit de définir is_active à 0, donc Magento donnerait à l'utilisateur un tout nouveau devis.Le problème est que tout ce qui se trouve dans le panier serait perdu pour l'utilisateur (l'enregistrement existe toujours, mais l'utilisateur n'y aurait plus accès), donc Magento devrait cloner le devis, puis désactiver le devis actuel et sauvegarder les deux, le devis cloné sera désormais le devis actuel mais avec un prix différent quote_id.

// get the current quote
$current_quote = Mage::getModel('sales/quote')->load(23);

// create a new one
$cloned_quote = Mage::getModel('sales/quote');

// copy the content of the current one into the new one
$cloned_quote->merge($current_quote);

// deactive the current quote
$current_quote->setIsActive(false);

// save the cloned quote
$cloned_quote->collectTotals()->save();

// and save the changes of the current quote
$current_quote->save();

// now the current save is inactive 
// and the cloned one is the "new" current quote

la solution a été prise d'ici Comment copier un devis (uniquement les articles du panier) vers un autre devis (uniquement les articles)

Maintenant, la dernière étape (ou peut-être la première) consiste à incrémenter le quote_id manuellement, pourquoi ?la passerelle de carte de crédit dispose déjà de nombreux identifiants de commande enregistrés sur cet e-shop, 149 pour être précis (en utilisant Magento 1.7, d'ailleurs).J'ai presque tout migré vers Magento 1.9, mais avec une toute nouvelle base de données, les devis ont été mis à zéro, donc le premier devis généré sera rejeté de la passerelle cc.Voici la solution :

ALTER TABLE sales_flat_quote AUTO_INCREMENT = 149;

Donc, en gros, ceci résume la solution à mon problème.J'espère que cela sera utile à quelqu'un d'autre.

Autres conseils

D'abord

Vous ne pouvez pas incrémenter manuellement le quote_id puisqu'il est réglé sur auto increment dans la base de données puisqu'il s'agit primary key du tableau.

Ainsi, lorsqu'un devis est créé, quote_id est créé automatiquement car il s'agit d'un incrément automatique et qui doit être unique à tout moment selon sql règle.

A ton problème

Si vous avez un problème avec credit card payment alors devriez-vous déboguer payment section.Si vous utilisez une extension externe pour votre système de paiement, veuillez les contacter.Ou bien, magento devrait par défaut gérer tous les paiements sans aucune erreur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top