Aide - Recherche - Membres - Calendrier
Version complète : bugs entre paypal IPN et Atos
Forum osCommerce-fr > OsCommerce et Internet > Solutions de paiement sur Internet
bigos
Depuis que j'ai installé la contribution de paiement de Pericles
http://www.oscommerce-fr.info/forum/index....owtopic=6938.Le paiement en paypal est ok mais j'ai pas de commande dans l'admin d'OS Commerce.
En gros la table orders_total n'est pas mise à jour alors que la table orders est bien mise à jour
Du coup dans l'admin de'oscommerce j'ai pas le montant total de la commande avec les frais de port
le fichier en cause est checkout_confirmation.php .
Car en remettant checkout_confirmation.php avant l'install de la contribution Atos .Ca remarche .
j'ai mis en rouge les modifications qui sont à l'origine du bug suite à l'install de Atos
Si vous avez une idée ca m'aiderait vraiment
merci d'avance
[code supprimé]
je pense que c'est le tuto de Pericles qui est en cause
Citation
A la ligne 324, remplacer la ligne

echo tep_image_submit('button_confirm_order.gif', IMAGE_BUTTON_CONFIRM_ORDER) . '</form>' . "\n";

par

if (isset($$payment->form_submit)) {
$form_submit = $$payment->form_submit;
} else {
$form_submit = tep_image_submit('button_confirm_order.gif', IMAGE_BUTTON_CONFIRM_ORDER);
}

echo $form_submit . '</form>' . "\n";

A la ligne 249, remplacer les lignes

if (is_array($payment_modules->modules))
$confirmation = $payment_modules->confirmation();

par

if (is_array($payment_modules->modules)) {
if ($confirmation) {

A la ligne 87, remplacer les lignes

$breadcrumb->add(NAVBAR_TITLE_1, tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
$breadcrumb->add(NAVBAR_TITLE_2);

par

$breadcrumb->add(NAVBAR_TITLE_1, tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
$breadcrumb->add(NAVBAR_TITLE_2);

if (is_array($payment_modules->modules))
$confirmation = $payment_modules->confirmation();
Havock
Bonjour,

Je me permet de remonter le sujet car je suis confronté au même problème.

Quelqu'un a-t'il trouvé la correction ?

FoxP2
sans doute des conflits dans les conditionnelles if else elseif ... vive la programmation procédurale !
bref, comparateur de fichiers pour voir où les instructions se chevauchent.
Havock
Ce que je ne capte pas c'est que seule les infos de la table orders_total ne sont pas enregistrées.

Les tables orders sont mises à jours via la fonction confirmation de paypal_ipn.php

On met à jour la table orders (et on récupère un valeur pour $insert_id) et juste après on traite la table orders_total

Code
for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
                $sql_data_array = array('orders_id' => $insert_id,
                                    'title' => $order_totals[$i]['title'],
                                    'text' => $order_totals[$i]['text'],
                                    'value' => $order_totals[$i]['value'],
                                    'class' => $order_totals[$i]['code'],
                                    'sort_order' => $order_totals[$i]['sort_order']);

                tep_db_perform(TABLE_ORDERS_TOTAL, $sql_data_array);
            }


L'explication logique serait que la boucle ne se fasse pas ; donc que l'array $order_totals ne soit pas défini.

$order_totals est défini dans la fonction process_button de paypal_ipn.php

Code
$order_totals = array();
        if (is_array($order_total_modules->modules)) {
            reset($order_total_modules->modules);
            while (list(, $value) = each($order_total_modules->modules)) {
                $class = substr($value, 0, strrpos($value, '.'));
                if ($GLOBALS[$class]->enabled) {
                    for ($i=0, $n=sizeof($GLOBALS[$class]->output); $i<$n; $i++) {
                        if (tep_not_null($GLOBALS[$class]->output[$i]['title']) && tep_not_null($GLOBALS[$class]->output[$i]['text'])) {
                            $order_totals[] = array('code' => $GLOBALS[$class]->code,
                                                    'title' => $GLOBALS[$class]->output[$i]['title'],
                                                    'text' => $GLOBALS[$class]->output[$i]['text'],
                                                    'value' => $GLOBALS[$class]->output[$i]['value'],
                                                    'sort_order' => $GLOBALS[$class]->sort_order);
                        }
                    }
                }
            }
        }



C'est probablement la condition :

Code
if (is_array($order_total_modules->modules)) {


qui n'est plus remplie ; mais je ne vois pas en quoi les modifs faites sur checkout_confirmation interviennent
FoxP2
sans aucune certitude, mais ne manquerait il pas quelque part la globale $order_totals dans une fonction ?
Havock
Pour l'instant je n'ai pas trouvé oû $order_totals serait absente. huh.gif

Paypal_IPN marche sans soucis sans les modifs faites sur checkout_confirmation, donc logiquement rien ne manque blink.gif blink.gif

Et je ne vois pas comment les modifs faites sur checkout_confirmation peuvent provoquer ce genre de soucis wacko.gif wacko.gif wacko.gif
Havock
Bon je n'ai pas encore compris le pourquoi de la chose, mais si je ne fais pas la manip suivante

Code
A la ligne 249, remplacer les lignes

if (is_array($payment_modules->modules))
$confirmation = $payment_modules->confirmation();

par

if (is_array($payment_modules->modules)) {
if ($confirmation) {

A la ligne 87, remplacer les lignes

$breadcrumb->add(NAVBAR_TITLE_1, tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
$breadcrumb->add(NAVBAR_TITLE_2);

par

$breadcrumb->add(NAVBAR_TITLE_1, tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
$breadcrumb->add(NAVBAR_TITLE_2);

if (is_array($payment_modules->modules))
$confirmation = $payment_modules->confirmation();


Tout semble fonctionner sans problème atos, paypal etc ... smile.gif

C'est donc l'ordre des instructions qui pose problème.
Havock
La solution semble être de déplacer la commande

Code
if (MODULE_ORDER_TOTAL_INSTALLED) {
$order_total_modules->process();
}


avant

Code
if (is_array($payment_modules->modules))
$confirmation = $payment_modules->confirmation();


Avec cette manip tout fonctionne ; mais je ne comprend pas la logique de la chose. blink.gif blink.gif

Si quelqu'un pouvait m'expliquer je serais moins bête biggrin.gif smile.gif

Merci
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2024 Invision Power Services, Inc.