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

WinDev Discussion :

Envoyer un fichier par webservice [WD20]


Sujet :

WinDev

  1. #1
    Invité
    Invité(e)
    Par défaut Envoyer un fichier par webservice
    Bonsoir les amis,

    Je rencontre des soucis pour faire appel à un web service, dont voici l'url vers la wsdl.

    Pour l'utiliser, on doit s'identifier, les identifiants de connexions sont :
    utilisateur : 20450835600MODDATOS
    mot de passe : MODDATOS

    Ce web service permet d'envoyer d'envoyer un fichier au format zip (si autre format, le fichier ne pourra jamais être accepté), j'essaye d'envoyer ce fichier test.

    Ce web service a diverses fonctions pour envoyer mais dans mon test, je veux faire appel à la méthode sendbill, dont voici les paramètres :
    - fileName : nom du fichier zip à envoyer, il faut mettre l’extension (dans mon exemple, il faut mettre la valeur 20450835600-01-FF11-56.zip)
    - contentFile : tableau de bytes du fichier zip à envoyer : je pense qu'en wlangage, il s'agit d'un buffer, je n'en suis pas vraiment certain, j'avais utilisé ce webservices en vb.net, j'avais fait appel à System.IO.File.File.ReadAllBytes

    La réponse est un tableau de bytes.

    J'avais mis ce bout de code :
    Code windev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    l_xml est une chaîne="C:\test\20450835600-01-FF11-56.zip"
     
    v1 est un billService.sendBill
    v2 est un billService.sendBillResponse
     
    v1.fileName="20450835600-01-FF11-56.zip"
    v1.contentFile=fChargeBuffer(l_xml)
     
    QUAND EXCEPTION DANS
    	v2=billService.sendBill(v1)
    	l_fichierReponse est un Buffer=v2.applicationResponse
    	fSauveBuffer("C:\test\reponseSunat.zip",l_fichierReponse)
    FAIRE
    	Erreur(ExceptionInfo)
    FIN

    Mais j'ai une erreur quand j'exécute la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v2=billService.sendBill(v1)
    Le message d'erreur est :
    Impossible de convertir un élément de type sendBill en type sendBill
    Je ne vois pas très bien ce que ce message d'erreur veut dire... dans la documentation du web service, il est question d'enveloppe SOAP, dois je la générer? et dans cette enveloppe, on peut y mettre l'utilisateur et le mot de passe.

    Merci
    Dernière modification par Invité ; 30/05/2016 à 18h01.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Essaye ça

    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
    sFilename est une chaîne= "Nouveau document texte.zip"
    l_xml est une chaîne =ComplèteRep(fRepExe()) + sFilename
     
    v1 est un billService.sendBill
    v2 est un billService.sendBillResponse
     
    v1.fileName=sFilename
     
    bufFile est une chaîne = BufferVersHexa(fChargeBuffer(l_xml))
    v1.contentFile = bufFile
     
    QUAND EXCEPTION DANS
    	v2=billService.sendBill(v1)
    	l_fichierReponse est un Buffer=v2.applicationResponse
    	fSauveBuffer(ComplèteRep(fRepExe()) + "reponseSunat.zip",l_fichierReponse)
    FAIRE
    	Erreur(ExceptionInfo)
    FIN
    Je ne sais pas vraiment ce qu'est censé faire le webservice mais en tout cas je n'ai aucune erreur.
    Par contre, accéder au WSDL ne nécessite pas d'authentif et il me semble qu'utiliser les fonctions non plus...sauf si le webservice ne renvoie rien quand l'authentif est incorrecte?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'ai fait des tests d'envoi en vb.net, j'ai été amené à corriger le fichier à envoyer, j'ai mis une version qui a été acceptée, et voici la réponse correspondante.

    Quand je teste via windev, je ne rencontre pas d'erreur d'exécution, le fichier généré est tout simplement... vide :/

    Question : Pourquoi mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l_fichierReponse est un Buffer=v2.applicationResponse
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l_fichierReponse est un Buffer=HexaVersBuffer(v2.applicationResponse)
    Bien le résultat reste inchangé?

  4. #4
    Invité
    Invité(e)
    Par défaut
    C'est un oubli, en effet je pense qu'il faut le mettre

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je n'ai pas encore résolu ce problème, j'ai pensé me servir d'une librairie .NET pour gérer ces tableaux de bytes mais sans succès (problème de comptabilité des types de variable).
    J'ai trouvé ce sujet de discussion assez intéressant, je ne sais pas si le résultat est le même par rapport à ta méthode, je pense que ça pourrait être une piste intéressante.
    Du coup, pour initialiser mon paramètre contentFile, j'ai mis le code suivant :
    Code windev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	MyArray is an array of 0 string 
    myBufIN is Buffer 
    MyBufOUT is Buffer 
    myBufIN = fLoadBuffer(l_xml) 
    ArrayAddLine(MyArray,myBufIN) 
    Serialize(MyArray,MyBufOUT,psdBinary)
    v1.contentFile = MyBufOUT

    En ce qui concerne la réponse, c'est toujours aussi problématique, même en faisant :
    Code windev : Sélectionner tout - Visualiser dans une fenêtre à part
    l_fichierReponse est un Variant=v2.applicationResponse

    Ma variable reste vide...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Comme je le disais ce que fait le webservice n'est pas détaillé....il sert à permettre l'envoi de fichier zip mais en retour est il censé renvoyer quelque chose? Me semble pas avoir vu ça.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour, je pense avoir une meilleur piste, mais je rencontre une erreur dans le code, je n'ai aucune idée de ce qui ne marche pas :

    Code windev : 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
    sFilename est une chaîne= "20450835600-01-FF11-56.zip"
    l_zipEnvoi est une chaîne ="C:\Mes Projets\EnvoiWindev\" + sFilename
    l_cheminReponse est une chaîne="C:\Mes Projets\EnvoiWindev\reponseSUNAT.zip"
     
    l_ws est un billServiceClient
    l_ws.ClientCredentials.CreateSecurityTokenManager()
    l_ws.ClientCredentials.UserName.username="20450835600MODDATOS"
    l_ws.ClientCredentials.UserName.password="MODDATOS"
     
    l_ws.Open()
    l_wsSettings est un sendBill
    l_wsSettings.fileName=sFilename
    l_wsSettings.contentFile=fChargeBuffer(l_zipEnvoi)
     
    //la ligne suivante est en erreur, la fonction sendbill n'a pas les bons paramètres
    l_reponse est un Variant=l_ws.sendBill(l_wsSettings.fileName,l_wsSettings.contentFile)
    //ne marche pas non plus avec l_ws.sendBill(l_wsSettings)
    l_ws.close()
    Dernière modification par Invité ; 03/06/2016 à 10h09.

  8. #8
    Invité
    Invité(e)
    Par défaut
    je n'ai pas le code avec moi mais je me souviens que la fonction sendBill attend un seul paramètre de type sendBillRequest ou quelque chose comme ca (c'est décrit dans Windev je crois)
    là avec 2 paramètres normal qu'il y ait une erreur selon moi

  9. #9
    Invité
    Invité(e)
    Par défaut
    En instanciant un objet de type sendBillRequest, windev me trouve les propriétés suivantes :
    - contentFile
    - Equals
    - fileName
    - GetHashCode
    - GetType
    - ToString

    Par ailleurs, quand j'exécute mon code, j'ai une erreur quand je déclare un objet de type billServiceClient, le message est :
    Le framework .NET a renvoyé l'erreur suivante :
    Une exception a été levée par la cible d'un appel.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous,

    J'ai trouvé ce message, ce qui m'a incité à écrire le code suivant :

    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
    	sFilename est une chaîne= "20450835600-01-FF11-56.zip"
    	l_xml est une chaîne ="C:\Mes Projets\EnvoiWindev\" + sFilename
     
    	v1 est un billService.sendBill
    	v2 est un billService.sendBillResponse
     
    	v1.fileName=sFilename
     
    	MonBuffer est un Buffer=fChargeBuffer(l_xml)
    	l_taille est un entier=Length(MonBuffer)
    	fileArr is array of l_taille byte
     
    	FOR i = 1 TO l_taille
    		fileArr[i] = MonBuffer[[i]]
    	END
     
    	v1.contentFile=fileArr
     
    	QUAND EXCEPTION DANS
    		v2=billService.sendBill(v1)          
    		l_fichierReponse est un Buffer=HexaVersBuffer(v2.applicationResponse)
    		fSauveBuffer("C:\Mes Projets\EnvoiWindev\" + "R-20450835600-01-FF11-56.zip",l_fichierReponse)
    	FAIRE
    		Erreur(ExceptionInfo)
    	FIN
    Mais je rencontre une erreur quand j'exécute le code suivant :
    Le message est le suivant :
    'contentFile' n'est pas un élément indicé
    --------------------------------------------------------------------------------------

    J'ai également essayé le code suivant, qui m'a l'air bien plus approprié par rapport au contexte ainsi rencontré :
    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
    sFilename est une chaîne= "20450835600-01-FF11-56.zip"
    l_zipEnvoi est une chaîne ="C:\Mes Projets\EnvoiWindev\" + sFilename
    l_cheminReponse est une chaîne="C:\Mes Projets\EnvoiWindev\reponseSUNAT.zip"
     
    l_ws est un billServiceClient
    l_ws.ClientCredentials.CreateSecurityTokenManager()
    l_ws.ClientCredentials.UserName.username="20450835600MODDATOS"
    l_ws.ClientCredentials.UserName.password="MODDATOS"
     
    l_ws.Open()
    l_wsSettings est un sendBill
    l_wsSettings.fileName=sFilename
    l_wsSettings.contentFile=fChargeBuffer(l_zipEnvoi)
     
    l_reponse est un Variant=l_ws.sendBill(l_wsSettings)
    l_ws.close()
    Mais je rencontre 2 erreurs :
    - la ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l_reponse est un Variant=l_ws.sendBill(l_wsSettings)
    est en erreur dans l'éditeur de code, disant que la syntaxe n'est pas la bonne
    - en debug, impossible d'instancier un objet de type BillServiceClient, le message d'erreur est le suivant :
    Le framework .NET a renvoyé l'erreur suivante :
    Une exception a été levée par la cible d'un appel.
    Dernière modification par Invité ; 06/06/2016 à 15h39.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour tout le monde!

    J'ai finalement jeté l'éponge, j'ai comme l'impression que windev n'a pas été conçu pour faire appel à ce genre de web service.
    Du coup, j'ai procédé autrement, je me suis généré un exécutable avec visual studio qui fait l'appel au web service.
    Vu à quel point ce projet est complexe (j'ai passé 4 mois sur ce projet en version vb.net), je vais partir sur ce principe là qui devient du coup trivial.

  12. #12
    Membre actif
    Homme Profil pro
    Ingé Indus
    Inscrit en
    Juillet 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingé Indus
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 107
    Points : 241
    Points
    241
    Par défaut
    Je viens un peu tard, mais j'avais envie d'essayer du webservice.
    Et en plus prendre un problème pour commencer c'est pas la meilleur idée ...

    J'ai vus 2 points

    Le premier n'est pas visible dans les descriptions sous windev. Mais dans la description de sendbill on vois <applicationResponse> est base64Binary
    Base64 pour un fichier, cela semble logique. donc en fouillant dans les descriptions du webservice on trouve
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xs:element name="fileName" type="xs:string" minOccurs="0"/>
    <xs:element xmlns:ns2="http://www.w3.org/2005/05/xmlmime" name="contentFile" ns2:expectedContentTypes="application/octet-stream" type="xs:base64Binary" minOccurs="0"/>

    Donc il faudrait faire du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v1.contentFile = Crypte(fChargeBuffer(l_xml), "", compresseAucun + crypteAucun, encodeBASE64)
    Niveau reponse, toujours rient...
    Mettons la réponse dans un variant !

    La on récupère enfin quelque chose:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope"><faultcode>0101</faultcode><faultstring>-</faultstring></S:Fault></S:Body></S:Envelope>

    Bon, erreur pas très explicite. il faudrait une doc du webservice pour comprendre.

    Sinon, il faudrait comparer la requête que tu envois en .NET (et qui marche) a celle de WD pour voir les différences.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    je vois que tu as pu résoudre la partie qui consiste à faire passer les paramètres au web service, le xml retourné montre qu'une nouvelle erreur est survenue, elle a pour code 0101, qui signifie que l'entête de sécurité est incorrecte (la liste complète des erreurs est disponible ici, en espagnol).

    En version vb.net, j'ai ce bout de code pour faire l'envoi :

    Code VB : 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
        Sub Main()
            Try
                'génération du ZIP
                Dim adresse As String = "C:\SUNAT\Envoi SUNAT\envoi_sunat\envoi_sunat\bin\Debug\"
                Dim adresseTEMP As String = adresse & "TEMP"
                Dim fichier_envoi As String = System.IO.Directory.GetFiles(adresseTEMP)(0)
                fichier_envoi = fichier_envoi.Split("\")(fichier_envoi.Split("\").Count() - 1)
                Dim nomFichier As String = fichier_envoi.Split(".")(0).Trim
                Dim fichier_recu As String = "R-" & fichier_envoi
     
                Dim zip As New ICSharpCode.SharpZipLib.Zip.FastZip
                Dim pathToZipFile As String = adresse & nomFichier & ".zip"
     
                If System.IO.File.Exists(pathToZipFile) Then
                    System.IO.File.Delete(pathToZipFile)
                End If
                zip.CreateZip(pathToZipFile, adresseTEMP, True, "")
     
                'traitement pour envoyer le fichier
     
                Dim usernametoken_login As String ="20450835600MODDATOS"
                Dim usernametoken_pwd As String = "MODDATOS"
     
                System.Net.ServicePointManager.UseNagleAlgorithm = True
                System.Net.ServicePointManager.Expect100Continue = False
                System.Net.ServicePointManager.CheckCertificateRevocationList = True
     
                Dim data As Byte() = System.IO.File.ReadAllBytes(pathToZipFile)
     
                Dim ws As New Homologacion.billServiceClient
                Dim Retour As Byte()
     
                ws.ClientCredentials.CreateSecurityTokenManager()
                ws.ClientCredentials.UserName.UserName = usernametoken_login
                ws.ClientCredentials.UserName.Password = usernametoken_pwd
     
                ws.Open()
                'envoi du fichier ZIP à la SUNAT
                Retour = ws.sendBill(nomFichier & ".zip", data)
                ws.Close()
     
                'la réponse
                System.IO.File.WriteAllBytes(adresse & "R-" & nomFichier & ".zip", Retour)
                System.IO.File.Delete(adresseTEMP & "\" & nomFichier & ".xml")
                MsgBox("Envoi ok")
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub

    J'avais essayé en wlangage d'instancier un objet de type billServiceClient mais impossible d'y arriver, j'avais cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Le framework .NET a renvoyé l'erreur suivante :
    Une exception a été levée par la cible d'un appel.
    Le manuel du webservice est disponible ici.

    PS: comment as-tu gérer la méthode du webservice? Dans mes tests, j'ai le message "Impossible de convertir un élément de type sendBill en type sendBill".
    Mon code actuel :

    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
    sFilename est une chaîne= "20450835600-01-FF11-56.zip"
    l_ZIPEnvoi est une chaîne ="C:\Users\romulus001\Desktop\sunat\test\" + sFilename
     
    v1 est un billService.sendBill
    v2 est un billService.sendBillResponse
     
    v1.fileName=sFilename
    v1.contentFile = Crypte(fChargeBuffer(l_ZIPEnvoi), "", compresseAucun + crypteAucun, encodeBASE64)
     
    QUAND EXCEPTION DANS
    	l_reponseWS est un Variant=sendBill(v1)
    	l_fichierReponse est une chaîne=Décrypte(l_reponseWS.applicationResponse, "", compresseAucun + crypteAucun, encodeBASE64)
    	fSauveBuffer("C:\Users\romulus001\Desktop\sunat\test\reponseSunat.zip",l_fichierReponse)
    	Info("ok")
    FAIRE
    	Erreur(ExceptionInfo)
    FIN
    Dernière modification par Obsidian ; 18/06/2016 à 21h57.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    A force de faire des tests, j'ai fini par casser mon windev 20, casser dans le sens où quand j'écris dans mon code
    Windev plante et s'arrête en suivant... L'erreur survient également quand je fais un nouveau projet

    Du coup, j'ai fait un nouveau projet avec windev 21, et là, bizarrement, j'arrive à avoir ceci comme retour à l'appel de mon web service :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope"><faultcode>0101</faultcode><faultstring>-</faultstring></S:Fault></S:Body></S:Envelope>

    Comme quoi, j'ai bien l'impression que la version 20 de windev n'était pas adapté pour faire appel à ce genre de web service.
    En tout cas, je commence à être rassuré, l'autre point à voir est l'envoi de l'enveloppe SOAP, où je dois envoyer ceci :
    Code xml : 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
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    	xmlns:ser="http://service.sunat.gob.pe" xmlns:wsse="http://docs.oasisopen.
    	org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    	<soapenv:Header>
    	<wsse:Security>
    	<wsse:UsernameToken>
    	<wsse:Username>20450835600MODDATOS</wsse:Username>
    	<wsse:Password>moddatos</wsse:Password>
    	</wsse:UsernameToken>
    	</wsse:Security>
    	</soapenv:Header>
    	<soapenv:Body>
    	<ser:sendBill>
    	<fileName>20450835600-01-FF11-56.zip</fileName>
    	<contentFile>cid:20450835600-01-FF11-56.zip</contentFile>
    	</ser:sendBill>
    	</soapenv:Body>
    	</soapenv:Envelope>

    J'ai fait appel à la fonction SOAPExécuteXML que j'ai envoyé à cette adresse : http://service.sunat.gob.pe
    J'ai récupéré cette adresse comme valeur de l'attribut xmlns:ser, mais en retour, j'ai FAUX
    J'ai également fait le test à l'adresse http://service.gem.factura.comppago....o.sunat.gob.pe
    mais je n'arrive à rien de concluant...
    En lisant le manuel, je n'ai pas trouvé d'url du serveur soap...
    Dernière modification par LittleWhite ; 27/06/2016 à 19h44. Motif: Coloration code

  15. #15
    Membre actif
    Homme Profil pro
    Ingé Indus
    Inscrit en
    Juillet 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingé Indus
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 107
    Points : 241
    Points
    241
    Par défaut
    Voila requete que fait windev sur https://www.sunat.gob.pe/ol-ti-itcpgem-beta/billService

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    	<SOAP-ENV:Header/>
    	<SOAP-ENV:Body>
    		<ns1:sendBill xmlns:ns1="http://service.sunat.gob.pe">
    			<fileName>20450835600-01-FF11-56.zip</fileName>
    			<contentFile>VUVzREJCUUFBQUFJQUlLS3ZrZ0lqM0svNmc0QUFIb2pBQUFhQUFBQU1qQTBOVEE0TXpVMk1E
    QXRNREV0UmtZeE1TMDFOaTU0Yld6VldldHkNCnFzNlcvejVWOHc1VXpwZVo4cDhBSWtaVDI1
    [blablabla]
    QUFBUUFCQUVnQQ0KQUFBaUR3QUFBQUE9</contentFile>
    		</ns1:sendBill>
    	</SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

    En retour <faultcode>0101

    Mais même en 'corrigent' la requete:
    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    	<SOAP-ENV:Header>
    		<wsse:Security>
    			<wsse:UsernameToken>
    				<wsse:Username>20450835600MODDATOS</wsse:Username>
    				<wsse:Password>MODDATOS</wsse:Password>
    			</wsse:UsernameToken>
    		</wsse:Security>
    	</SOAP-ENV:Header>
    	<SOAP-ENV:Body>
    		<ns1:sendBill xmlns:ns1="http://service.sunat.gob.pe">
    			<fileName>20450835600-01-FF11-56.zip</fileName>
    			<contentFile>VUVzREJCUUFBQUFJQUlLS3ZrZ0lqM0svNmc0QUFIb2pBQUFhQUFBQU1qQTBOVEE0TXpVMk1E
    [blablabla]
    QUFBUUFCQUVnQQ0KQUFBaUR3QUFBQUE9</contentFile>
    		</ns1:sendBill>
    	</SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

    Retourne:
    <faultcode>soap-env-Server.0156</faultcode><faultstring>-</faultstring>

    De même avec l'exemple que tu donne.
    ll faudrait voir ce que le programme en .net envoi !

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonsoir la compagnie!

    J'ai reçu un mail de la part d'un programmeur qui a déjà trouvé la solution, il m'a envoyé son code où j'ai été amené à le retouché, il n'avait pas généré le fichier zip physique de la réponse :

    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
    PROCEDURE New_Method(sNombreArchivo is string,bufContenidoArchivo is Buffer,sdirectory is string)
    fuentededato is sendBill
    fuentededato.fileName=sNombreArchivo
    fuentededato.contentFile=bufContenidoArchivo
    hdr is string
    hdr="<SOAP-ENV:Header>"
    hdr+="<wsse:Security "
    hdr+="xmlns:wsse=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"">"
    hdr+="<wsse:UsernameToken>"
    hdr+="<wsse:Username>99999999999moddatos</wsse:Username>"
    hdr+="<wsse:Password>moddatos</wsse:Password>"
    hdr+="</wsse:UsernameToken>"
    hdr+="</wsse:Security>"
    hdr+="</SOAP-ENV:Header>"
    Xmlstring is string=SOAPPrepare(billService.sendBill,fuentededato)
    Xmlstring=Replace(Xmlstring,"<SOAP-ENV:Header/>",hdr)
    bRespuesta is boolean
    bRespuesta =SOAPRunXML("https://www.sunat.gob.pe/ol-ti-itcpgem-beta/billService?wsdl", Xmlstring)
    IF (bRespuesta = False)
    	WL.Trace(SOAPError(SOAPErrCode))	
    END
     sRetorno2 is string=SOAPGetResult(SOAPHTTPResult)
    sRetorno3 is string=SOAPGetResult(SOAPXMLResult)
    l_ContenidoRepuestaSOAP is string=XMLExtraitChaine(
    sRetorno3,"applicationResponse",1)
    l_ContenidoCDR is string=Décrypte(
    l_ContenidoRepuestaSOAP,"",compresseAucun+crypteAucun, encodeBASE64)
    fSaveBuffer(
    sdirectory+"\R-"+ExtractString(sNombreArchivo,1,".")+".zip",
    l_ContenidoCDR)
    ps: pour avoir le buffer d'un fichier zip à envoyer, il fait appel à fChargeBuffer

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

Discussions similaires

  1. Envoyer un fichier par TCP/IP
    Par slimdre dans le forum C++Builder
    Réponses: 10
    Dernier message: 24/01/2011, 10h37
  2. Envoyer un fichier par mail
    Par kmaniche dans le forum C++Builder
    Réponses: 21
    Dernier message: 15/11/2009, 20h27
  3. Envoyer un fichier par email
    Par portu dans le forum Delphi
    Réponses: 3
    Dernier message: 30/05/2006, 11h02
  4. [Mail] Envoyer un fichier par mail
    Par Oberown dans le forum Langage
    Réponses: 3
    Dernier message: 24/10/2005, 15h55
  5. Réponses: 1
    Dernier message: 19/08/2003, 16h11

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