PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → DSN - Déclaration Sociale Nominative - Soucis de requete
DSN - Déclaration Sociale Nominative - Soucis de requete
Débuté par PAT, 09 nov. 2015 10:35 - 14 réponses
Posté le 09 novembre 2015 - 10:35
Bonjour a vous tous...

Je dois travailler sur la DSN (déclaration Sociale Nominative) et transférer une requête avec le contenu d'un fichier ..

J'ai créer un fichier Xml pour y placer mes balises en reprenant les posts deja présents sur le forum, cependant je bloque à la reéception du message de retour par la fonction HTMLVersTexte(HTTPDonneRésultat(httpRésultat))) qui me renvois ce message...

---------------------------
DSN_API
---------------------------
Requête OK, résultat :

Bad Request



Your browser sent a request that this server could not understand.
---------------------------
OK
---------------------------
Lorsque je regarde le cahier des charges, il devrait me retourner un tout autre message de succes ou d'echec.

Si des âmes charitables ont déjà avancés sur ce dossier (DSN) je serai prêt a échangé également.


Cordialement




//POST /authentifier/1.0/ HTTP/1.1
//Host: net-entreprises.fr
//Content-Type: application/xml
//Content-Length: 4096
//
//<identifiants>
//<siret>12345678901234</siret>
//<nom>Wallace</nom>
//<prenom>William</prenom>
//<motdepasse>azerty</motdepasse>
//<service>25</service>
//</identifiants>


// -- construction de la chaine

Ch_message est une chaîne
Ch_entete est une chaîne

Ch_message=fChargeTexte("d:\toto.xml")
Ch_entete=[
Host: net-entreprises.fr
Content-Length: 4096
]

// la requette net entreprise
SI HTTPRequête("https://services.net-entreprises.fr/authentifier/1.0/","",Ch_entete,Ch_message,"application/xml>")=Vrai ALORS
Info("Requête OK, résultat :", ...
HTMLVersTexte(HTTPDonneRésultat(httpRésultat)))
SINON

Erreur(ErreurInfo())
FIN
Membre enregistré
3 messages
Posté le 24 avril 2017 - 09:57
Bonjour Pat,

Je suis novice dans les requête HTTP et j'ai des soucis pour accéder à Net-Entreprise afin de récupérer les CRM.
J'ai bien posté un exemple sur le forum, mais pas de réponses.
Peux tu me donner des exemples je bloque sur cette requête d'authentification.

Tu peux si tu le veux répondre à mon post sur le forum ou me transmettre un mail à mon adresse
gerard.kouby@logadom.fr

Avec mes remerciements.
Gérard

--
Gérard
Membre enregistré
10 messages
Posté le 28 avril 2017 - 15:21
Bonjour,

Je test aussi en ce moment les envois de DSN via les API net-entreprises.

De mon coté je parviens à récupérer un token mais je bloque au moment de l'utiliser.

Voici mon code :
UrlApi est une chaîne
UserAgent est une chaîne
ParamHeader est une chaîne
ParamPost est une chaîne
ResRequete est une chaîne
ResEntete est une chaîne
TokenDsn est une chaîne

//URL d'obtention d'un jeton d'authentification pour utiliser les API net-entreprises
UrlApi = "https://services.net-entreprises.fr/authentifier/1.0/"

//Renseignement des paramètres d'authentification sur net-entreprises
ParamPost = "<identifiants>" + ...
"<siret>12345678901234</siret>" + ...
"<nom>Wallace</nom>" + ...
"<prenom>William</prenom>" + ...
"<motdepasse>azerty42</motdepasse>" + ...
"<service>25</service>" + ...
"</identifiants>"

//Paramètres d'entête et agent utilisateur
ParamHeader = "Content-Length: " + Taille(ParamPost)
UserAgent = "Client-DSN (DsnBuilder/12.5; Paie.fr)"

//Exécution de la requête d'obtention d'un jeton d'authentification
SI httpRequête(UrlApi, UserAgent, ParamHeader, ParamPost, "application/xml") = Vrai ALORS
//Récupération de l'entête du résultat (Contient code 200 si OK ou sinon un code erreur)
ResEntete = HTTPDonneRésultat(httpEntête)
//Récupération du jeton généré
TokenDsn = HTTPDonneRésultat(httpRésultat)

//URL de l'API de dépôt d'une DSN
UrlApi = "https://depot.dsnrg.net-entreprises.fr/deposer-dsn/1.0/"
//Chargement du fichier DSN (Voir pour le format de transfert du texte)
ParamPost = Compresse(fChargeTexte("D:\DSN\testArret.dsn"))

