IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

problème de connexion flex/zend_amf sur magento


Sujet :

Flex

  1. #1
    Invité
    Invité(e)
    Par défaut problème de connexion flex/zend_amf sur magento
    bonjour à tous,
    je cherche a développer un petit widget air qui va chercher ses infos dans un site magento.
    Le site est en local et tourne avec un virtual host.

    Quand j'ai fait mes tests avec AMFPHP de base tout fonctionnait.
    Avec zend aucune réponse n'est renvoyée (pas même une erreur).

    Mon fichier service-config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <?xml version="1.0" encoding="UTF-8"?>
    <services-config>
    	<services>
    		<service id="amfphp-flashremoting-service" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage">
    			<destination id="amfphp">
    				<channels>
    					<channel ref="my-amfphp"/>
    				</channels>
    				<properties>
    					<source>*</source>
    				</properties>
    			</destination>
    		</service>
    	</services>
    	<channels>
    		<channel-definition id="my-amfphp" class="mx.messaging.channels.AMFChannel" >
    			<endpoint uri="http://monsite.com/index.php/banramfserver/" class="flex.messaging.endpoints.AMFEndpoint" />
    		</channel-definition>
    	</channels>
    </services-config>
    la classe qui créé le remoteObject :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    public function LoginProxy(data:Object=null)
    		{
    			super(NAME, new SimpleUserVO());
     
    			var cs:ChannelSet = new ChannelSet();
    			var channel:AMFChannel = new AMFChannel("my-amf", "http://bannershop.com/index.php/banramfserver");
    			cs.addChannel(channel);
     
    			this._appProxy = facade.retrieveProxy(ApplicationProxy.NAME) as ApplicationProxy;
    			this._loginService = new RemoteObject();
     
    			this._loginService.destination = "amfphp"
    			this._loginService.source = "Adfab_Amf_Model_UserVO";
    			this._loginService.channelSet = cs;
     
    			this._loginService.checkUser.addEventListener(ResultEvent.RESULT, handleSuccess);
    			this._loginService.checkUser.addEventListener(FaultEvent.FAULT, handleFailure);
    			this._loginService.checkUser.addEventListener(InvokeEvent.INVOKE, handleInvoke);
     
    		}
     
    	public function getUser(vo:SimpleUserVO):void{
    			this._loginService.checkUser(vo);
    			CursorManager.setBusyCursor();
    		}

    la classe PHP qui correspond au UserVo dans flex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    class Adfab_Amf_Model_UserVO extends Mage_Core_Model_Abstract
    {
    	public $_explicitType = "com.banr.model.vo.SimpleUserVO";
    	public $userLogin;
        public $userPassword;
        public $userFirstName;
        public $userLastName;
        public $userID;	
     
     
    	public function checkUser(Array $vo)
    	{
    		if($vo['userLogin'] == "mail@mail.com" && $vo['userPassword'] == "toto"){
    			$this->userLogin = $vo->userLogin;
    			$this->userPassword = $vo->userPassword;
    			return $this;
    		}else{
    			throw new Exception("Toto est un con.");		
    		}
    	}
    et le indexController :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    class Adfab_Amf_IndexController extends Mage_Core_Controller_Front_Action
    {
    	public function indexAction()
    	{
    	    //Create AMF server instance
    	    $server = new Zend_Amf_Server();
     
    	    //setProduction(false): return exception info
    	    $server->setProduction(false);
     
    	    $server->setClass("Adfab_Amf_Model_UserVO");
     
    	    //$server->setClassMap("SomeTypedObjectVO", "MyCompany_MyModule_Model_SomeTypedObjectVO");
     
     
    	    //Run the AMF server
    		$server->handle();
     
    	    //Just in case so that Magento does not pass anything beyond this point
    	    die;
    	}
    }

    Quand j'essaie de me logger l'appli tourne (j'ai bien un busyCursor) mais ne revoie pas de réponse.


    Help...

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    Pour commencer as tu la version debugger du Flash Player ? Il faut que tu l'installes sur ton navigateur préféré pour avoir plus d'erreurs affichées.

  3. #3
    Invité
    Invité(e)
    Par défaut
    il est installé mais je n'ai aucune erreur d'affichées.
    (je ne teste pas dans un navigateur car c'est une appli AIR)
    En revanche si je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var channel:AMFChannel = new AMFChannel("my-amf", "http://monsite.com/index.php/toto/");
    j'ai une erreur

    si je modifie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this._loginService.destination = "amfphp"
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this._loginService.source = "Adfab_Amf_Model_Gateway";
    rien ne se passe....

    Une piste?

    Merci d'avance

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    As tu des logs côté serveur ? Que fais tu lors du traitement du résultat dans handleFailure et handleSuccess ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je ne m'occupe pas du PHP mais tout serait normal de ce côté là

    pour le fonction handle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    private function handleSuccess(e:ResultEvent):void{
    			this._loginService.removeEventListener(FaultEvent.FAULT, handleFailure);
    			this._loginService.removeEventListener(ResultEvent.RESULT, handleSuccess);
    			CursorManager.removeBusyCursor(); 
    			var simpleUserVo:SimpleUserVO = e.result as SimpleUserVO;
    			setData(simpleUserVo);
    			sendNotification(LoginProxy.LOGIN_SUCCEED);
     
    		}
     
    		private function handleFailure(e:FaultEvent):void{
    			CursorManager.removeBusyCursor();
    			this.faultMessage = e.fault.faultString;
    			trace( e.fault.errorID + ' \n '+ e.fault.message+ ' \n '+ e.fault.name + ' \n '+e.fault.faultDetail );
    			sendNotification(LoginProxy.LOGIN_FAIL);
    		}
    mais les traces ne donnent rien, j'ai seulement le busyCursor qui tourne (donc on n'arrive même pas dans ces deux fonctions)....

    j'i mis un listener sur l'invocation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    this._loginService.checkUser.addEventListener(InvokeEvent.INVOKE, handleInvoke);
     
    private function handleInvoke(e:Event):void{
    			trace(e.target + '\n'+e.type+ '\n' + e.eventPhase);
    		}
    dans le trace la phase est 2, alors que pour que l'event se termine il faut arriver à la phase 3 Bubelling...

    Edit :
    j'ai mis une fonction test toute bête qui doit renvoyer hello...
    AS3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this._loginService.test();
    PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function test()
    	{
    		return 'Hello';
    	}
    et ... ca n'a rient donné ! Ca ne doit même pas passer dans la classe PHP Adfab_Amf_Model_Gateway , il y a un problème avant mais ou?

  6. #6
    Invité
    Invité(e)
    Par défaut
    ça avance!!!

    dans le fichier IndexController il y avait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    class Adfab_Amf_IndexController extends Mage_Core_Controller_Front_Action
    {
     
    	public function indexAction()
    	{
    		error_log("index action");
    	    //Create AMF server instance
    	    $server = new Zend_Amf_Server();
     
    	    //setProduction(false): return exception info
    	    $server->setProduction(false);
     
    	    $server->setClass("Adfab_Amf_Model_Gateway");
     
    	    //$server->setClassMap("SomeTypedObjectVO", "MyCompany_MyModule_Model_SomeTypedObjectVO");
    	    $server->setClassMap("com.banr.model.vo.UserVO", "Adfab_Amf_UserVO");
     
    	    //Run the AMF server
    	   $server->handle();
     
    	    //Just in case so that Magento does not pass anything beyond this point
    	    die;
    	}
    }
    aors qu'il fallaut faire un echo du $server->handle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    class Adfab_Amf_IndexController extends Mage_Core_Controller_Front_Action
    {
     
    	public function indexAction()
    	{
    		error_log("index action");
    	    //Create AMF server instance
    	    $server = new Zend_Amf_Server();
     
    	    //setProduction(false): return exception info
    	    $server->setProduction(false);
     
    	    $server->setClass("Adfab_Amf_Model_Gateway");
     
    	    //$server->setClassMap("SomeTypedObjectVO", "MyCompany_MyModule_Model_SomeTypedObjectVO");
    	    $server->setClassMap("com.banr.model.vo.UserVO", "Adfab_Amf_UserVO");
     
    	    //Run the AMF server
    	    $reponse = $server->handle();
    		echo ($reponse);
    	    //Just in case so that Magento does not pass anything beyond this point
    	    die;
    	}
    }
    il avait été supprimé car quand on essayait d'accéder à la page via un navigateur, la navigateur proposait de télécharger un fichier .part
    il s'agissait donc d'un problème PHP

    Maintenant j'ai un problème de mapping entre zend et flex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    faultCode:Client.Error.DeliveryInDoubt faultString:'Channel disconnected' faultDetail:'Channel disconnected before an acknowledgement was received' 
     Error 
     Channel disconnected before an acknowledgement was received
    Quelqu'un a-t-il eu le même souci avec zend et magento?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Ca marche!!!
    Je poste tout le code pour ceux qui suivont :
    Côté Magento :
    config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    <?xml version="1.0"?>
    <config>
        <modules>
            <Companie_Module>
                <version>0.1.0</version>
            </Companie_Module>
        </modules>
        <frontend>
            <routers>
                <amf>
                    <use>standard</use>
                    <args>
    	                <module>Companie_Module</module>
    	                <frontName>myserver</frontName>
                	</args>
                </amf>
            </routers>
        </frontend>
        <global>
    	    <models>
    	       <amf>
    	           <class>Companie_Module_Model_Gateway</class>
    			   <class>Companie_Module_Model_UserVO</class>
    	       </amf>
    	     </models>
    	</global>
    </config>
    Attention :
    Companie_Module = arborescence de répertoires dans magento:
    local/Companie/Module/Model/gateway.php
    local/Companie/Module/Model/UserVo.php

    IndexController.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    <?php
     
    class Companie_Module_IndexController extends Mage_Core_Controller_Front_Action
    {
     
            public function indexAction()
            {
     
                //Create AMF server instance
                $server = new Zend_Amf_Server();
             
                //setProduction(false): return exception info
                $server->setProduction(false);
             
                $server->setClass("Companie_Module_Model_Gateway");
             
     
                $server->setClassMap("com.app.model.vo.UserVO", "Companie_Module_Model_UserVO");
             
                //Run the AMF server
                $reponse = $server->handle();
                echo ($reponse);
                //Just in case so that Magento does not pass anything beyond this point
                die;
            }
    }
    ?>
    Côté flex :
    UserVO.as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    package com.banr.model.vo
    {
     
     
    	[RemoteClass(alias="Companie_Module_Model_UserVO")]
    	[Bindable]
     
    	public dynamic class UserVO
    	{
    		public var userLogin:String;
    		public var userPassword:String;
    		public var userFirstName:String;
    		public var userLastName:String;
    		public var userID:String;
     
    		public function UserVO()
    		{
     
    		}
     
     
     
    	}
    }
    loginProxy.as (qui déclenche et gère la connexion au service distant avec une architecture PureMVC) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
     
    package com.banr.model
    {
    	import com.banr.model.vo.SimpleUserVO;
    	import com.banr.model.vo.UserVO;
     
    	import flash.events.Event;
     
    	import mx.managers.CursorManager;
    	import mx.messaging.ChannelSet;
    	import mx.rpc.events.FaultEvent;
    	import mx.rpc.events.InvokeEvent;
    	import mx.rpc.events.ResultEvent;
    	import mx.rpc.remoting.RemoteObject;
     
    	import org.puremvc.as3.interfaces.IProxy;
    	import org.puremvc.as3.patterns.proxy.Proxy;
     
    	public class LoginProxy extends Proxy implements IProxy
    	{
    		public static const NAME:String = "loginProxy";
    		public static const LOGIN_SUCCEED:String = "loginSucceed";
    		public static const LOGIN_FAIL:String = "loginFail";
    		private var _loginService: RemoteObject;
    		private var _appProxy:ApplicationProxy;
     
    		public var faultMessage:String;
     
    		/**
    		* créé un remote object linké à un service AMFPHP 
    		**/
    		public function LoginProxy(data:Object=null)
    		{
    			super(NAME, new SimpleUserVO());
     
    			var cs:ChannelSet = new ChannelSet();
     
     
    			this._appProxy = facade.retrieveProxy(ApplicationProxy.NAME) as ApplicationProxy;
    			this._loginService = new RemoteObject();
    			this._loginService.destination = "zend";
    			this._loginService.source = "Adfab_Amf_Model_Gateway";
     
    			this._loginService.checkUser.addEventListener(ResultEvent.RESULT, handleSuccess);
    			this._loginService.checkUser.addEventListener(FaultEvent.FAULT, handleFailure);
    			this._loginService.checkUser.addEventListener(InvokeEvent.INVOKE, handleInvoke);
     
    		}
     
    		private function handleInvoke(e:Event):void{
    			trace(e.target + '\n'+e.type+ '\n' + e.eventPhase);
    		}
     
    		/**
    		 *  Appel au service PHP qui vérifie le user pour la connexion
    		 **/
    		public function getUser(vo:UserVO):void{
     
    			var arr:Array = new Array({userLogin:vo.userLogin, userPassword:vo.userPassword});
    			this._loginService.checkUser(arr);
    			CursorManager.setBusyCursor();
    		}loginProxy
     
    		private function handleSuccess(e:ResultEvent):void{
    			this._loginService.removeEventListener(FaultEvent.FAULT, handleFailure);
    			this._loginService.removeEventListener(ResultEvent.RESULT, handleSuccess);
    			CursorManager.removeBusyCursor(); 
    			var simpleUserVo:SimpleUserVO = e.result as SimpleUserVO;
    			setData(simpleUserVo);
    			sendNotification(LoginProxy.LOGIN_SUCCEED);
    		}
     
    		private function handleFailure(e:FaultEvent):void{
    			CursorManager.removeBusyCursor();
    			this.faultMessage = e.fault.faultString;
    			trace( e.fault.errorID + ' \n '+ e.fault.message+ ' \n '+ e.fault.name + ' \n '+e.fault.faultDetail );
    			sendNotification(LoginProxy.LOGIN_FAIL);
    		}
     
    		/**
    		 * Retourne une référence du SimpleUserVO
    		 **/
    		public function get simpleUserVo():SimpleUserVO{
    			return data as SimpleUserVO;
    		}
     
    	}
    }
    service-confing.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <?xml version="1.0" encoding="UTF-8"?>
    <services-config>
    	<services>
    		<service id="zend-service" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage">
    			<destination id="zend">
    				<channels>
    					<channel ref="zend-endpoint"/>
    				</channels>
    				<properties>
    					<source>*</source>
    				</properties>
    			</destination>
    		</service>
    	</services>
    	<channels>
    		<channel-definition id="zend-endpoint" class="mx.messaging.channels.AMFChannel" >
    			<endpoint uri="http://monmagento.com/index.php/myserver" class="flex.messaging.endpoints.AMFEndpoint" />
    		</channel-definition>
    	</channels>
    </services-config>
    Voila il faudrait maintenant passer un objet custom dans la gateway.php

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    Merci de partager avec nous ta solution
    Et n'oublie pas le tag

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de connexion avec phpmyadmin sur serveur dédié.
    Par Xenonmax dans le forum Administration
    Réponses: 1
    Dernier message: 08/11/2011, 16h06
  2. Problème de connexion wifi (upload?) sur Mac
    Par martin.landmeters dans le forum Réseau
    Réponses: 0
    Dernier message: 10/10/2011, 14h54
  3. Problème de connexion en TSE sur un poste XP SP2
    Par magboom dans le forum Windows XP
    Réponses: 5
    Dernier message: 31/08/2010, 19h04
  4. Problème de connexion avec filezilla sur infomaniak
    Par fomazou dans le forum Autres hébergeurs
    Réponses: 3
    Dernier message: 21/01/2010, 15h20
  5. Problème de connexion d'eclipse sur internet
    Par khokho dans le forum Eclipse
    Réponses: 6
    Dernier message: 13/09/2007, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo