Etant donné les difficultés que nous avons rencontrées pour nous connecter et au faible niveau d'information disponible, nous vous livrons notre solution. Elle est forcément incomplète et à adapter à votre situation, mais nous espérons qu'elle vous fera gagner du temps.
Plusieurs obstacles sont à régler avant d'accéder à Chorus Pro avec Windev :
1- compréhension de la gestion des établissement (SIRET) et utilisateurs (notamment l'utilisateur technique) dans CHORUS
2- gestion du certificat
3- comprehension des 'besoins' de Chorus Pro
4- reproduire cette communication avec Windev
1- Le premier point est un prérequis que vous devez acquérir en consultant la documentation très/trop complète du site Chorus Pro : https://communaute.chorus-pro.gouv.f...electroniques/
2- Gestion du certificat : nous sommes partis sur le principe d'un accès par API, il nous faut donc un "Certificat d’authentification serveur de type client = SSL Client"
Ce certificat est constitué aux formats
- P12 = installé sur le client ou intégré dans les préférences de SOAPUI
- P7B = enregistré lors de la demande de raccordement API (utilisateur technique) sur Chorus Pro
3- pour identifier les besoins de Chorus Pro, nous avons utilisé SOAPUI.
- Dans le menu Files > Preferences … > SSL Settings paramétrer le chemin à votre fichier P12 et le mot de passe
- Créer un nouveau projet REST en important un fichier WADL AIFE-Chorus-Pro-Exemples_JSON_WADL.zip
- Pour interroger une requête, il faut :
- Ouvrir la requête (double clic)
- Afficher l’inspecteur ‘Auth’ de la requête
- Dans la combo ‘Authorization’
- ‘Add a new Authorization’
- 'basic'
- renseigner 'username' (compte technique) / password (compte technique) / cocher 'authentication pre-emptively'
- attention, le port du endpoint n'est pas toujours correctement renseigné https://chorus-pro.gouv.fr:5443
- copier coller un JSON dans le contenu de la requête (jaune) par exemple
{
"idUtilisateurCourant" : 201,
"identifiantFactureCPP" : 220
}
ID issus du fichier csv du matelas de données de tests- lancer la requête
4- sous windev :
Prérequis : le certificat P12 soit être installé : double clic
Code:
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 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