développement web
Magento facturer une commande annulée
16/09/11
Il arrive parfois suite à des des problèmes de liaison avec la banque ou à une erreur du commerçant d’annuler une commande avant même de l’avoir facturer.
Le problème est qu’il est impossible de facturer la commande une fois celle-ci annulée. On peut la renouveller, mais si le client à payer par carte bancaire, il ne sera pas possible de choisir ce même mode de paiement. Voici un bref tutorial pour pouvoir facturer une commande annulée dans Magento.
Attention, testé sous V 1.4.1.1 (pour les autres versions le raisonnement est sans doute le même)
Premièrement, récupéré l’ID de la commande. Pour cela allez dans le backoffice, sur la commande en question et vérifier dans l’url de la page l’id ex :
http://www.monsite.com/index.php/admin/sales_order/view/order_id/6646/key/9f8445f7539e569d1a587c6944a27ebf/
L’id est représenté en gras.
Une fois l’id en main direction la base de données.
Trois tables sont à modifier :
- sales_flat_order
- sales_flat_order_grid
- sales_flat_order_item
Dans la table sales_flat_order vérifier les champs suivants pour l’id de la commande :
- state : le modifier en processing
- status : le modifier en processing
- %_canceled : Tous les champs en canceled doivent être passés à Null
Dans la table sales_flat_order_grid vérifier les champs suivants pour l’id de la commande :
- status : le modifier en processing
Dans la table sales_flat_order_item vérifier les champs suivants pour l’id de la commande:
- qty_canceled : le passer à Null
Site Internet avec Django
6/01/11
Après Magento, eZPublish, Symfony nous voilà lancé dans l’aventure Django CMS. Ce logiciel s’appuie sur le framework Django écrit en python .
Comment installer le framework Django ?
L’installation du Framework est rapide. Il faut au préalable avoir installé un version de python ( déja installée sous Ubuntu ).
Commençons par télécharger et installer Django
#Après téléchargement ici http://www.djangoproject.com/download/1.2.4/tarball/ tar xzvf Django-1.2.4.tar.gz cd Django-1.2.4 sudo python setup.py install
L’installation se fait dans /usr/local/lib/python2.6/dist-package/
Si vous n’etes pas sur que l’installation s’est bien déroulée, lancer python dans un terminal
python # puis tapez >>> import django >>> print django.get_version()
Si aucun message d’erreur s’affiche, la version de Django installée devrait etre affichée.
Si vous souhaitez installer le mod_python pour apache ( plus d’informations : http://www.howtoforge.com/embedding-python-in-apache2-with-mod_python-debian-etch)
apt-get install libapache2-mod-python
Pour avoir des interactions avec la base de données vous aurez besoin du paquet python-mysqldb.
Installation de Django CMS
Maintenant que le framework est installé, il nous faut télécharger les plugins pour le module CMS
Avant celà, on va créér le dossier qui hébergera le site
#Se placer là où vous souhaiter installer le site django-admin.py startproject MonPremierDjangoCms
Il faut maintenant télécharger le module CMS :http://www.django-cms.org/en/downloads/
Une fois téléchargé et décompressé, placez vous dans le dossier puis
sudo python setup.py install
Toutes les dépendances seront installées. (mptt, south, publisher, etc…)
Modifiez ensuite les fichiers de configuration (settings.py), comme dans cet article, pour lui indiquer quels plugins le projet doit utiliser.
Pour tester que tout fonctionne, lancer le serveur
#Lancement du serveur après s’etre placé dans le nouveau dossier python manage.py runserver
Puis rendez-vous sur
http://localhost:8000
Si vous souhaitez démarer le serveur sur un autre port (ex : 8500 )
python manage.py runserver 8500
Liens pour Django
Configuration de Django CMS
6/01/11
Après avoir installé le framework Django et téléchargé les plugins adéquats, il nous faut configurer les fichiers du projet settings.py et urls.py. Si vous ne modifiez par ces fichiers, rien ne fonctionnera. Pensez à bien installer toutes les dépendances en utilisant easy_install ou pip. http://django-cms.readthedocs.org/tutorial.html#templates
Le fichier settings.py
C’est le fichier principal de configuration du projet. Il permet à Django de connaitre les paramètres de connexion, de connaitre les plugins installés,etc…
Configuration de la connexion à la base de données ( PhpMyAdmin – MySql )
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'djangocms', # Or path to database file if using sqlite3.
'USER': 'utilisateuradmin', # Not used with sqlite3.
'PASSWORD': 'motdepasseAdmin', # Not used with sqlite3.
'HOST': 'localhost', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
Ajout de nouvelle application
Par exemple pour le module CMS, vous pouvez ajouter 'cms','mptt'
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', .... # Décommentez bien cette ligne pour avoir l'interface d'adminstration 'django.contrib.admin', ... # Puis ajouter vos applications 'cms','mptt' )
MIDDLEWARE_CLASSES = ( 'django.middleware.cache.UpdateCacheMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.doc.XViewMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'cms.middleware.page.CurrentPageMiddleware', 'cms.middleware.user.CurrentUserMiddleware', 'cms.middleware.toolbar.ToolbarMiddleware', 'cms.middleware.media.PlaceholderMediaMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware',)
Le fichier urls.py
Je vous suggère de commencer avec le urls.py suivant, auquel on a ajouté le plugin cms
from django.conf.urls.defaults import *
from django.contrib import admin
from django.conf import settings
admin.autodiscover()
urlpatterns = patterns('',
(r'^admin/', include(admin.site.urls)),
url(r'^', include('cms.urls')),
)
Envoyer votre configuration en base de données
Pour que votre projet soit utilisable, il faut insérer ces modèles en base de données. Pour celà :
python manage.py syncdb
Si vous obtenez l’erreur Error loading MySQLdb module
–> Installer mysqldb pour python.
Lancement de votre serveur
#Dans le dossier où est installé votre projet python manage.py runserver
Pour accéder à l’administration
http://localhost:8000
Liens utiles
http://django-cms.readthedocs.org/tutorial.html
http://fantomas.willbreak.it/blog/2009/03/10/un-cms-en-django-la-suite/
http://jagdeepmalhi.blogspot.com/2010/10/django-cms-installation-error.html
Import groupé d’abonnés à la newsletter
2/12/10
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
24/11/10
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
12/11/10
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
10/11/10
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
22/10/10
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
7/10/10
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
27/09/10
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) :
- 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.
<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.
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.

Commentaires récents