//Renseignement du jeton obtenu dans l'entête de la requête http
ParamHeader = "Authorization: DSNLogin jeton=" + TokenDsn + ...
" Content-Encoding: gzip " + ...
"Content-Length: " + Taille(ParamPost)

SI httpRequête(UrlApi, UserAgent, ParamHeader, ParamPost, "text/plain") = Vrai ALORS
ResEntete = HTTPDonneRésultat(httpEntête)
ResRequete = HTTPDonneRésultat(httpRésultat)
SINON
Erreur("Erreur Requête Envoi : " + RC + ErreurInfo(errComplet))
FIN

SINON
Erreur("Erreur Requête Auth : " + RC + ErreurInfo(errComplet))
FIN


Le premier HTTPRequête fonctionne et me ramène bien un token dans le corps et le code 200 dans l'entête, par contre le deuxième HTTPRequête me ramène une erreur dans l'entête : "Jeton manquant ou invalide".

Si quelqu'un à une idée je suis preneur.

Merci d'avance.
Julien.
Posté le 29 avril 2017 - 14:04
Bonjour,

Pour déboguer des webservices j'utilise des extensions Firefox ou Chrome qui permettent d'envoyer directement des requêtes et d'avoir le résultat "en live".
Ca permet d'avoir en clair les chaines de caractères renvoyées et de voir ou cela bloque.
Ca m'a sauvé la vie plusieurs fois.

Essayer ca, vous y verrez peut etre plus clair.
Posté le 30 avril 2017 - 00:02
Hello,

Le 28/04/2017 à 13:21, Julien a écrit :
//Renseignement du jeton obtenu dans l'entête de la requête http
ParamHeader = "Authorization: DSNLogin jeton=" + TokenDsn + ...
" Content-Encoding: gzip " + ...
"Content-Length: " + Taille(ParamPost)

SI HTTPRequête(UrlApi, UserAgent, ParamHeader, ParamPost, "text/plain") = Vrai ALORS
ResEntete = HTTPDonneRésultat(httpEntête)
ResRequete = HTTPDonneRésultat(httpRésultat)
SINON
Erreur("Erreur Requête Envoi : " + RC + ErreurInfo(errComplet))
FIN

SINON
Erreur("Erreur Requête Auth : " + RC + ErreurInfo(errComplet))
FIN
[/code]
Le premier HTTPRequête fonctionne et me ramène bien un token dans le corps et le code 200 dans l'entête, par contre le deuxième HTTPRequête me ramène une erreur dans l'entête : "Jeton manquant ou
invalide".

Si quelqu'un à une idée je suis preneur.


Comme ça, sans connaitre la norme, je dirais qu'il te manque les CRLF pour séparer les lignes d'entêtes dans ta variable /ParamHeader/.

//Renseignement du jeton obtenu dans l'entête de la requête http
ParamHeader = "Authorization: DSNLogin jeton=" + TokenDsn + CRLF + ...
" Content-Encoding: gzip " + CRLF +...
"Content-Length: " + Taille(ParamPost) + CRLF



<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Hello,<br>
<br>
Le 28/04/2017 à 13:21, Julien a écrit :  
<br>
</div>
<blockquote
cite="mid:2017e70a463ecc0e5463040390585ea3773d@news.pcsoft.fr"
type="cite">    //Renseignement du jeton obtenu dans l'entête de
la requête http
<br>
    ParamHeader    =     "Authorization: DSNLogin jeton=" +
TokenDsn + ...
<br>
                    " Content-Encoding: gzip " + ...
<br>
                    "Content-Length: " + Taille(ParamPost)
<br>
    
<br>
    SI HTTPRequête(UrlApi, UserAgent, ParamHeader, ParamPost,
"text/plain") = Vrai ALORS
<br>
        ResEntete = HTTPDonneRésultat(httpEntête)
<br>
        ResRequete = HTTPDonneRésultat(httpRésultat)
<br>
    SINON
<br>
        Erreur("Erreur Requête Envoi : " + RC +
ErreurInfo(errComplet))
<br>
    FIN
<br>
    
<br>
SINON
<br>
    Erreur("Erreur Requête Auth : " + RC + ErreurInfo(errComplet))
<br>
FIN
<br>
[/code] <br>
Le premier HTTPRequête fonctionne et me ramène bien un token dans
le corps et le code 200 dans l'entête, par contre le deuxième
HTTPRequête me ramène une erreur dans l'entête : "Jeton manquant
ou invalide".
<br>
<br>
Si quelqu'un à une idée je suis preneur.
<br>
</blockquote>
<p>Comme ça, sans connaitre la norme, je dirais qu'il te manque les
CRLF pour séparer les lignes d'entêtes dans ta variable <i>ParamHeader</i>.</p>
<p>
<br>
</p>
<p>    //Renseignement du jeton obtenu dans l'entête de la requête
http
<br>
    ParamHeader    =     "Authorization: DSNLogin jeton=" +
