développement web

Import groupé d’abonnés à la newsletter

Suite au transfert de certaines de nos boutiques Ebox (notre CMS maison) vers Magento, nous avons eu besoin d’effectuer un import groupé d’abonnés aux newsletters, voici la marche à suivre :

  • tout d’abord, copiez le fichier /app/code/core/Mage/Newsletter/Model/Subscriber.php dans le dossier /app/code/local/Mage/Newsletter/Model (que vous aurez précédemment créé).
  • ouvrez ensuite ce fichier et modifiez la fonction subscribe() de la manière suivante :
    • ajoutez un paramètre à la fonction : public function subscribe($email) devient public function subscribe($email,$sendConfirm=true)
    • et remplacez les lignes suivantes :
      if ($isConfirmNeed) {
      $this->sendConfirmationRequestEmail();
      } else {
      $this->sendConfirmationSuccessEmail();
      }

      par les lignes suivantes :
      if ($isConfirmNeed) {
      if ($sendConfirm) {
      $this->sendConfirmationRequestEmail();
      }
      } else {
      if ($sendConfirm) {
      $this->sendConfirmationSuccessEmail();
      }
      }
    • Sauvegardez le fichier et envoyez le sur votre serveur.
  • Ensuite, il vous faut disposer d’un fichier CSV contenant toutes les adresses mail à insérer (chaque ligne du fichier doit correspondre à une et une seule adresse).
  • Uploadez ce fichier CSV sur votre serveur dans /var/import par exemple.
  • Créez ensuite un fichier import_newsletter.php que vous placerez à la racine de votre site et ajoutez-y le code suivant (en prenant soin de remplacer le chemin et le nom de votre fichier)  :
    <?php
    require_once "app/Mage.php";
    Mage::app();
    $csvfile = "var/import/exportNewsletterRecipient.csv";
    $handle = fopen($csvfile,"r");
    if($handle == FALSE){
    throw new Exception("Unable to open ".$csvfile);
    }
    while (($subscribers = fgetcsv($handle)) !== FALSE) {
    Mage::getModel('newsletter/subscriber')->subscribe($subscribers[0], false);
    }
    fclose($handle);
    ?>

  • Ainsi ce petit script va importer tous les emails contenus dans votre CSV mais grâce à la petite modification en début de cet article, aucun mail d’inscription ne sera envoyé .

En espérant que ce petit tutoriel vous aura servi, passez une bonne journée.

Magento Importer les clients avec mots de passe déjà cryptés en MD5

Vous voulez migrer votre site ecommerce vers une plateforme Magento ? Et vous vous demandez comment importer vos clients ?

L’idéal est de pouvoir utiliser l’assistant Import / Export customers déjà prévu dans Magento. Nous avions vu comment créer votre fichier CSV prêt à l’import via une requête SQL.

Cependant cette méthode ne permettait pas de récupérer des mots de passe déjà cryptés en MD5.

Nous avons finalement trouvé une solution toute simple permettant de garder vos mots de passe MD5 et évitant donc de réinitialiser tous les mots de passe !

Voici la solution, il suffit d’ajouter « : » après votre MD5.

Si l’on reprend notre exemple de requête SQL voici ce qu’il faut ajouter :

SELECT
"base" AS website,
old_table_user.user_email AS email,
"Client" AS group_id,
old_table_user.first_name AS firstname,
old_table_user.last_name AS lastname,
CONCAT_WS(':',old_table_user.password,'')AS password_hash,
// aura pour effet d'ajouter ':' à votre md5 (ex : 1f3870be274f6c49b3e31a0c6728957f:)
old_table_user.first_name AS billing_firstname,
old_table_user.last_name AS billing_lastname,
old_table_user.address_1 AS billing_street_full,
old_table_user.city AS billing_city,
"FR" AS billing_country,
old_table_user.zip AS billing_postcode,
CONCAT_WS(' ',old_table_user.phone_1,old_table_user.phone_2) AS billing_telephone,
old_table_user.company AS billing_company,
old_table_user.fax AS billing_fax,
old_table_user.first_name AS shipping_firstname,
old_table_user.last_name AS shipping_lastname,
old_table_user.address_1 AS shipping_street_full,
old_table_user.city AS shipping_city,
"FR" AS shipping_country,
old_table_user.zip AS shipping_postcode,
CONCAT_WS(' ',old_table_user.phone_1,old_table_user.phone_2) AS shipping_telephone,
old_table_user.company AS shipping_company,4ème étape : Import le fichier CSV dans Magento
old_table_user.fax AS shipping_fax,
"default" AS "created_in",
"Client" AS "group",
old_table_user.newsletter AS "is_subscribed"
FROM old_table_user

