Aide - Recherche - Membres - Calendrier
Version complète : [résolu]Affichage "chekout_process.php"
Forum osCommerce-fr > Adapter OsCommerce MS2 > Modules de Paiement et de Livraison
Eric Lapeyre
Salut toulmond',

J'ai presque fini ma boutique cependant lorsque je fais des tests (et que tout fonctionne pas trop mal), une fois que j'ai renseigné mes n° de carte bancaire et que la transaction est passée, je suis dirigé sur le page "checkout_process.php". En clair, c'est la dernière page qui s'affiche sans lien retour vers la boutique ou quoique ce soit.
Sur le navigateur s'affiche :

1062 - Duplicate entry '2147483647' for key 1
insert into orders (customers_id, customers_name, customers_company, customers_street_address, customers_suburb, customers_city, customers_postcode, customers_state, customers_country, customers_telephone, customers_email_address, customers_address_format_id, delivery_name, delivery_company, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state, delivery_country, delivery_address_format_id, billing_name, billing_company, billing_street_address, billing_suburb, billing_city, billing_postcode, billing_state, billing_country, billing_address_format_id, payment_method, cc_type, cc_owner, cc_number, cc_expires, date_purchased, orders_status, currency, currency_value) values ('13', 'Bebert la Traboule', '', '3 traboule de l'est', '', 'X rousse', '69 000', 'Lyon', 'france', '0101010101', 'eric.lapeyre@XXXXX.com', '1', 'Bebert la Traboule', '', '3 traboule de l'est', '', 'X rousse', '69 000', 'Lyon', 'france', '1', 'Bebert la Traboule', '', '3 traboule de l'est', '', 'X rousse', '69 000', 'Lyon', 'france', '1', 'Carte bancaire (Paiement sÈcurisÈ SSL ePay Security)', '', '', '', '', now(), '1', 'EUR', '1.00000000')
[TEP STOP]

Je n'ai pas de lien retour vers la boutique...

D'un autre côté, "EPAY" est en phase "test". Est-ce que ça a un rapport ?

Merci par avance pour vos réponses éclairées biggrin.gif
fissiaux


Tu es allé voir du côté de ta base de données, la table orders. Normalement, elle ne contient qu'une seul clé, la clé primaire qui est orders_id.

Elle est en auto-increment et n'est pas présente dans ton ordre insert : donc tu laisses mysql calculé lui-même cette clé.

C'est bizarre qu'il te ressort une clé déjà attribuée, sauf si tu as bidouillé la table à la main, ou que tu as joué avec la valeur AUTO_INCREMENT.

Mysql est fiable, donc je pencherais plus pour la seconde solution.

PS : as tu réellement 2147483647 commandes dans ta boutique, car si c'est la cas, tu dois être le roi du pétrole.....
Eric Lapeyre
Salut Fissiaux,

Merci pour ta réponse. smile.gif

Je suis allé voir sur la base de données et j'ai trouvé "orders_id". Visiblement : rien à signaler de ce côté...

Concernant la "valeur AUTO_INCREMENT", je n'ai pas souvenir d'y avoir touché. D'ailleurs, où est-ce que je la trouve cette valeur ?
Comment faire pour rectifier ma fameuse page "checkout_process.php", je suis un peu décontenancé...

Pour ce qui est de ton "PS", je comprend mieux pourquoi mon banquier ne m'appèle plus pour me proposer un découvert autorisé ! laugh.gif
Nan, je blague, je ne sais pas d'où ça vient ça encore... prochaine étape. rolleyes.gif

@+ et merci pour le coup de main...

Eric
Eric Lapeyre
Resalut tous,

Bon, beh j'ai rien touché à la table "orders", elle est telle qu'à son installation. confused.gif
Je me suis apperçu que c'est en paramétrant "checkout_process.php" que tout part en vrille.
J'ai installé et re-installé OsC au moins 4 ou 5 fois, dans l'espoir qu'en écrasant la version précédente ça puisse "se réparer", cependant j'arrive toujours au même point... Là, je ne comprend plus rien...
D'après "Epay" (mon tpe), dans le didactitiel il est dit :

La référence de commande sous osCommerce est incrémentée automatiquement par la base de données après paiement, et donc différente de la référence communiquée à ePay Security avant paiement.

Pour disposer de la même référence sur osCommerce et ePay Security, procéder comme suit :

1. Ajouter dans 'checkout_confirmation.php' les 2 lignes suivantes avant require(DIR_WS_CLASSES . 'payment.php') :
$ref = date('ymdHis');
tep_session_register('ref');
2. Remplacer dans 'includes/modules/payment/epaysecurity.php' (function process_button()) :
tep_draw_hidden_field('ref', date('ymdHis')) .
par
tep_draw_hidden_field('ref', $ref) .
3. Remplacer dans 'checkout_process.php' (aprËs $order_totals = $order_total_modules->process()) :
$sql_data_array = array('customers_id' => $customer_id,
par
$sql_data_array = array('orders_id' => $ref, 'customers_id' => $customer_id,

Vala vala... et c'est là que ça m'affiche encore et encore cette satané page cry.gif

Du côté de ma bdd, ça donne :
Champ : orders_id
Type : INT
Taille/Valeurs : 11
Attributs : (rien de sélectionné)
Null : not null
Défaut : (rien d'inscrit)
Extra : auto_increment

Si quelqu'un pouvait m'aider, ça serait bien sympa, merci d'avance... rolleyes.gif

@+

Eric
fissiaux
Fais une sauvegarde de la table orders via phpmyadmin (que cette table, pas toute le base), et affiche nous le fichier résultat.
Eric Lapeyre
Salut Fissiaux,
C'est ça que tu veux :
$sql = 'ALTER TABLE `orders` CHANGE `orders_id` `orders_id` INT( 11 ) NOT NULL AUTO_INCREMENT ';

C'est ce qui apparaît lorsque je clique sur "sauvegarder", puis "Créer source php".
Sinon ça m'affiche ça :
ALTER TABLE `orders` CHANGE `orders_id` `orders_id` INT( 11 ) NOT NULL AUTO_INCREMENT

Je suis un peu une nouille là-dedans aussi j'espère que c'est bien ce que tu m'as demandé...

@+ et merci pour ton soutiens biggrin.gif

Eric
fissiaux


Si tu connais phpmyadmin, tu sélectionnes la table orders et tu demandes un export avec structure et données.

Tu copies les lignes exportées dans un post.
Eric Lapeyre
Re salut,

Je crois que c'est ce que tu souhaitais... désolé d'encombrer la bande passante... confused.gif

# Structure de la table `orders`
#

CREATE TABLE `orders` (
`orders_id` int(11) NOT NULL auto_increment,
`customers_id` int(11) NOT NULL default '0',
`customers_name` varchar(64) NOT NULL default '',
`customers_company` varchar(32) default NULL,
`customers_street_address` varchar(64) NOT NULL default '',
`customers_suburb` varchar(32) default NULL,
`customers_city` varchar(32) NOT NULL default '',
`customers_postcode` varchar(10) NOT NULL default '',
`customers_state` varchar(32) default NULL,
`customers_country` varchar(32) NOT NULL default '',
`customers_telephone` varchar(32) NOT NULL default '',
`customers_email_address` varchar(96) NOT NULL default '',
`customers_address_format_id` int(5) NOT NULL default '0',
`delivery_name` varchar(64) NOT NULL default '',
`delivery_company` varchar(32) default NULL,
`delivery_street_address` varchar(64) NOT NULL default '',
`delivery_suburb` varchar(32) default NULL,
`delivery_city` varchar(32) NOT NULL default '',
`delivery_postcode` varchar(10) NOT NULL default '',
`delivery_state` varchar(32) default NULL,
`delivery_country` varchar(32) NOT NULL default '',
`delivery_address_format_id` int(5) NOT NULL default '0',
`billing_name` varchar(64) NOT NULL default '',
`billing_company` varchar(32) default NULL,
`billing_street_address` varchar(64) NOT NULL default '',
`billing_suburb` varchar(32) default NULL,
`billing_city` varchar(32) NOT NULL default '',
`billing_postcode` varchar(10) NOT NULL default '',
`billing_state` varchar(32) default NULL,
`billing_country` varchar(32) NOT NULL default '',
`billing_address_format_id` int(5) NOT NULL default '0',
`payment_method` varchar(32) NOT NULL default '',
`cc_type` varchar(20) default NULL,
`cc_owner` varchar(64) default NULL,
`cc_number` varchar(32) default NULL,
`cc_expires` varchar(4) default NULL,
`last_modified` datetime default NULL,
`date_purchased` datetime default NULL,
`orders_status` int(5) NOT NULL default '0',
`orders_date_finished` datetime default NULL,
`currency` char(3) default NULL,
`currency_value` decimal(14,6) default NULL,
PRIMARY KEY (`orders_id`)
) TYPE=MyISAM AUTO_INCREMENT=2147483647 ;
fissiaux


Je crois avoir une bonne piste :

QUOTE
Lorsque MySQL doit stocker une valeur qui est hors de l'intervalle de validité d'une colonne, il ramène la valeur à la plus proche possible, et stocke cette valeur. Par exemple, l'intervalle de validité d'une colonne d'entiers INT va de -2147483648 à 2147483647 . Si vous essayez d'insérer -9999999999 dans une colonne de ce type, la valeur sera ramenée à la plus proche possible, c'est à dire -2147483648 . De même, si vous essayez d'insérer 9999999999 , 2147483647 sera stocké à la place.
(citation NEXEN).

Ton champs clé orders_id est déclaré en int(11), et ton AUTO_INCREMENT=2147483647.

EN mixant les 2, tu vois que c'est la limite Mysql. Donc sauf à ce que tu es autant de commandes que cela ce que je te souhaite), il faurdait revenir à des consédiérations plus terre à terre.

Si ta boutique n'est pas en prod, repars avec une table orders décrite dans le fichier sql d'installation. (pas mécontent fissiaux sur ce coup-là).
Eric Lapeyre
Salut Fissiaux et encore merci d'avoir répondu aussi vite... smile.gif
Bon, beh j'ai beau tordre le truc dans tous les sens, ça ne fonctionne tjrs pas...
J'ai bien suivi tes consignes, mais la valeur "2147483647" refuse de se laisser manipuler : j'ai bien tenté de modifier cette valeur ainsi que la valeur "INT", cependant tu peut être sûr que tout redevient comme avant au bout du 2ème essai... comme si je n'avais rien fait, pourtant je suis reparti du fichier ".sql" comme tu me l'as dit...
J'ai remarqué que tout partait en sucette (pour être poli wink.gif) à partir du moment où je paramètre EPAY (mon système de paiement)... Est-ce que ça aurait un rapport ?
C'est plutôt déprimant de passer autant de temps là-dessus en sollicitant de l'aide pour n'arriver à aucun résultat, aucun changement mad.gif
Je pense que je vais devoir payer quelqu'un pour finir de me paramétrer cette boutique... d'ailleurs, s'il y a des volontaires dans le coin... wink.gif
En tous cas, merci beaucoup pour ton aide Fissiaux, et vraiment désolé d'avoir bouffé autant de bande passante...

@+

Eric
fissiaux


CODE
ALTER TABLE `orders` AUTO_INCREMENT = 100;
Eric Lapeyre
Re,

Nonon, rien à faire, cette bourique de BDD accèpte la modif mais une fois le "règlement" effectué (tjrs en phase test) j'arrive encore sur la page "checkout_process.php" au lieu de "checkout_success.php"...
fissiaux


As tu toujours l'erreur MYSQL du début (insert) ?
Eric Lapeyre
'lut Fissiaux,

Oui, j'ai toujours la même erreur...
J'ai beau tripoter la bdd dans tous les sens, ça revient toujours peu après...
Afin d'encombrer encore un peu plus la bande passante, je te colle le message ci-dessous :

Base de données XXXXXXX - Table orders sur le serveur localhost

Erreur

requête SQL : 

INSERT INTO `orders` ( `orders_id` , `customers_id` , `customers_name` , `customers_company` , `customers_street_address` , `customers_suburb` , `customers_city` , `customers_postcode` , `customers_state` , `customers_country` , `customers_telephone` , `customers_email_address` , `customers_address_format_id` , `delivery_name` , `delivery_company` , `delivery_street_address` , `delivery_suburb` , `delivery_city` , `delivery_postcode` , `delivery_state` , `delivery_country` , `delivery_address_format_id` , `billing_name` , `billing_company` , `billing_street_address` , `billing_suburb` , `billing_city` , `billing_postcode` , `billing_state` , `billing_country` , `billing_address_format_id` , `payment_method` , `cc_type` , `cc_owner` , `cc_number` , `cc_expires` , `last_modified` , `date_purchased` , `orders_status` , `orders_date_finished` , `currency` , `currency_value` )
VALUES (
'', '0', '', NULL , '', NULL , '', '', NULL , '', '', '', '0', '', NULL , '', NULL , '', '', NULL , '', '0', '', NULL , '', NULL , '', '', NULL , '', '0', '', NULL , NULL , NULL , NULL , '2004-06-16 09:26:43', '2004-06-16 09:26:43', '', '2004-06-16 09:26:43', NULL , NULL
);

MySQL a répondu:

#1062 - Duplicate entry '2147483647' for key 1

Par exemple, sur ma boutique je me crée une cession, passe une commande, rentre mes coordonnées bancaire, valide et hop ça marche (parce que je me suis supprimé dans ma bdd et que j'ai suivi la(les) manip(s) que tu m'as gentiment soufflé).
Par la suite, je reçois un mail me disant que ma facture se trouve à "tel" endroit, cependant le n° de facture, au lieu d'être du style "YYMMDDHHMM" (année, mois, jour, etc...) est déjà avec le n° 2147483647... Si je retente de passer une seconde commande, beh là ça me remet la page citée en tout premier : "1062 - Duplicate entry '2147483647' for key 1", etc...

Ca me gêne de te solliciter autant, d'autant plus que le pb stagne...

Encore une fois merci beaucoup

@+

Eric
fissiaux


Essaie cela :

CODE
ALTER TABLE orders MODIFY orders_id INT UNSIGNED;
Eric Lapeyre
Cette fois-ci, ça me donne ça : 1062 - Duplicate entry '4294967295' for key 1
Sinon, pour le reste c'est tjrs pareil... confused.gif Ca fonctionne dès que je fais un premier essai mais ça redevient pareil dès le 2ème...
Je ne pense pas qu'il faille effacer la bdd après chaque client... wink.gif
fissiaux


C'est normal, car avec l'odre que je t'ai fait passé, tu es sur des entiers nom signé et donc la limite est doublé par rapport à avant.

Mais, on n'est pas plus avancé.

Le seul truc maintenant est de me donner les accès sur ton serveur mysql , si tu le souhaites mais en MP.
Eric Lapeyre
Oeuf Corse ! Je te maille en privé... Encore merci... smile.gif
fissiaux
Voilà, tu peux ré-essayer.

Ton champs orders_id de la table orders n'avait plus le paramètre auto-increment.

Je l'ai remis et viré la dernière commande.
Eric Lapeyre
Merci smile.gif
En fait, je venais juste de la bidouiller, avant de t'y envoyer... j'ai oublié de te laisser la bdd "propre"... wink.gif
Mais ça fait toujours pareil... sad.gif
Je m'ouvre une cession, passe une cde, rentre mes coordonnées de CB : ça marche nickel !
Je m'ouvre une autre cession (autre compte client), je fais tout pareil qu'à l'opération précédente et là je retombe sur "checkout_process.php"... cry.gif
fissiaux


J'ai avancé. L'eerur ne vient pas de la base SQL. J'ai redéclaré une nouvelle table orders, toute neuve, et au premier insert, pas de problème, sauf que déjà le orders_id est à son maximum.

Donc seconde commande, et là message d'erreur.

Le orders_id qu'il essaie d'insérer est

'040616223356'


bien sûr supérieur à la définition du champs dans la table, donc il se colle au maximum et là insert en double.

regardez bien la clé ..................

C'est la date au format AAMMJJ puis l'heure au format HHMMSS.


Donc maintenant, il faut regarder :

arrow.gif soit tu as modifié le checkout_process.php et l'id n'est plus calculé automatiquement, mais passé dans l'odre insert.

arrow.gif soit un paramétrage quelconque au niveau de ton moyen de paiement (Epay Security).


Pour avancer, tu dois savoir si tu as touché au checkout_process, sinon regarde le second point.

PS1 : tu n'as pas touché à /catalog/includes/classes/orders.php ?

PS2 : donne nous le contenbu du fichier correspondant à ton moyen de paiement (c'est une classe dans includes/modules/payment/).

A+
Eric Lapeyre
Oui, j'avoue ! J'ai modifié "checkout_process"... parce que EPAY me demandait de le faire (pour la réf. de cde, sinon c'est la zone au niveau gestion).
Je n'ai pas touché au fichier "orders.php", promis ! wink.gif

Pour le fichier correspondant au moyen de paiement, je te l'envoie par mail... risque de polluer encore la bande passante... confused.gif
fissiaux
QUOTE (Eric Lapeyre @ 16 jun 2004, 23:10)
Oui, j'avoue ! J'ai modifié "checkout_process"... parce que EPAY me demandait de le faire (pour la réf. de cde, sinon c'est la zone au niveau gestion).



L'erreur doit venir de là.



Que t'ont ils dit de modifier ?

Eric Lapeyre
Je te recolle le passage dont j'ai tenu compte sur le didacticiel EPAY :
<couic>
II. RÈfÈrence de commande
-------------------------
La rÈfÈrence de commande sous osCommerce est incrÈmentÈe automatiquement par la base de donnÈes aprËs paiement, et donc diffÈrente de la rÈfÈrence communiquÈe ‡ ePay Security avant paiement.
Pour disposer de la mÍme rÈfÈrence sur osCommerce et ePay Security, procÈder comme suit :
1. Ajouter dans 'checkout_confirmation.php' les 2 lignes suivantes avant require(DIR_WS_CLASSES . 'payment.php') :
$ref = date('ymdHis');
tep_session_register('ref');
2. Remplacer dans 'includes/modules/payment/epaysecurity.php' (function process_button()) :
tep_draw_hidden_field('ref', date('ymdHis')) .
par
tep_draw_hidden_field('ref', $ref) .
3. Remplacer dans 'checkout_process.php' (aprËs $order_totals = $order_total_modules->process()) :
$sql_data_array = array('customers_id' => $customer_id,
par
$sql_data_array = array('orders_id' => $ref, 'customers_id' => $customer_id,
<couic>
fissiaux


La boucle est bouclée, tout s'explique et notamment que la référence parte en vrille et qu'elle coresponde à $ref = date('ymdHis');

Maintenant , il faut savoir si c'est important d'avoir un numéro de référence sur epay ? A quoi leur sert il ? Quand ils reviennnet chez toi avec checkout_process, viennent ils avec la référence ?

Si tu arrive à répondre à ces questions, et que tu vois qu'il n'y a pas d'utilité d'avoir cette référence de connue chez eux, tu modifies pour revenir à avant le point 3).

Donc dans checkout_process, (après $order_totals = $order_total_modules->process()), tu remplaces :
$sql_data_array = array('orders_id' => $ref, 'customers_id' => $customer_id,
par
$sql_data_array = array('customers_id' => $customer_id,
Eric Lapeyre
Concernant le n° de référence sur EPAY, j'avoue que c'est bien plus pratique d'avoir le même...
En théorie ils (EPAY) doivent revenir vers moi avec le même n°...
Là ça fonctionne en faisant comme tu me l'a conseillé, par contre il me faut contrôler chez EPAY si le règlement a été enregistré ou refusé, faire le rapprochement entre le n° de commande "105" (sur ma boutique) du 17/06/04 et le n° 040617112055 (chez EPAY)...

M'enfin c'est étrange que EPAY propose un truc mal foutu...

Bref, je survivrai ! wink.gif

En conclusion, ça voudrait dire que je ne suis pas tant nouille que ça ? wink.gif

Encore pleins de fois merci pour ton aide...
J'espère, un jour, pouvoir en faire au moins autant...

@+

Eric
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.