Documentation RBS Change : Les produits à télécharger (virtualproduct)

  • 47188.1

    24/11/2011 18:56


    guiom
    Rang : Expert
    Bonsoir,

    Est-il possible de limiter le nombre de téléchargement des virtualproduct ?

    Merci
  • 47188.2 en réponse à 47188.1 écrit par guiom

    25/11/2011 10:46


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Oui c'est possible dans l'absolu via un peu de code mais tout ce qu'on peut vérifier de notre côté c'est qu'on a bien envoyé les données, pas que le téléchargement s'est bien passé côté client : potentiellement suite à des problèmes divers il pourrait épuiser tous ses téléchargements sans avoir une seule fois eu le fichier complet.

    Du coup a priori je me dis qu'une une limite de temps dans laquelle le téléchargement est possible me semblerait plus adapté. Cela peut se faire en surchargeant la méthode hasMediaAccess sur catalog_VirtualproductService qui par défaut retourne toujours true et se contente de loguer le nombre de fois où l'accès a été testé. Elle reçoit en paramètre l'id de l'expédition qui lui offre le droit de télécharger ce fichier, donc il est possible de tester un délai par rapport à la date de création de cette expédition.



    Par contre ça m'a fait penser que si vous utilisez les produits téléchargeables, il y a quelque chose à rajouter dans le project.xml pour ajouter la stratégie de sécurisation des médias correspondante (elle n'est pas ajoutée par défaut parce que comme les stratégies appliquées valent pour l'ensemble des médias sécurisés du site et pas seulement ceux liés à un produit). Donc dans la section modules/media de votre project.xml, ajoutez (suivi d'un compile-config) :

    	<secureMediaStrategyClass>
    		<entry name="virtualproduct">catalog_VirtualProductSecuremediaStrategy</entry>
    	</secureMediaStrategyClass>
  • 47188.3

    25/11/2011 11:57


    guiom
    Rang : Expert
    Merci, je vais essayer de mettre ça en place.

    Un autre question : lorsque l'on fait un commande, il y a un délais entre le moment où la commande est payé (via carde bleu par exemple) et le moment où elle est expédié.
    Dans notre cas, nous souhaiterions que ça soit instantané pour que le client n'attende pas un temps non déterminé son téléchargement.

    Comment accélérer ce processus ?
  • 47188.4 en réponse à 47188.3 écrit par guiom

    25/11/2011 13:51


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    La création de l'expédition ne se fait pas immédiatement pour une raison simple : faire le moins de choses possible dans la requête qui fait la validation du paiement pour réduire les risques d'avoir un paiement validé par la banque mais pas pris en compte par Change à cause d'une erreur/exception/etc dans le traitement qui suit.

    Du coup la création des expéditions est déportée dans la tâche planifiée order_BackgroundOrderCheck (initialisée là : modules/order/setup/initData.php) qui tourne toutes les 30 minutes (cf order_BackgroundOrderCheck dernière ligne du execute). Pour accélérer les choses vous pouvez simplement modifier ce délai... Par exemple en surchargeant sa méthode execute pour la re-planifier toutes les minutes au lieu de toutes les 30 minutes.

    Édité par Gaël Port 25/11/2011 13:51

  • 47188.5 en réponse à 47188.4 écrit par Gaël Port

    25/11/2011 16:30


    guiom
    Rang : Expert
    J'ai surcharger les méthode execute grâce à l'oap. Mais du coup je me demande qui lance les tâches ?

    Faut-il mettre en place un cron pour appeler une page spécifique ?
  • 47188.6 en réponse à 47188.5 écrit par guiom

    25/11/2011 16:40


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Les tâches planifiées fonctionnent de la manière suivante :

    On déclare un ensemble de tâche dans le module Tâches avec leurs fréquences ou dates d'exécution. On peut y voir leur date de dernière exécution, la date planifiée de leur prochaine exécution et un certain nombre d'informations, notamment un log d'erreur dans l'onglet historique.

    Les tâches sont lancées par un fichier unique changecron.php placé à la racine web du projet (http://<votreSite>/changecron.php) et qui se rappelle lui-même périodiquement en tâche de fond. Le processus est déclenché lors de la connexion en backoffice. Au besoin il peut aussi être lancé manuellement en l'appelant via le navigateur (c'est pratique notamment en développement pour ne pas avoir à attendre le prochain passage).

    En environnement de production il est recommandé de mettre en place un cron dessus pour être tranquille car il ne tiendra pas éternellement sans connexion backoffice (et peut potentiellement mourir pendant les mises à jours puisqu'à ce moment-là le code n'est pas complètement fonctionnel).
  • 47188.7 en réponse à 47188.2 écrit par Gaël Port

    28/11/2011 16:45


    guiom
    Rang : Expert
    Bonjour,

    Je suis entrain de mettre en œuvre la limitation du téléchargement à 1 exemplaire. Même si cette méthode n'est pas fiable, nous sommes obligé légalement à faire cette limitation. nous gèrerons au cas par cas s'il y a des problèmes (au moins au début).

    Je voudrais enregistrer la date de téléchargement afin d'indiquer au client qu'il à déjà réaliser sont téléchargement. Est-ce que je peux utiliser la méthode SetMeta (de modules_order/expeditionline) afin d'enregistrer cette donnée ? Y-a-t-il des limitations/règles a respecter pour utiliser cette propriété ?

    Merci
  • 47188.8 en réponse à 47188.7 écrit par guiom

    28/11/2011 16:53


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Effectivement, vous pouvez utiliser setMeta. Les metas sont stockées en base sous la forme d'un tableau sérialisé. D'où leurs principales limitations :
    - elles ne sont pas requêtables (dans le sens où vous ne pourrez pas faire une restriction sur une meta dans vos requêtes)
    - elles ne doivent contenir que des données scalaires. Pas d'objets, donc, en particulier surtout pas des instances de documents. Par contre, vous pouvez y mettre des sous-tableaux.

    Dans le cas où vous n'avez modifié que des metas, vous pouvez passer par la méthode saveMeta plutôt que save. Elle est plus légère puisqu'elle ne passe pas par les preXxx et postXxx.

    EDIT : personnellement en général pour éviter les risques de collisions de noms, je préfixe mes noms de meta par "m.<nom du module qui utilise la meta>." mais ce n'est pas une obligation.

    Édité par Gaël Port 28/11/2011 16:56

 
Merci de prendre connaissance et de respecter les règles des forums.
 
Connexion
  1. Cochez cette case pour être reconnecté automatiquement.

 
Ils utilisent RBS Change
 
554 membres
Aucun membre connecté