Reprennez ensuite la fin du tutoriel présent à cette adresse : http://www.creation-site-lyon.com/2010/06/16/import-des-clients-dune-plateforme-ecommerce-vers-une-plateforme-magento/

En espérant que celà pourra vous être utile !

Installation, configuration et tests du module Atos sous Magento

Nous venons d’installer ce module sur une de nos boutiques Magento et nous nous sommes rapidement rendus compte qu’il s’agit là d’un des modules bancaires les plus compliqués à installer et à tester, c’est pourquoi un petit tutoriel explicatif sera le bienvenue pour tous.

N.B. : la mise en place de ce module a été effectuée sur une boutique Magento 1.4.0.1, il existe peut-être d’autres erreurs sur d’autres versions et inversement, nous avons peut-être rencontrés des erreurs inexistantes sur d’autres versions.

Installation de l’extension

Première partie, la plus simple, il s’agit de l’installation du module. Rendez vous sur http://www.nom_de_votre_site.com/downloader. Collez la clé suivante : magento-community/Mage_Atos puis cliquez sur « Install ». L’installation doit normalement se dérouler sans embuches.

Récupération des fichiers de banque

Ca se complique. Ici, deux choix s’offrent à vous :

  • soit vous utilisez les fichiers de tests.
  • soit vous utilisez les fichiers fournis par votre banque.

Voici notre conseil : en sachant que lors de la création de votre contrat de vente à distance (VAD), votre interface de paiement est en pré-production, aucun paiement ne sera débité, il est judicieux de commencer à travailler directement avec les fichiers fournis par votre banque afin de ne pas avoir à résoudre deux fois les mêmes problèmes (même si nous espérons que tous vos problèmes se résoudront en lisant ce post). Tant que votre interface de paiement est en pré-production, vous pourrez travailler comme si vous utilisiez les fichiers de test sauf que pour passer en production vous n’aurez presque rien à faire.

Dans les deux cas, il vous faut télécharger le kit bancaire. Dans notre cas, il s’agissait d’un contrat avec Sogenactif, le kit correspondant est disponible ici.

Pour les autres (Mercanet,FIA-NET,Sherlocks), la banque envoie au client directement le kit d’installation.

Dans le kit, vous trouverez :

  • un dossier bin contenant 6 fichiers binaires
  • un dossier logo rempli d’images
  • un dossier param avec les fameux fichiers de tests
  • un dossier sample avec des fichiers PHP et Perl
  • une note de version

De plus, la banque vous envoie normalement une clé de décryptage ainsi qu’un logiciel permettant de générer votre certificat bancaire de production (équivalent au fichier de test certif.fr.014213245611111) .

Attention, le premier problème que nous avons rencontré a été la récupération de ce logiciel. En effet, il s’agit d’un fichier en .exe et la plupart des systèmes de messagerie interdise totalement l’envoi et la réception de ce type de fichier (car 80% des .exe circulant par mails sont des virus). Il vous faut donc fournir à la banque une adresse mail Free, Yahoo ou Hotmail car ce sont les seuls qui permettent encore la réception de ce type de fichier.

Une fois votre fichier certif généré grâce au logiciel et à la clé de décryptage, renommez le en certif.fr.votre_ID_bancaire (identifiant que vous avez du recevoir avec votre clé de décryptage).

Vous avez maintenant tout ce qu’il vous faut pour commencer la configuration de votre interface bancaire.

Transfert des fichiers

