Vous êtes ici Forums
  |  Connexion
 Forums
HomeHomeForums DNNForums DNNDéveloppementDéveloppementConception dévellopement module dnnConception dévellopement module dnn
Précédente
 
Suivante
Nouveau message
02/03/2007 13:55
 
Bonjour!

Je débute dans le développement de modules pour dnn et j'ai quelques petites questions de "conception" à poser.
Pour commencer j'ai suivi ce tutoriel (http://www.codeproject.com/aspnet/LCTDNNModDev.asp) et j'arrive à créer un module en C# à l'insérer dans une page tout cela sans problème.
Je dois créer un module de boutique en ligne (que j'ai déjà développé en C#). Le problème que je rencontre est que je ne sais pas comment gérer les "pages" qu'il y avait dans ma boutique avec un module dnn. En effet, sur une première page j'affiche les articles et lorsque l'utilisateur désire payer il est redirigé sur une autre page qui lui permet de renseigner ses données personnelles. Enfin il peut payer à l'aide d'une platforme de paiement externe.

J'ai donc deux questions:
  • Est t'il possible de naviguer entre des "pages" dans un module dnn et surtout comment?
  • Pour le paiement je dois envoyer les données d'un formulaire avec POST et rediriger l'utilisateur vers la plateforme de paiement. Techniquement en C# je n'ai trouvé aucune solution pour effectuer cette opération, est ce que quelqu'un aurait une idée de comment réaliser cela?
Merci d'avance pour vos réponses

 
Nouveau message
02/03/2007 19:06
 

Bonjour,

Je viens de lire l'article auquel tu fais référence. Il est très bien fait, seulement il n'explique pas les différentes possibilités de développement offertes par dnn. En premier lieu, puisque tu lis l'anglais je te conseille d'aller sur dnn us et de faire une recherche avec le mot clé "wap" dans les blogs (pas les forums). Tu vas y trouver un article de Michael Washington (dont il est fait référence dans l'article que tu cite) membre du core team de dnn. Michael est plutôt pour cette façon de développer qui est la plus simple pour un débutant. Ce qui est vrai ! En revanche, ce qui n'est pas expliqué dans ton article (mais qui l'est dans les blogs) c'est qu'avec ce modèle de développement tu dois laisser les sources de ton module dans le répertoire App_Source. C'est le principe de compilation dynamique introduit avec VS2005 pour le développement de sites web. Là, les problèmes commencent s'il s'agit d'un module commercial ! Il y a aussi une possibilité de précompiler tes pages, mais alors tu auras autant de dll que de pages (ascx, aspx, etc.). De plus, le nommage des dll n'est pas contrôlé par le développeur. Ainsi pour une page MonControle.asx, tu auras une dll nommé MonControle_ascx_13644.dll (ou quelque chose du même genre). En soit ce n'est pas trop grave, mais imagine si tu as plusieurs dizaines de pages ! Les deux seuls véritables avantages de ce modèle de développement, à mon avis, c'est l'accès au mode debug "Edit & Continue" et le développement avec VS Web Express (gratuit chez MS).

Pour ton projet de boutique, il me vient une question. As-tu lu la page d'accueil du site, les pages concernant le projet WWSotre et les posts des deux forums dédiés à WWStore ?  Je demande cela car la communauté fr vient de reprendre le développement de WWStore qui est justement une boutique en ligne. Toute prête entièrement traduite et testé avec PayPal, et bien sûr gratuite ! Pour le moment, j'ai juste adapté et fini de traduire la boutique pour quelle fonctionne correctement avec n'importe quel pack de langue. David a validé, testé et corrigé le tout. J'ai justement posté les sources hier, c'est du C# utilisant le modèle WAP (nécessite VS2005 complet et le SP1). Nous sommes aussi plusieurs à être prêts à former un team de développement pour faire évoluer ce projet. En particulier sur la gestion des taxes et les passerelles de paiement vers les banques françaises. Nous devrions décider de l'avenir de tout ceci à la prochaine réunion pro du 16 mars. Peut-être aurais-tu intérêt à rejoindre le team ? Dans tous les cas, je t'invite à télécharger le projet et le tester. Il répond peut-être déjà à tes attentes.

Maintenant concernant tes deux questions :

  1. Tu peux naviguer entre les pages. Le principe de base est de passer des arguments dans l'url puis de faire un post sur une page. La page "réceptrice" doit ensuite relire les paramètres et traiter les différents cas dans l'événement Load. Après c'est du standard .net (redirection avec paramètres). Il faut voir, je n'ai pas de réponse toute faite. Est-ce plusieurs modules sur plusieurs pages ? Un seul module qui charge dynamiquement des contrôles, etc. ?
  2. Une deuxième bonne raison pour télécharger WWStore ! Il utilise exactement ce que tu veux faire dans le provider de paiement PayPal. L'idée générale est d'initialiser une requête sur le site de paiement en utilisant un HttpHandler, construire les champs du formulaire, puis poster le tout sur le site.

Voilà pour un début. J'ai aussi une dernière question, quelle est la passerelle de paiement visée par ta boutique ?

Gilles

 
Nouveau message
03/03/2007 22:25
 

Petite précision pour la navigation:

Les fonctions NavigateUrl(...) du module Globals te permettent de naviguer au sein du portail en fournissant nottament le numéro de page (tabId), et les fonctions EditUrl(...) héritées de PortalModuleBase sont plutot destinées à naviguer au sein des formulaires de ton module sur la même page, en précisant la clé du formulaire cible. Il existe enfin une API permettant la communication inter-module au sein d'une même page, mais elle est est peu utilisée car l'emploi de paramêtres http est généralement suffisant.

Pour ce qui est de la plateforme de paiement, l'implémentation native des souscriptions PayPal payantes de DNN est également un bon exemple: un controle se charge de construire et soumettre la requête en précisant l'url de retour. Le controle de retour se charge d'effectuer une requête aller retour pour authentifier l'émetteur (PayPal) et met les rôles a jour en conséquence.


Jesse
Société de conseil et de service en 
informatique et systèmes d'information
 
Nouveau message
04/03/2007 21:48
 

Bonsoir,

ça peut intéresser surement quelque uns d'entre vous au cas où vous n'auriez pas vu passer ce post :

Des nouveaux templates Codesmith pour DNN 4 avec les support de DAL+

http://www.dotnetnuke.com/Community/ForumsDotNetNuke/tabid/795/forumid/-1/threadid/112140/scope/posts/Default.aspx

Roland


Roland
 
Nouveau message
15/03/2007 11:59
 
Bonjour,

Voilà j'ai recommencé à travailler sur ce projet et j'ai (un peu) avancé.

Merci pour vos réponses, cela m'a bien aidé. J'ai encore cependant quelques petites questions :

  • J'utilise la méthode EditUrl(Key) pour naviguer entre les différents userControl de mon module. Cela fonctionne mais  lorsque j'affiche un control à partir d'un autre la page n'affiche plus que mon module et plus les autres qui se trouvent sur la page. Avez-vous une idée de comment résoudre ce problème?
  • Pour l'envoi du formulaire par contre je n'ai toujours pas trouvé de solution. Pourriez-vous m'expliquer un peu plus comment je pourrais utiliser HttpHandler pour effectuer cette opération? 
  • De plus je dois également fournir plusieurs url de retour. Est-ce que cela peut également s'effectuer avec cette méthode?
Merci d'or et déjà pour votre aide

Mselle
 
Nouveau message
15/03/2007 16:57
 

Bonjour,

Pour la méthode EditURL, c'est fait pour ! En général, les concepteurs de modules multipages utilisent un placeholder dans lequel on charge le second contrôle.

Je t'invite à nouveau à télécharger les sources du projet WWStore ! Tu y trouveras non seulement des exemples de chargement de contrôles, le module StoreFront compose toutes ses pages dynamiquement avec cette technique. Mais aussi le code du provider de paiement PayPal qui fait exactement ce que tu veux faire avec un HttpHandler. Je t'aurais bien fait un copier-coller, mais je n'ai pas mon pc de dev sous la main.

Pour les url de retour, il faut voir comment ta passerelle attend les paramètres. Si tu me disais de quelle passerelle il s'agit, je pourrais peut-être t'aider plus précisément ! En général, les passerelles lisent des champs aux noms pré-établis (return-url, success-url, etc.) qui sont censés contenir les url. L'idée générale est d'initialiser une requête avec le serveur via un HttpHandler, puis le construire un formulaire en mémoire avec les champs requis et les bonnes valeurs évidemment, et finalement de poster le tout. C'est le cas avec PayPal. En revanche, si tu utilise SIPS d'Atos Origin, il faut faire appel à un objet COM au préalable. Bref, c'est similaire mais le principe reste le même.

Gilles

 
Nouveau message
17/04/2007 10:04
 
Bonjour,

J'ai télécharger le module WWStore et je l'ai installé. Ce module est effectivement très intéressant même s'il ne correspond pas à ce que je désire faire (il possède beaucoup de fonctionnalités dont je n'ai pas besoin).

J'ai également téléchargé les sources de ce module afin d'"étudier" un peu le code. Malheureusement je ne trouve pas ce que je recherche!
Pour les "placeHolder" j'ai compris le principe maintenant il faudra que je teste.

Pour la passerelle de paiement c'est une passerelle suisse qui fonctionne comme paypal à ce que j'ai compris. Par contre je me pose plusieurs questions concernant les HttpHandler :
  1.  Je n'ai pas trouvé dans le code source de WWStore l'appel à la passerelle PayPal, est-ce que vous pouvez me dire dans quel fichier cela ce trouve t'il?
  2. Il me semble que les "httpHandler" permettent d'envoyer une requête et de recevoir une réponse mais comme fait t'on pour être redirigé sur la page de paiement avec cette méthode?
J'espère que vous pourrez m'aider à y voir plus clair!

Aurélie

 
Nouveau message
18/04/2007 11:05
 

Bonjour Aurélie,

Pour WWStore, tu n'es pas oubligée d'utiliser toutes les fonctions !

As-tu l'adresse d'un site pour les programmeur concernant la passerelle ? Le cas échéant, je pourrais aller y jeter un oeil. Cela m'interresse aussi pour le projet WWStore, de voir ce qui est utilisé en Europe. L'idéal à terme étant d'avoir un provider par pays (le plus utilisé).

Pour les HttpHandler, le principe est que tu créé une requête. C'est celle-ci qui va déterminer le comportement. Par exemple, si tu créé une requête qui "émule" un formulaire. Lorsque tu vas passer réellement ta requête, l'utilisateur sera directement redirigé sur la page. Là, je dois partir en rdv. Mais je te chercherais ce soir la page exacte dans WWStore pour que tu ais un exemple. Le début de la procédure devrait se trouver dans Checkout.ascx.cs (de mémoire), mais plusieurs fichiers sont impliqués du fait de l'architecture de ce module.

Gilles

 
Nouveau message
18/04/2007 16:37
 

Re-Bonjour,

Alors, je viens de regarder dans le code. Je vais essayer te résumer les grandes lignes.

  • Dans Checkout.ascx.cs tu as une procédure loadPaymentControl(). Elle charge dynamiquement le contrôle correspondant à l'opérateur de paiement sélectionné dans les paramètres de la boutique. Dans le cas de PayPal, il s'agit de PayPalPayment.ascx (dans le projet DotNetNuke.Modules.WWStore.Cart.PayPalProvider).
  • Il faut bien comprendre qu'à partir de là, ce contrôle a sa propre "vie" dans la page. Dans le code (PayPalPayment.ascx.cs) la procédure ConfirmOrder() est appelée lorsque la commande est confirmée. Elle fait certaines initialisations dans l'interface et appelle la procédure SetupPayPalFields()
  • Cette dernière insère des champs cachés et les valeurs correspondantes dans la page qui est en fait un formulaire. D'où l'utilisation de champs. Ce sont les valeurs que l'on doit passer à PayPal.
  • A un moment donné (trop long à détailler), la page va être rechargée avec en paramètre "NOTIFY" en QueryString, regarde dans l'évènement Load de la page.
  • L'événement va alors appeller la procédure VerifyPayment(). C'est là que se trouve le code de l'appel via un HttpHandler. Elle commence par créer un objet PayPalIPNParameters(Request.Form) pour récupérer les paramètres qui se trouvent dans les champs cachés. Puis la requête est créée et initialisée comme suit :
    • request.Method = "POST"; // Il s'agit d'une méthode post vers l'url
    • request.ContentLength = ipn.PostString.Length; // La longueur totale des paramètres
    • request.ContentType = "application/x-www-form-urlencoded"; // On "post" un formulaire créé de toutes pièces dans le code et envoyé avec le HttpHandler

Voilà en gros pour le déroulement. tu peux placer des points d'arrêt pour mieux suivre pas à pas le dialgue. Mais l'idée est là !

Gilles

 
Nouveau message
18/04/2007 16:55
 
Bonjour!

Merci beaucoup tout d'abord pour votre aide!
Je vais dès à présent essayer de comprendre et d'adapter ce code à mon cas cela va beaucoup m'aider de connaître les mécanismes à utiliser pour réaliser ce que je désire!
Pour la plateforme de paiement j'utilise YellowPay de la Poste (http://www.postfinance.ch/pf/content/fr/seg/biz/pay/debit/yp.na_biz.html).

Je trouve le module WWStore très intéressant et bien que je ne sois pas obligée d'utiliser toutes les fonctionnalités je vais continuer sur le développement de mon petit module. Maintenant il ne reste plus que cette histoire de paiement mais le reste du module est quasiment terminé!

Merci encore

Aurélie
 
Précédente
 
Suivante
HomeHomeForums DNNForums DNNDéveloppementDéveloppementConception dévellopement module dnnConception dévellopement module dnn