PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → WD 22 - Envoyer une requéte HTTPS vers Chorus
WD 22 - Envoyer une requéte HTTPS vers Chorus
Started by Jonathan, Feb., 08 2018 5:45 PM - 3 replies
Registered member
3 messages
Popularité : +1 (1 vote)
Posted on February, 08 2018 - 5:45 PM
Bonjour,

J'ai besoin d'envoyer des requêtes HTTPS vers l'API Chorus afin de pouvoir communiquer des factures en dématérialisation.
Pour ce faire, j'ai essayé d'envoyer une requête HTTPS (avec certificat) par le logiciel SOAP - UI. Dans ce cas-ci, pas de problème. Or, quand j'essaie avec Windev je n'arrive pas à communiquer avec l'API. L'erreur me dit que le serveur ne répond pas.

Voici mon code :

MaHttp est une restRequête
MaReponse est un restRéponse
Param est une chaîne ANSI
url est une chaîne

url = "https://chorus-pro.gouv.fr:5443/service-qualif/factures/rechercher/recipiendaire"

tabCertificat = CertificatCharge(Chemin,C)
MonCertificat = tabCertificat[1]

MaHttp.URL = url
MaHttp.ContentType = "application/json"
Param = [
{"idUtilisateurCourant" : XXXXXXX}
]
MaHttp.Contenu = Param
MaHttp.Entête["Accept-charset"] = "UTF-8"
MaHttp.Entête["Accept-language"] = "fr_FR"
MaHttp.Entête["Authorization"] = "Basic "+Crypte("user:mdp","",crypteAucun,encodeBASE64)
MaHttp.Méthode = httpPost

HTTPCertificat(MonCertificat.Empreinte)
MaReponse = RESTEnvoie(MaHttp)
SI ErreurDétectée ALORS
Erreur(ErreurInfo(errComplet))
SINON
Info(MaReponse.Contenu)
FIN


Merci de votre aide par avance.
Posted on May, 23 2018 - 6:01 PM
Bonjour,

Même problème.

As-tu trouvé la solution ?
Posted on August, 14 2018 - 11:52 AM
Bonjour,

ça doit être un problème de certificat si le serveur ne répond pas.
moi je l'ai fais en curl et il a fallu fournir deux certificats: le pem et le pkey

Bon courage
Posted on September, 10 2018 - 6:32 PM
Bonjour,

Voici la solution technique que nous avons mis en oeuvre
Le certificat P12 doit être installé sur le poste client.
Le certificat P7B doit avec été paramétré sur l'accès technique sur le portail Chorus
MonJsonIn est un Buffer
vJsonIn est un Variant

// URL appelée (décrite dans le fichier WADL
sURL est une chaîne ="https://chorus-pro.gouv.fr:5443/service-qualif/structures/consulter"
// Constante
sTypeContenu est une chaîne = "application/json"
//utilisateur
user est une chaîne = "TECH_MonTech@cpp2017.fr"
//mot de passe utilisateur
mdp est une chaîne = "MonMotDePasse"


//
// constitution du JSON
// (attention à respecter les types entiers/chaines)
vJsonIn.idStructureCPP=250
vJsonIn.codeLangue = "FR"
MonJsonIn = VariantVersJSON(vJsonIn)

//
// constitution de la chaîne d'authentification
//
//on crée la chaine user:password
a_encoder est une chaîne = user+":"+mdp
//on encode en base 64
auth_base64 est une chaîne = Crypte(a_encoder, "", compresseAucun + crypteAucun, encodeBASE64)
//on crée le header
sHeaderAuth est une chaîne = ChaîneVersUTF8("Authorization: Basic "+auth_base64)

//
// Charger le certificat
//
ListeCertif est une chaîne = HTTPListeCertificat()
Certif est une chaîne = ExtraitChaîne(ExtraitChaîne(ListeCertif, 1, RC), 3, TAB)
HTTPCertificat(Certif)

// Lancement d'une requête sur un serveur sécurisé
ResLancement est un booléen = HTTPRequête(sURL,"",sHeaderAuth,MonJsonIn,sTypeContenu)

// Si erreur rencontrée
SI ResLancement = Faux ALORS
// Selon le type d'erreur rencontré
SELON ErreurInfo(errCode)
// Certificat invalide
// ou ne provenant pas d'une société connue
CAS httpErreurCertificatInvalide :
// Ignorer le certificat ?
SI OuiNon("Alerte de sécurité détectée !", ...
"Certificat invalide.", ...
"Ignorer ce certificat ?") = Oui ALORS
HTTP.IgnoreErreur = httpIgnoreCertificatInvalide
// Nouveau lancement de la requête
// en ignorant cette erreur
HTTPRequête("https://www.MonServeur.com")
FIN
// Date du certificat non-valide ou expiré
CAS httpErreurCertificatExpiré :
// Ignorer la date du certificat ?
SI OuiNon("Alerte de sécurité détectée !", ...
"Date du certificat invalide ou expiré.", ...
"Ignorer cette date ?") = Oui ALORS
HTTP.IgnoreErreur = httpIgnoreCertificatExpiré
// Nouveau lancement de la requête
// en ignorant cette erreur
HTTPRequête("https://www.MonServeur.com")
FIN
FIN
ELSE
ResCode est une chaîne = HTTPDonneRésultat()
Info("Code HTML : " + ResCode)
ResEntête est une chaîne = HTTPDonneRésultat(httpEntête)
Info("Entête : " + ResEntête)
ResCookie est une chaîne = HTTPDonneRésultat(httpCookie)
Info("Cookie : " + ResCookie)
FIN