Renommez le fichier parmcom.XXXXXXXXX (situé dans le dossier param du kit) en parmcom.votre_ID_bancaire (comme pour le certif.fr) puis éditez-le.

  • Après AUTO_RESPONSE_URL!, rentrez la chaine suivante : http://www.nom_de_votre_site.com/atos/standard/automatic/!
  • Après CANCEL_URL!, rentrez la chaine suivante : http://www.nom_de_votre_site.com/atos/standard/cancel/!
  • Et enfin après RETURN_URL!, rentrez : http://www.nom_de_votre_site.com/atos/standard/normal/!
  • Vous pouvez également remplacer merchant.gif (juste après LOGO!) par l’adresse du logo de votre site qui s’affichera sur l’interface de paiement.

Sauvegardez le tout.

Connectez vous maintenant en FTP à votre site et créez un dossier /lib/atos.

Uploadez maintenant votre fichier certif.fr.votre_ID_bancaire (généré à partir du logiciel et de la clé), votre fichier parmcom.votre_ID_bancaire (que vous venez d’éditer) ainsi que le fichier parmcom.sogenactif (ou parmcom.votre_banque) contenu dans le dossier param du kit de test.

Uploadez ensuite les fichiers request et response contenus dans le dossier bin du kit de test mais attention, étant donné qu’il s’agit de fichiers binaires, il vous faut les transférer en binaire. Exemple : dans FileZilla, cliquez sur Transfert > Type de transfert et choisissez Binaire. N’oubliez pas de remettre la configuration par défaut une fois le transfert terminé.

Configuration

Dans le Back Office de votre boutique, rendez vous dans Système > Configuration > Ventes > Modes de paiement > Atos / Sips.

Activer le mode de paiement, votre identifiant de marchand doit se trouver dans la liste déroulante ID Marchand.

Pour le champ « Binaire pour construire la requête » rentrez le chemin vers le fichier binaire request. Attention il s’agit là du chemin à partir de la racine du serveur, ex : path/lib/atos/request. Si vous ne le connaissez pas, contactez l’administrateur de votre serveur. Faîtes de même pour le fichier response avec le champ suivant.

Laissez vide le champ « Fichier pathfile ». Laissez la configuration normale pour le reste sauf si vous souhaitez changer les état de commandes etc…

Sauvegardez la configuration et normalement votre boutique doit être configurée et prête à accepter des paiements.

Problèmes rencontrés et solutions

Malheureusement après les étapes précédentes, il est très probable que, comme beaucoup d’utilisateurs, vous rencontriez une pléthore d’erreurs.

Voici la liste des principales erreurs et comment les résoudre :

Impossible to execute binary file – Set correct chmod

Vos fichiers binaires request et response n’ont pas les droits suffisants pour être exécutés.

Connectez vous en SSH à votre site, rendez vous dans votre dossier /lib/atos et effectuez les commandes suivantes :

chmod 755 request
chmod 755 response

Boucle infinie sur la page /atos/standard/redirect/

4 possibilités :

  • votre serveur est en 64 bits et il faut qu’il puisse lire les fichiers binaires qui sont 32 bits, il vous faut vous connecter en SSH et exécuter la commande suivante :
    aptitude install ia32-libs
  • vous êtes sous OVH, il vous faut télécharger les fichiers binaires spécial OVH disponibles ici
  • la version de vos fichiers binaires ne correspond pas à votre noyau. Connectez vous en SSH et exécuter la commande :
    uname -r

    Cette commande vous donne la version de votre noyau, il faut ensuite uploadez les fichiers binaires correspondant à cette version (ex: la commande vous donne 2.6.XX, uploadez les fichiers binaires request_2.6.XX et response_2.6.XX) avant des les renommer en response et request.

  • votre serveur n’est pas en 64 bits, vos fichiers binaires correspondent à votre kernel et vous n’êtez pas chez OVH : vérifiez les droits d’exécution qu’ont les utilisateurs de votre serveur et quel utilisateur est propriétaire des fichiers binaires. En effet, nous avons rencontré ce problème et l’utilisateur propriétaire des fichiers binaires n’avait pas les droits d’exécution de fichiers binaires.