TokenDsn + CRLF + ...
<br>
                    " Content-Encoding: gzip " + CRLF +...
<br>
                    "Content-Length: " + Taille(ParamPost) + CRLF<br>
</p>
<p>
</p>
</body>
</html>
Posté le 10 mai 2017 - 12:20
Bonjour,

Je me remets sur les commandes DSN, un grand merci pour ton exemple pour l'authentification aux services DSN ça marche super.
Mais je rencontre le même problème que toi lors du dépôt de fichier "Jeton invalide ou manquant" .
J'ai essayé avec "CRLF" comme le préconisé LC mais j'ai toujours le même problème.

Peux être as tu continué dans tes essais, et cela fonctionne maintenant.

Comment as tu fais pour connaitre les indications à passer dans ParalHeader ? (Authorisation: DSNlogin jeton ......)
ParamHeader = "Authorization: DSNLogin jeton=" + TokenDsn + ...
" Content-Encoding: gzip " + ...
"Content-Length: " + Taille(ParamPost)

Si tu as d'autres indications me permettant de continuer moi aussi je suis preneur.
Merci pour tes réponses.

Gérard
Membre enregistré
10 messages
Posté le 16 mai 2017 - 14:11
Bonjour,

J'ai par la suite trouvé la solution c'est tout con il me maquait les retours chariot dans l'entête html.
Ce qui donne :
//Renseignement du jeton obtenu dans l'entête de la requête http
ParamHeader = "Authorization: DSNLogin jeton=" + TokenDsn + RC + ...
" Content-Encoding: gzip " + RC + ...
"Content-Length: " + Taille(ParamPost)


Et la ça fonctionne nickel.

Julien
Posté le 03 août 2017 - 16:25
je veux déposer des DSN via l'API de net entreprise mais après l'exécution du code ci-dessus je reçois toujours l'erreur 401
jeton manquant ou introuvable.
pouvez vous m'aider à résoudre ce problème je suis vraiment coincé





PROCEDURE DEPOT_DSN(sjeton est un Buffer)
//sjeton est le jeton reçu lors de la connexion
sNomDSN est une chaîne
sMaDSN est une chaîne
sNomDSN = fSélecteur("", "", "Sélectionnez un fichier...", "FICHIER TEXTE" + TAB + "*.txt", "*.txt")
sMaDSN = Compresse(fChargeTexte(sNomDSN))
SI sMaDSN~="" ALORS
//erreur
//message
RENVOYER Faux
FIN
Info(sjeton)
cMaRequête1 est un httpRequête
cMaRequête1..URL = "https://depot-edit.dsnrg.net-entreprises.fr/deposer-dsn/1.0/ "
//cMaRequête1..AgentUtilisateur="Client-DSN (DsnTOOLS/12.5; msiformatique.fr)"
cMaRequête1..AgentUtilisateur= "Client-DSN (DsnBuilder/12.5; Paie.fr)"
cMaRequête1..ContentType = "text/plain"

cMaRequête1..Entête["Authorization"] = " DSNLogin jeton="+sjeton
cMaRequête1..Entête["Content-Length"]= Taille(sMaDSN)
//cMaRequête1..Utilisateur="dsn.net-entreprises.fr "
//cMaRequête1..Entête["Host"]="depot-edit.dsnrg.net-entreprises.fr"
cMaRequête1..Contenu=sMaDSN

cMaRéponse1 est un httpRéponse = HTTPEnvoie(cMaRequête1)


SI ErreurDétectée ALORS
Erreur(ErreurInfo(errComplet))
RENVOYER Faux
SINON

Trace("//Contenu")
Trace(cMaRéponse1..Contenu)
Trace("//CodeEtat")
Trace(cMaRéponse1..CodeEtat)
Trace("//ContentType")
Trace(cMaRéponse1..ContentType)
Trace("//DescriptionCodeEtat")
Trace(cMaRéponse1..DescriptionCodeEtat)
Trace("//EntêteBrut")
Trace(cMaRéponse1..EntêteBrut)
FIN

RENVOYER Vrai
Posté le 04 août 2017 - 15:49
Bonjour,

Attention, il faut que le buffer envoyé soit transformé au format gZip.

Ci-dessous un exemple de code qui fonctionne bien :

