Discussion: nusoap client WSDL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    septembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2017
    Messages : 2
    Points : 1
    Points
    1

    Par défaut nusoap client WSDL

    Bonjour je me sers de nusoap_client, avec un fichier WSDL pour preparer une requete XML SOAP, mais je narrive pas a construire correctement la requete depuis le fichier WSDL.

    Une partie de mon code en php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $param_Request = array( "details" => array( "DetailArray" => array( "merchant_id" => array("name" => "merchant_id", "value" => 1234567 ) )) , "billerRef" => "RB_C1_RECO", "payinstrRef" => "RB_C1_RECO" );
     /* create the proxy object */
    $proxy = $client->getProxy();
    $result = $proxy->RECOstep1($param_Request);
    Un extrait de mon WSDL

    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
     
    <xsd:element name="Request">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="billerRef" minOccurs="1" maxOccurs="1">
    <xsd:simpleType>
    <xsd:restriction base="xsd:string">
    <xsd:enumeration value="RB_C1_RECO"/>
    </xsd:restriction>
    </xsd:simpleType>
    </xsd:element>
    <xsd:element name="payinstrRef" minOccurs="1" maxOccurs="1">
    <xsd:simpleType>
    <xsd:restriction base="xsd:string">
    <xsd:enumeration value="RB_C1_RECO"/>
    </xsd:restriction>
    </xsd:simpleType>
    </xsd:element>
    <xsd:element name="details" type="typens:DetailArray" minOccurs="1" maxOccurs="1"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    <xsd:element name="details" type="typens:DetailArray" maxOccurs="1" minOccurs="1"/>
    <xsd:element name="action" maxOccurs="1" minOccurs="1">
    <xsd:simpleType>
    <xsd:restriction base="xsd:int">
    <xsd:minInclusive value="1"/>
    <xsd:maxInclusive value="1"/>
    <xsd:enumeration value="4"/>
    </xsd:restriction>
    </xsd:simpleType>
    </xsd:element>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    <xsd:complexType name="NeedDetail">
    <xsd:sequence>
    <xsd:element name="name" type="xsd:string"/>
    <xsd:element name="screen" type="xsd:string"/>
    <xsd:element name="inputType" type="xsd:int"/>
    </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="DetailArray">
    <xsd:sequence>
    <xsd:element name="item" type="typens:merchant_id" minOccurs="1" maxOccurs="1"/>
    </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="merchant_id">
    <xsd:sequence>
    <xsd:element name="name" minOccurs="1" maxOccurs="1">
    <xsd:simpleType>
    <xsd:restriction base="xsd:string">
    <xsd:enumeration value="merchant_id"/>
    </xsd:restriction>
    </xsd:simpleType>
    </xsd:element>
    <xsd:element name="value" minOccurs="1" maxOccurs="1">
    <xsd:simpleType>
    <xsd:restriction base="xsd:int">
    <xsd:minInclusive value="7"/>
    <xsd:maxInclusive value="15"/>
    </xsd:restriction>
    </xsd:simpleType>
    </xsd:element>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:schema>
    </wsdl:types>
    Ma requete en XML qui est construite et qui n'est pas complete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    POST  HTTP/1.0
    Host: ecom.decta.com:1901
    User-Agent: NuSOAP/0.9.5 (1.123)
    Content-Type: text/xml; charset=utf-8
    SOAPAction: "urn:PaymentServer"
    Content-Length: 536
     
    <?xml version="1.0" encoding="utf-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns5997="http://testuri.com"><SOAP-ENV:Body><Request xmlns="urn:PaymentServer"><billerRef xmlns="">RB_C1_RECO</billerRef><payinstrRef xmlns="">RB_C1_RECO</payinstrRef><details xmlns=""><item xmlns=""/></details></Request></SOAP-ENV:Body></SOAP-ENV:Envelope>
    Pourriez vous m'aider a ce que je construise correctement mon array pour que le WSDL lise correctement les parametres??

    A la place il fallait que ca fasse un truc du genre:

    <details xmlns=""><item xmlns=""><name>merchant_id</name><value>1234567</value></item></details>

    En esperant lire de vous prochainement,

    Jespere pouvoir avoir une indications sur ce code?

    Mercii

  2. #2
    Membre chevronné
    Inscrit en
    octobre 2011
    Messages
    1 060
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 060
    Points : 1 838
    Points
    1 838

    Par défaut

    J'opinerais avec un dosage spéculatif comme ça.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $param_Request = array("billerRef" => "RB_C1_RECO", 
        "payinstrRef" => "RB_C1_RECO",
        "details" => array("item"=>array("name" => "merchant_id", "value" => 1234567))
    );

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    septembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2017
    Messages : 2
    Points : 1
    Points
    1

    Par défaut Merci de ton aide.

    Cher Tsuji,

    MErci enormement de ton aide. J'ai pu mettre en place ma requete xml pour envoyer au serveur par le WSDL. Grace a la suivante:
    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
     
    $merchantIDStruct = new stdClass();
    $merchantIDStruct->name = 'merchant_id';
    $merchantIDStruct->value = '1234567';
     
    $detailArray = new stdClass();
    $detailArray->item = $merchantIDStruct;
     
    $parameters = new stdClass();
    $parameters->details = $detailArray;
    $parameters->billerRef = "RB_C1_RECO";
    $parameters->payinstrRef = "RB_C1_RECO";
     
     
    $proxy = $client->getProxy();
    $result = $proxy->RECOstep1($parameters);
    J'ai essaye de passer ta solution comme la suivante, mais ca n'a pas construite ma requete xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    $param_Request = array(
        "billerRef" => "RB_C1_RECO", 
        "payinstrRef" => "RB_C1_RECO",
        "details" => array("item"=>array("name" => "merchant_id", "value" => 1234567))
    );
     
    $result = $client->call('RECOstep1', $param_Request ); //, 'merchant_id'=> $param_merchant_id array( 'Request' => $param_Request )

    Si je pars par la methode du getProxy(). La construction de ma requete en XML est correcte: Mais je n'arrive pas a faire passer la requete vers le serveur. Je comprends pas le pourquoi du comment.

    Peux tu m'aider dessus stp?

    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
     
    Request
    POST  HTTP/1.0
    Host: ecom.decta.com:1901
    User-Agent: NuSOAP/0.9.5 (1.123)
    Content-Type: text/xml; charset=utf-8
    SOAPAction: "urn:PaymentServer"
    Content-Length: 606
     
    <?xml version="1.0" encoding="utf-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns4076="http://testuri.com"><SOAP-ENV:Body><Request xmlns="urn:PaymentServer"><billerRef xmlns="">RB_C1_RECO</billerRef><payinstrRef xmlns="">RB_C1_RECO</payinstrRef><details xmlns=""><item xmlns=""><name xmlns="">merchant_id</name><value xmlns="">1234567</value></item></details></Request></SOAP-ENV:Body></SOAP-ENV:Envelope>
     
    Response
     
    HTTP/1.1 500 Internal Server Error
    Server: gSOAP/2.8
    Content-Type: text/xml; charset=utf-8
    Content-Length: 560
    Connection: close
     
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Fault xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:lm="urn:Limits" xmlns:cs="urn:CardServices" xmlns:ebppif1="urn:PaymentServer" xmlns:iiacs="urn:IIACardServices"><faultcode>SOAP-ENV:Client</faultcode><faultstring>Data required for operation</faultstring></SOAP-ENV:Fault>

  4. #4
    Membre chevronné
    Inscrit en
    octobre 2011
    Messages
    1 060
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 060
    Points : 1 838
    Points
    1 838

    Par défaut

    La présence des lignes #33-#35
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    ne peut s'expliquer que le bloque de xsd schéma ainsi présenté n'est pas un choix judicieux pour une information complète sur le message de requête. Il se peut que l'élément Request et l'élément action doivent être présentés dans la requête pas seulement comme frère mais aussi comme enfant d'une élément englobant. Donc, il n'est pas étonnant que le service rejète la reqête avec 500.

    Il faut regarder le wsdl particulièrement sur l'opération, probablement nommée RECOstep1 et puis remonter sur son message input pour découvrir dans sa partie wsdl:part quel élément il faut être envoyé. Il est quasi certain, ce n'est pas l'élément Request.

    Voilà ce qu'il faut faire.

Discussions similaires

  1. [Axis 2] Erreur pour générer un client WSDL
    Par kevin254kl dans le forum Web Services
    Réponses: 2
    Dernier message: 23/01/2015, 02h42
  2. Erreur SOAP : "SOAP-ENV:Client.WSDL-NoSchemaType"
    Par sesebs dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 12/01/2013, 17h07
  3. [nuSOAP] génération wsdl avec php et les types
    Par ybvj59930 dans le forum Services Web
    Réponses: 2
    Dernier message: 06/02/2009, 16h03
  4. [Débutant] Généré le client depuis un fichier WSDL
    Par chronos dans le forum Web Services
    Réponses: 6
    Dernier message: 02/08/2007, 12h01

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