Vous n’arrivez pas à accéder au serveur de la banque

L’extension génère normalement un fichier pathfile.votre_identifiant_banquaire dans /lib/atos.

Editez-le et en dessous de « Fichiers des paramètres communs », remplacez le chemin après F_DEFAULT! (ex : /var/www/…) par :

lib/atos/parmcom.sogenactif! (remplacez sogenactif par le nom de votre banque)

Error reading certificate file lors du retour de la banque

L’extension génère un second fichier nommé pathfile.parmcom.votre_identifiant_banquaire dans /lib/atos.

Editez-le et, de la même manière que pour le fichier pathfile.votre_ID, remplacez le chemin après F_DEFAULT! par :

 lib/atos/parmcom.sogenactif!

Ecran jaune « Transaction invalide »

Si vous obtenez cette page, il est fort possible que l’URL se termine en /demo/callpayment. Cela signifie que vous utilisez les fichiers de test et pas les fichiers de production, rendez-vous à la partie « Récupération des fichiers » en haut de ce post pour résoudre le problème.

Les notifications de la banque n’arrivent pas

Plusieurs solutions :

  • soit les URL indiquées dans le fichier parmcom.votre_ID sont incorrectes.
  • soit un .htaccess empêche la banque d’accéder à votre boutique.

Conclusion

Normalement, vous devriez maintenant pouvoir effectuer des paiements de test avec vos certificats de production en utilisant le module Atos.

Une fois vos tests terminés, il vous suffit d’envoyer votre PV de recette à votre banque afin qu’il passe votre interface de paiement en production.

En espérant que cet article vous aidera dans la mise en place du module Atos sous Magento.

Forum PHP 2010 : 1ère journée

Nous voici donc le jour du fameux Forum PHP.

Après quelques embuches sur le parcours, je suis arrivé entier à la Cité des Sciences et de l’industrie ou attendait toute l’équipe AFUP pour nous remettre nos badges et un petit sac rempli de choses « phpunny ».

Le temps de poser la veste et j’arrive juste après la KeyNote d’ouverture. Pour la présentation de Mr Rasmus Lerdorf (Le créateur de Php lui même).

PHP, son ecosystème : passé, présent et futur (Rasmus Lerdorf)

Début difficile avec des problèmes d’ordinateurs pendant une petite demi-heure, Mr PHP nous a présenté son parcours et l’ensemble des versions de php en relatant pour chacune d’elles les évolutions majeures.

Aux questions concernant l’avenir,  PHP a atteint selon lui sa maturité et son évolution (PHP 6) s’annonce difficile. Notamment dû à un manque de développeurs et à la gestion unicode pas super nécessaire..

Industrialisation PHP, l’exemple de Canal+ (Raphaël Carles)

Cette conférence a été très intéressante. Nous avons appris comment la société Interakting à utiliser l’industrilation du php afin de répondre aux besoins de la société Canal +.

Ceux-ci sont énormes, le taux de défaillance doit être faible avec des grands pics de visites et une multitude de sites à gérer. Pour celà la société Interacting à utiliser divers outils comme la virtualisation, la sélection de frameworks connus et de plateforme comme EzPublish et ZendPlateform. Beaucoup d’audits de sécurité et d’audits d’experts php (société Zend) afin d’obtenir des délais corrects avec un rendu de qualité (10 livraisons par semaine).

L’ensemble des applications est surveillé par un système de monitoring et des tests de montée en charge.

Le nombre de livraisons étant important ils utilisent un outil de workflow relié à chaque personne susceptible de valider la livraison. Ils gagnent ainsi un temps considérable.

Enfin pour terminer, ils sont en train de tester Hudson comme plateforme d’intégration continue.

Ligne de commande sous Linux : effrayant ? Non : indispensable ! (Pascal Martin)

Un petit passage dans cette conférence reprenant l’ensemble des commandes utiles linux. N’apprenant pas énormément plus, j’ai décidé de migrer pour la conf Prestathop.

e-commerce : Prestashop (Alain Folletête & Lucas Cherifi)

Présentation de la plateforme et surtout des dernières fonctionnalités. Etant arrivé en cours de route voici ce que j’ai retenu :

  • Prestashop met à disposition des développeurs des WebServices,
  • Gros boulot côté performances :
    • Nombre de requêtes divisé par 2 sur la Homepage,
    • Possibilité de mettre en place de la réplication SQL,
    • Possibilité de configurer memcache.
  • Travail aussi sur les perfomances navigateurs :
    • Objectif améliorer le google Page Speed à 98 dans la version 1.4,
    • Possibilité d’utiliser des serveurs de média différents pour les css, javascripts..
    • Smart Cache comme sous EzPublish,
    • Compression de css et JS.
  • Back Office Themable
  • Système d’onglet du Back Office revu
  • Facilité de modification du core. Un dossier est prévu à cet effet en surchageant simplement les classes.

A la question « Avez-vous une partie CMS efficace ? », Les intervenant ont répondu que oui et un système très simple à utiliser. Peut être plus simple que celle de magento !

Déjeuner

Petit break Quick avec la team de la Ferme du Web et M6 Web et direction la conférence sur Magento.

Magento, un framework de E-Commerce (Hubert Desmarest, Guillaume Babik & Roy Rubin !)

Un peu déçu de cette présentation mis à part l’intervention du fondateur Roy Rubin. Les interlocuteurs ont présentés les caractéristiques de Magento.

Magento est ainsi construit à l’aide du Zend Framework et sur le modèle EAV.

L’architecture de l’applicaition est modulaire et il est possible de surcharger les modules existants afin de les utiliser/modifier.

Petite présentation des avantages :

  • Modèle très souple,
  • Utilisation avec un large choix possible de types de catalogues produits,
  • Vente croisée, incitative.. génial pour les marketeux qui ont la main directement sur le backoffice.

Inconvénients :

  • Solution peu documentée,
  • Difficile à prendre en main (4 mois minimum pour un bon développeur),
  • Il faut un hébergement adapté à la solution. Le modèle EAV nécessite beaucoup de ressources pour l’accès en base.

Nous avons eu droit ensuite à la présentation d’un cas, celui de la start-up SmartBox. Il me semble que c’était la même présentation que pour le Bargento ? Puis à la présentation des projets futurs, notamment l’apparition d’application mobile, bref rien de nouveau à se mettre sous la dent ;)

Comprendre pour choisir son hébergement (Sébastien Lucas)

Petit tour ensuite dans cette conférence dont le but était d’aider à choisir un bon hébergement pour son application web. Rien de bien spécifique mis à part quelques conseils et une démarcation des offres d’infrastuctures (type Ovh) et des offres de Services (Type Alterway) ou les sociétés sont là pour amener un réel service à l’entreprise et la conseiller. Un petit chiffre marquant : un taux de disponibilité de 99% correspond à une indisponibilité des sites pendant 7h18 dans un mois. Soyez donc prudent et visez les 99,99% ;)

Optimisation des performances LAMP (Guillaume Plessis & Cyril Pierre de Geyer)

Conférence super intéressante sur les optimisations des solutions LAMP. En parallèle une présentation d’un site drupal hébergé sur Amazon pour l’occasion. Les intervenants ont ajoutés des optimisations et fait augmenter le nombre de requêtes possibles sur le site drupal.

Ainsi au premier test le nombre de requêtes par seconde sans optimisations était de 15 requêtes.

Après l’ajout de cache d’upcode avec des solutions comme APC, Xcache et Zend Optimizer le nombre de requêtes est passé à 45 (x3) !

Ensuite à l’aide des optimisations spécifiées par Yahoo (Compression Gzip, Expiration dans les en têtes, Etags, Server limit..) nous sommes arrivés à 55 requêtes.