// Retour fiches de paramétrage
cMaRequête..URL = "https://depot.dsnrg.net-entreprises.fr/deposer-dsn/1.0/"
cMaRequête..AgentUtilisateur = "Client-DSN"
cMaRequête..ContentType = "text/plain"
cMaRequête..Méthode = httpPost
cMaRequête..Entête["Authorization:"] = "DSNLogin jeton="+sMonJeton
cMaRequête..Entête["Content-Encoding:"] = "gzip"
MonBuffer est un Buffer
MonBuffer = fChargeTexte(sNomFic)
MonBuffer = gzipCompresse(MonBuffer)
cMaRequête..Contenu = MonBuffer
cMaRequête..IgnoreErreur = httpIgnoreCertificatInvalide


NB : je me suis construit un composant gZip à partir d'un exemple fourni par PCSOFT
Membre enregistré
342 messages
Popularité : +30 (32 votes)
Posté le 07 août 2017 - 09:59
Bonjour

Depuis la version 21 on peut directement utiliser la fonction Compresse de Windev avec le paramètre "compresseGZIP"

--
Pascal H. http://phapps.e-monsite.com
Posté le 17 août 2017 - 10:51
Bonjour, merci pour vos réponses.
Voici ce que j'ai fait mais ça ne marche toujours pas.
Pour l'authentification c'est bon mais pour le dépôt il m'affiche erreur 401 JETON MANQUANT OU INVALIDE


sMaDSN = Compresse(fChargeTexte(sNomDSN),compresseGZIP)
Info (sMaDSN)
SI sMaDSN~="" ALORS

RENVOYER Faux
FIN
Info(sjeton)

cMaRequête1 est un httpRequête
cMaRequête1..URL = "https://depot.dsnrg.net-entreprises.fr/deposer-dsn/1.0/ "

cMaRequête1..AgentUtilisateur= "Client-DSN "
cMaRequête1..ContentType = "text/plain"
cMaRequête1..Entête["Authorization:"] = " DSNLogin jeton="+sjeton
cMaRequête1..Entête["Content-Length:"]= Taille(sMaDSN)
cMaRequête1..Entête["Content-Encoding:"]= "gzip"
cMaRequête1..Méthode = httpPost
cMaRequête1..Contenu=sMaDSN
cMaRequête1..IgnoreErreur = httpIgnoreCertificatInvalide
cMaRéponse1 est un httpRéponse = HTTPEnvoie(cMaRequête1)
Posté le 19 octobre 2017 - 09:00
Merci pour ces infos précieuses.
j'ai cependant un soucis.
je suis sous windev19 et je rencontre un soucis pour compresser au format gzip ( uniquement a partir de la 22 ?)
si vous avez une solution , je prends !
d'avance Merci
Posté le 06 septembre 2018 - 10:23
NESTINSAR a écrit :
Bonjour, merci pour vos réponses.
Voici ce que j'ai fait mais ça ne marche toujours pas.
Pour l'authentification c'est bon mais pour le dépôt il m'affiche erreur 401 JETON MANQUANT OU INVALIDE


sMaDSN = Compresse(fChargeTexte(sNomDSN),compresseGZIP)
Info (sMaDSN)
SI sMaDSN~="" ALORS

RENVOYER Faux
FIN
Info(sjeton)

cMaRequête1 est un httpRequête
cMaRequête1..URL = "https://depot.dsnrg.net-entreprises.fr/deposer-dsn/1.0/ "

cMaRequête1..AgentUtilisateur= "Client-DSN "
cMaRequête1..ContentType = "text/plain"
cMaRequête1..Entête["Authorization:"] = " DSNLogin jeton="+sjeton
cMaRequête1..Entête["Content-Length:"]= Taille(sMaDSN)
cMaRequête1..Entête["Content-Encoding:"]= "gzip"
cMaRequête1..Méthode = httpPost
cMaRequête1..Contenu=sMaDSN
cMaRequête1..IgnoreErreur = httpIgnoreCertificatInvalide
cMaRéponse1 est un httpRéponse = HTTPEnvoie(cMaRequête1)
Posté le 06 septembre 2018 - 10:39
Bonjour,

Je remonte le sujet car je suis confronté au même probleme :

erreur 401 JETON MANQUANT OU INVALIDE

a l'exécution d'une requête permettant de consulter les dèpots :

https://consultation.dsnrg.net-entreprises.fr/lister-depots...


Avez-vous trouvé une solution ? Cordialement
Posté le 15 octobre 2018 - 15:19
Bonjour,

En utilisant la fonction HTTPrequête, on glisse un RC à la fin du token, comme derrière tous les paramètres du header. En utilisant la fonction et RC, je n'ai pas ton message.

Je te conseille soit de passer par la fonction et non la variable de type HTTPRequête, ou de tester en ajoutant un RC à ta chaine de token.

Cordialement