Un tas de conseils a été donné durant cette conférence, en voici quelques uns :

  • Utiliser des profiler pour améliorer les performances des applications,
  • Utiliser des caches de code,
  • Desinstaller les modules apache et extensions linux qui ne sont pas utilisées,
  • Selon l’usage (serveur medias) utiliser des serveur comme nGinx,
  • Améliorer la BDD et utiliser un noyau Linux 2.6 en 64 bits pour allouer au mieux la mémoire de mysql (limiter sous les autres noyaux).

Introduction au monde No-SQL (Damien Tournoud)

Pour terminer je suis aller voir la conférence sur les technos dites « No-SQL ». Damien Tournoud nous a montré les avantages de Mongo DB. Base de données non relationnelle ou l’on stocke les objets directement (sans structure relationnelle).  Cet outil va être utilisé dans la nouvelle de version de Drupal qui devrait être sortie d’ici la fin de l’année.

D’autres outils on été présentés ; couchDb, pheantalk, Redis.. L’attention n’était plus trop présente ;)

Voilà pour cette première journée. Je pense avoir fait un résumé assez succinct montrant les principales idées dévoilées. Il est temps d’aller se coucher pour une présentation du framwork Symfony demain à 9h ;)

N’oubliez pas rendez vous sur notre twitter ;)

Supprimer les commandes de test sur Magento

Il arrive souvent, une fois que votre site internet est terminé, vos modules installés et votre design intégré, qu’avant de mettre en ligne, vous souhaitiez disposer d’un site propre, sans commandes, clients, ni aucune autre trace des tests que vous auriez pu effectuer.

En cherchant un peu (et vous avez chercher puisque vous êtes arriver ici ;) ), vous avez pu tomber sur de multiples méthodes permettant de supprimer ces fameuses commandes de test (installation de module, scripts SQL tous différents les uns des autres).

Afin d’éclaircir un peu les choses, voici les scripts qui nous permettent de supprimer toutes traces de nos tests avant une mise en ligne. Attention cependant, depuis la version 1.4.1.0 de Magento, la structure de la base de données à changer, veillez donc à bien choisir le script adapté à votre version de Magento.

Avant toute chose, pensez à faire une sauvegarde de votre base de données. En effet, même si nous avons testé ces scripts, il vaut mieux prévenir que guérir, une sauvegarde de votre base ne vous prendra que 5 minutes et pourrait vous faire gagner des heures si une erreur survient.

Rendez vous donc dans votre interface de gestion de base de données (PhpMyAdmin & Co), selectionnez votre base, faîtes en une sauvegarde (soit par un export SQL, soit par une copie dans une autre base à vous de choisir) puis cliquez sur « SQL ». Choisissez ensuite le script adapté ci-dessous et exécutez le.

Magento 1.4.1.X (testé en 1.4.1.1) :

-- Reset Magento TEST Data
SET FOREIGN_KEY_CHECKS=0;
-- reset dashboard search queries
TRUNCATE `catalogsearch_query`;
ALTER TABLE `catalogsearch_query` AUTO_INCREMENT=1;
-- reset sales order info
TRUNCATE `sales_flat_creditmemo`;
TRUNCATE `sales_flat_creditmemo_comment`;
TRUNCATE `sales_flat_creditmemo_grid`;
TRUNCATE `sales_flat_creditmemo_item`;
TRUNCATE `sales_flat_invoice`;
TRUNCATE `sales_flat_invoice_comment`;
TRUNCATE `sales_flat_invoice_grid`;
TRUNCATE `sales_flat_invoice_item`;
TRUNCATE `sales_flat_order`;
TRUNCATE `sales_flat_order_address`;
TRUNCATE `sales_flat_order_grid`;
TRUNCATE `sales_flat_order_item`;
TRUNCATE `sales_flat_order_payment`;
TRUNCATE `sales_flat_order_status_history`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_flat_quote_address`;
TRUNCATE `sales_flat_quote_address_item`;
TRUNCATE `sales_flat_quote_item`;
TRUNCATE `sales_flat_quote_item_option`;
TRUNCATE `sales_flat_quote_payment`;
TRUNCATE `sales_flat_quote_shipping_rate`;
TRUNCATE `sales_flat_shipment`;
TRUNCATE `sales_flat_shipment_comment`;
TRUNCATE `sales_flat_shipment_grid`;
TRUNCATE `sales_flat_shipment_item`;
TRUNCATE `sales_flat_shipment_track`;
TRUNCATE `sales_invoiced_aggregated`;
TRUNCATE `sales_invoiced_aggregated_order`;
TRUNCATE `sales_order_aggregated_created`;
TRUNCATE `sendfriend_log`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `wishlist`;
TRUNCATE `log_quote`;
TRUNCATE `report_event`;
ALTER TABLE `sales_flat_creditmemo` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_status_history` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_shipping_rate` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_track` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_aggregated_created` AUTO_INCREMENT=1;
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1;
ALTER TABLE `tag` AUTO_INCREMENT=1;
ALTER TABLE `tag_relation` AUTO_INCREMENT=1;
ALTER TABLE `tag_summary` AUTO_INCREMENT=1;
ALTER TABLE `wishlist` AUTO_INCREMENT=1;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;
ALTER TABLE `report_event` AUTO_INCREMENT=1;
SET FOREIGN_KEY_CHECKS=1;

Magento 1.4.0.X (testé) et 1.3.X.X (en théorie, non testé) :

SET FOREIGN_KEY_CHECKS=0;

TRUNCATE `sales_order`;
TRUNCATE `sales_order_datetime`;
TRUNCATE `sales_order_decimal`;
TRUNCATE `sales_order_entity`;
TRUNCATE `sales_order_entity_datetime`;
TRUNCATE `sales_order_entity_decimal`;
TRUNCATE `sales_order_entity_int`;
TRUNCATE `sales_order_entity_text`;
TRUNCATE `sales_order_entity_varchar`;
TRUNCATE `sales_order_int`;
TRUNCATE `sales_order_text`;
TRUNCATE `sales_order_varchar`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_flat_quote_address`;
TRUNCATE `sales_flat_quote_address_item`;
TRUNCATE `sales_flat_quote_item`;
TRUNCATE `sales_flat_quote_item_option`;
TRUNCATE `sales_flat_order_item`;
TRUNCATE `sendfriend_log`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `wishlist`;
TRUNCATE `log_quote`;
TRUNCATE `report_event`;

ALTER TABLE `sales_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_datetime` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_decimal` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_int` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_text` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_varchar` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1;
ALTER TABLE `tag` AUTO_INCREMENT=1;
ALTER TABLE `tag_relation` AUTO_INCREMENT=1;
ALTER TABLE `tag_summary` AUTO_INCREMENT=1;
ALTER TABLE `wishlist` AUTO_INCREMENT=1;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;
ALTER TABLE `report_event` AUTO_INCREMENT=1;

– reset customers
TRUNCATE `customer_address_entity`;
TRUNCATE `customer_address_entity_datetime`;
TRUNCATE `customer_address_entity_decimal`;
TRUNCATE `customer_address_entity_int`;
TRUNCATE `customer_address_entity_text`;
TRUNCATE `customer_address_entity_varchar`;
TRUNCATE `customer_entity`;
TRUNCATE `customer_entity_datetime`;
TRUNCATE `customer_entity_decimal`;
TRUNCATE `customer_entity_int`;
TRUNCATE `customer_entity_text`;
TRUNCATE `customer_entity_varchar`;
TRUNCATE `log_customer`;
TRUNCATE `log_visitor`;
TRUNCATE `log_visitor_info`;

ALTER TABLE `customer_address_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `log_customer` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor_info` AUTO_INCREMENT=1;

– Reset all ID counters
TRUNCATE `eav_entity_store`;
ALTER TABLE `eav_entity_store` AUTO_INCREMENT=1;

SET FOREIGN_KEY_CHECKS=1;

Si vous rencontrez des problèmes pour exécuter ces commandes, supprimez les lignes de commentaires.

En espérant que ce petit tutoriel vous aura aider pour la création de votre site ecommerce.

eZ Publish, un CMS pas comme les autres

Nous nous sommes récemment penchés sur eZ Publish (prononcé « Easy Publish »), un système de gestion de contenu venu tout droit de Norvège. Il est peu connu mais ce n’est pas pour autant qu’il n’est pas utilisé, en effet, les sites du MIT et de la NASA ont été créés avec eZ Publish.

Au premier abord, il s’agit d’un CMS proposant les mêmes fonctionnalités que ses concurrents :

  • création / édition de contenu
  • gestion de plateforme e-commerce
  • gestion d’utilisateurs / rôles / groupes
  • système de workflows pour les publications
  • moteurs de recherche
  • flux RSS

Cependant, il suffit de se pencher un peu plus sur eZ Publish pour se rendre compte qu’il s’agit d’un CMS atypique. En effet, il permet une très forte intéraction depuis le front office sur l’administration du site. Ainsi, vous pouvez, avec ce CMS, ajouter un article ou un nouvel élément sur une page sans avoir besoin de vous connecter au back-office.

De plus, il est possible d’installer des extensions supplémentaires (ce qui est logique pour un CMS me direz-vous). Cependant, toutes les extensions eZ Publish sont développées à partir d’un framework propre au CMS, ce qui assure une compatibilité sans précédent, fini les problèmes de compatibilité entre versions !

Nous devrions bientôt réaliser un site sous eZ Publish donc continuez de suivre notre actualité ;)

Résoudre les problèmes de compatibilité entre Spplus & Magento 1.4

Comme certains d’entre vous se sont déjà rendus compte, le module banquaire de la Caisse d’Epargne Spplus n’est pas encore compatible avec les versions 1.4 de Magento (notamment les 1.4.1.X).

Afin de résoudre les problèmes assez importants causés par cette incompatibilité (notifications qui n’arrivent pas, facturation automatique qui n’envoie pas de mails…), nous avions au départ prévu de faire un développement pour mettre le module Spplus à jour afin qu’il soit compatible avec les versions 1.4 de Magento.

Cependant, nous avons finalement réussi à trouver les manipulations à faire pour résoudre les bugs :

  • tout d’abord, depuis le 12 septembre 2010, les serveurs de notification Spplus ont changé, il faut donc autoriser ces nouveaux serveurs à accéder à votre site. Pour ce faire, ouvrer le fichier /app/code/community/Mage/Spplus/etc/config.xml et trouvez les lignes suivantes (lignes 276/277 environ) :

  • <authorized_ip>
    <value>

    En dessous de ces deux balises se trouve une longue liste d’adresses IP qui correspondent en fait aux adresses IP qui sont autorisées par Spplus à accéder à votre site. Rajoutez les deux nouvelles adresses IP des serveurs de notifications à la suite de cette liste : 91.135.180.215 et 91.135.184.215. Suivant votre version de Spplus, il est possible qu’une de ces deux adresses soit déjà dans la liste.

  • Cependant, même si les serveurs de notifications sont désormais autorisés, la manipulation ne s’arrête pas là! En effet, pour nous ne savons quelle raison, il faut, pour faire fonctionner Spplus avec Magento 1.4, créer le fichier /var/log/spplus.log (vous pouvez aussi tout simplement activer les logs dans Système > Configuration > Avancé > Développeur > Paramètres de log). Une fois ce fichier créé, et comme par magie, Spplus fonctionnera de nouveau avec votre boutique en ligne.

Un second problème rencontré lors de l’utilisation de SPPLUS avec Magento 1.4 est l’erreur « Problème lors du paiement, le champ est incorrect » lors de l’arrivée sur la page de Spplus. Tout d’abord, commencez par vérifier les valeurs de tous les champs en activant le mode Test de Spplus. De notre côté, l’erreur venait du champ « Devise » qui avait pour valeur « Pas trouvé ». Pour résoudre cette erreur, ouvrez le fichier /app/code/community/Mage/Spplus/Model/Method/Spplus.php et modifiez la fonction getDevise() (lignes 368 à 377). Remplacez le ‘return « Pas trouvé » ‘ par ‘return « 978″ ‘ (qui correspond au code de l’Euro) et c’est terminé !

En espérant que ce petit tuto vous aura servi à remettre en route votre boutique e-commerce Magento.