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 :

Chorus Pro interrogé par WinDev


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 36
    Points
    36
    Par défaut Chorus Pro interrogé par WinDev
    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 : 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
    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

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    je suis super intéressé par ton mémo et tes descriptions.
    Je n'utilise pas windev mais je comprends ce que tu as fait de A à Z via SOAP UI.
    Vu que j'ai du mal à avoir quelqu'un qui me réponds, je suis bien content d'être tombé sur ton post.
    J'ai effectué tout ce que tu as décrit mais je bloque sur certaines infos :

    1 - j'ai créé ma fiche de raccordement sur mon espace de qualif avec le certificat p7b qui a été validé par chorus.
    Il me faut maintenant le certificat p12 à installer sur SOAP UI. Pour se faire j'ai utilisé la description technique faite ici :
    https://www.tbs-certificats.com/FAQ/fr/288.html
    Tu as fait pareil ou tu as demandé à l'autorité de certification de te fournir le certificat au format p12 ?

    2 - toujours sur SOAP UI, j'ai importé plusieurs WADL dans le but d'en trouver un simple qui me permettrait de tester facilement une requête et surtout le retour de Chorus.
    J'ai donc choisi le WADL "utilisateursmoncompte" dans lequel il y a l'appel : https://chorus-pro.gouv.fr:5443/serv...mpte/consulter
    Donc le mediatype, j'ai mis "application/json" et dans le corps de la requête, le json suivant ultra simple :

    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    { 
     "utilisateur": { 
     "adresseEmailConnexionUtilisateur":"monadresseEmail"
     }
    }

    Au niveau de l'authentification, vu que la doc n'est pas clair... on est d'accord que quand tu parles de compte technique et du mot de passe associé, c'est bien celui qui est rattaché à l'utilisateur principale de l'espace qualif (TECH_000000000XXXXX@cpp2017.fr avec le mot de passe ultra caché qu'il ne faut pas oublier d'enregistrer quelque part sinon on ne le voit plus jamais) ?


    Car là, au final, lorsque je lance la requête, je pars en erreur 500...:

    Code x : 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
    HTTP/1.1 500 ERROR
    Date: Thu, 13 Sep 2018 14:14:54 GMT
    Server: 
    X-CorrelationID: Id-de709a5b4698398d54776886 0
    Authorization: Basic VEVDSF8wMDAwMDAwMDAxMzQ0NzVAY3BwMjAxNy5mcjo3PUwqSzN0Q285SHA6RnYq
    Host: chorus-pro.gouv.fr:5443
    User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
    X-Cert: -----BEGIN CERTIFICATE----- .... le reste est masqué
    X-Forwarded-For: 172.36.2.50
    X-Forwarded-Host: chorus-pro.gouv.fr:5443
    X-Forwarded-Server: chorus-pro.gouv.fr
    Content-Type: application/json
    Connection: close
    Transfer-Encoding: chunked
    
    {
      "reasons" : [ ],
      "details" : {
        "msgId" : "Id-de709a5b4698398d54776886"
      }
    }

    Et là, je ne sais pas du tout à quoi correspond ce "reasons" vide et ce msgID...
    Bref, je coince sur plusieurs points et je n'arrive pas à trouver le souci.
    Si tu peux m'aider, je suis preneur ;-)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 36
    Points
    36
    Par défaut Chorus Pro - Première connexion avec SOAPUI
    Bonjour,

    Pour résoudre ton problème, je pense que tu dois ajouter l'authentication basic décrite à partir du point 2 de la page 4 du doc joint.

    Tu trouveras ci-joint 20180914100039CHORUS PRO SOAPUI.pdf la doc interne que j'avais rédigée pour fixer les opérations à réaliser pour se connecter avec SOAPUI.

    J'étais confronté à plusieurs difficultés car les informations sur le site de l'AIFE n'étaient pas cohérentes avec ce qui était à paramétrer :
    • Envoyer du compte technique et du mot de passe en HEADER alors qu'il faut utiliser une authentification et renseigner les champs Username et Password
    • Le certificat demandé en HEADER, faut-il le mettre dans l'entête ? sous quelle forme ?
    • Dans une des pages de site de Chorus qui présente l'utilisation de SOAP-UI, il est indiquer de paramétrer SSL Settings et de cocher "Client Authentication"... c'est pas nécessaire.


    Je les ai sollicité par le biais du portail (enregistrer un sollicitation) et après 2 ou 3 échanges de messages qui ne m'ont fait que peu progresser, ils m'ont appelé. Une discussion de 5-10mn avec eux m'a permis d'éclairer plusieurs points :
    - plusieurs éléments de lexique (je ne suis pas un expert de ces technologies, je me forme sur le tas, en me prenant des murs comme tout le monde ),
    - le fait de cocher la case "authenticate pre-emptively" (description à l'oral de la procédure dans le doc joint : en fait je n'étais pas loin du résultat, leurs explications m'ont permis de lever plusieurs verrous rapidement)

    Leur réponse a été TRES productive et efficace.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Points : 10
    Points
    10
    Par défaut
    Tu me sauves...
    J'ai suivi pas à pas toutes tes précos. (moi aussi j'avance un peu au jour le jour et en me paluchant la doc, j'avoues que les informations sont parfois contradictoires, notamment sur la partie authentification...)
    Bref, en ayant vraiment suivi ton PDF sur lequel, je n'avais finalement pas trop mal fait les choses, j'ai lancé la requête identique à la tienne et j'ai enfin eu un retour positif avec un JSON tout joli et pleins d'infos sur la facture requêtée.

    Là où, je ne comprends pas alors où le bas blesse, c'est pourquoi ma requête ultra simple suivante :
    https://chorus-pro.gouv.fr:5443/serv...nsulter/compte
    Où j'utilise donc la même authentification et la requête json contient un critère tout simple :
    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    { 
     "utilisateur": { 
     "adresseEmailConnexionUtilisateur":"GEST_FOURXXXXX@cpp2017.fr" } // où mes X sont la vraie adresse mail.
    }
    Là, j'ai un retour 500.... est-ce à dire qu'en fait, ils ne m'ont pas activé cet accès d'après toi ??
    Bon de toute façon, j'ai lancé 2 sollicitations depuis le début de la semaine ET normalement, ils vont m'appeler lundi. (ils sont débordés visiblement...)
    Donc suite au prochain épisode.

    Mais en tout cas, un grand merci pour tes infos qui sont vraiment d'une clarté totale ;-)

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 36
    Points
    36
    Par défaut Chorus Pro - Première connexion avec SOAPUI
    Tu ne vas pas le croire... le fichier WADL contient une erreur !

    Dans les paramètres de la requête dans la ressource, il suffit d'enlever le mot service/

    Ressource :
    /service-qualif/service/utilisateurs/consulter/compte
    devient :
    /service-qualif/utilisateurs/consulter/compte
    L'URL sur le site qui décrit de service est bonne.
    https://communaute.chorus-pro.gouv.f...-dcdab15c-cb8a

    Je ne saurai te dire ce qui m'a mis la puce à l'oreille .

    Ce qui m'a fait regarder de près les autres fichiers WADL: certains pointent sur le serveur de prod, d'autres sur le serveur de qualif.

    Pour moi, cela veut dire qu'il faut retoucher le WADL à partir des données du site de description du service avant de l'importer en fonction du site que l'on souhaite attaquer.
    ... sans prendre tout pour argent comptant : dans la description du JSON, il y un une accolade trop

    L'informatique est géniale !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Points : 10
    Points
    10
    Par défaut
    MY GOD ....
    In chorus, I trust....

    Je viens de faire les corrections et effectivement, ça marche beaucoup mieux...
    Donc point primordial à savoir : ne pas faire confiance aux WADL et vérifiez toutes les infos.
    Les gens de Chorus, via la sollicitation émise, me demandait si le port 5443 était ouvert "de mon côté" pour essayer de résoudre le souci... tu le crois ça ??

    Bon en tout cas, ça marche du coup.
    En l'état sur windev, je vois que tu as les fonctions qui te permettent d'intégrer le certificat dans la requête.
    Moi, je dois faire pareil sous 4D.... et là, je suis en train de me battre pour comprendre comment intégrer mon p12 dans l'entête de la requête et là, je suis encore loin du compte...

    Merci encore pour ton retour en tout cas ;-)

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 36
    Points
    36
    Par défaut
    D'après ce que je comprends, le certificat est chargé en mémoire par le logiciel et il est envoyé avec chaque charge envoyée en https : si quelqu'un a une explication plus précise, je suis preneur.

    On ne dit nulle part dans windev d'associer le certificat à l'envoi. On charge le certificat d'une part, on créé la requête d'autre part et en envoyant la requête, on brule un cierge...

    Je me suis pris des murs dans windev pendant quelques heures aussi !

    Il existe dans ce langage une fonction "RESTEnvoie" qui me semblait toute indiquée : elle traite le flux de réponse.
    Le problème est que ne sachant pas ce que fait la fonction qui transforme une structure en header, j'ai du revenir à une fonction plus basique pour mieux maîtriser l'envoi.

    Je suis notamment passé à un moment par whireshark pour m'assurer que le programme windev communiquait bien avec le serveur Chorus car j'avais une réponse le serveur de répond pas : l'erreur 500 que tu connais bien.
    En fait le serveur répondait mais pas ce qu'attendait la super-fonction de windev. Donc on les fonctions les plus basiques possibles basiques et on écrit sa propre fonction.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Points : 10
    Points
    10
    Par défaut
    Eh bien écoute, ça y est, j'arrive à communiquer avec l'API de Chorus depuis 4D grâce à l'aide d'un développeur 4D qui a pu comprendre le souci après plusieurs tentatives.
    En fait, de mon côté, 4D gère les authentifications clients via deux fichiers au format pem, le certificat lui même et la clé privée.
    Du coup, il fallait convertir le p12 en deux fichiers distincts, chose que j'avais faite mais surtout, il fallait enlever le mot de passe associé au fichier p12.
    C'est pas super sécure mais au final, ça fonctionne et en 5 lignes de codes, je peux interroger l'API.

    Maintenant, je dois m'attaquer à l'envoi de factures en PDF via la méthode Deposer PDF Facture mais maintenant que le pont existe, le reste "devrait" bien passer (j'utilise les guillemets et le conditionnel bien sûr)

    Suite au prochain épisode donc ;-)

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 36
    Points
    36
    Par défaut Chorus pro déposer une facture
    Bonjour

    Très content que tu ais réussi à faire le lien.

    Effectivement après cette étape, il reste à faire de la programmation plus traditionnelle.
    L'étape suivante est d’interroger plusieurs fois Chorus pour retrouver les identifiants des structures, des utilisateurs... car sans cela, il n'est pas possible d'obtenir la liste des facture de la structure ou de déposer une facture.

    Nous sommes partis dans un premier temps sur le dépôt d'un fichier puis le dépôt d'une facture que l'on rattache à ce fichier. Cela nous a semblé plus simple que le dépôt d'un flux.

    Pour l'instant, on a trouvé que le webservice Chorus est particulièrement rapide ... par rapport à l'IHM qui est saturée la moitié du temps.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Assistant Chef de Projet informatique
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant Chef de Projet informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Bonjour à tous les deux,

    Tout d'abord, merci de votre aide. Ce sujet m'a plus aidé que toute la documentation Chorus que je trouve beaucoup trop vaste (et avec des informations différentes suivant les documents).
    De mon coté, j'ai effectué la demande du certificat car nous possédons un pfx mais il faut un certificat client serveur. Je regardais également pour faire des tests mais sans certificat, je suis bloqué . Pour ma pars, je vais utiliser le programme avant tout pour l'envoi de manière automatique des factures en C#(encore à déterminer). En esperant ne pas trop galérer
    Bon courage,

    Cordialement

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 36
    Points
    36
    Par défaut Acces à Chorus
    Bonjour,


    Je confirme que sans certificat, il n'est pas possible de se connecter à Chorus par webservice.

    J'ai demandé un certificat de test à notre fournisseur de certificat comme cela est suggéré dans la doc Chorus. Il m'a indiqué ne pas en fournir (comme les autres fournisseurs que j'avais contacté). J'ai donc patienté puis j'ai utilisé mon certificat de prod pour la plateforme de test, sans aucune difficulté.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Assistant Chef de Projet informatique
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant Chef de Projet informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 10
    Points
    10
    Par défaut Accés à Chorus
    Bonjour,

    En effet, les fournisseurs m'ont fourni la même réponse concernant les certificats de test, je vais donc attendre que le certificat soit acheté. Il y a une notion que je ne comprends pas vraiment et cela concerne l'envoi du certificat dans le header de la requête (format varchar cela la document). As tu une idée de comment faire cela?

    Merci d'avance pour ta réponse,

    Cordialement

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 36
    Points
    36
    Par défaut Chorus Pro envoi certificat
    Cela correspond à nos échanges avec Guichez du 14/09.

    Dans SOAPUI, on charge le certificat dans les paramètres de l'application, puis dans l'application du paramètre "authenticate pre-emptively" (voir le document joint dans mon message du 14/09/2018 à 10h08 qui détaille la connexion par SOAPUI).

    Pour envoyer le certificat avec un autre outil. Les techniques utilisés dans Windev et dans 4D ne sont pas les mêmes. En ce qui me concerne, le certificat est installé dans le portefeuille des certificats du client, puis chargé en mémoire (éventuellement sélectionné parmi les certificats du portefeuille client). Lorsque la requête HTTPS est envoyée, le certificat est joint.

    Il te faut attendre le certificat avant de pouvoir tester, avec SOAPUI pour commencer.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Assistant Chef de Projet informatique
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant Chef de Projet informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Merci pour ta réponse.
    Je vais attendre d'avoir le certificat pour commencer les tests et suivrais ton tuto pour SOAPUI dans un premier temps afin de vérifier ma connexion avec Chorus.

    Bonne journée,
    Cordialement

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Points : 10
    Points
    10
    Par défaut
    Tiens, un nouvel arrivant dans la jungle qu'est Chorus.
    Effectivement, sans certificat, pas d'échange possible et comme pour zagvier, tous les fournisseurs de certificats contactés ne font pas de certif de test.
    Donc faut en acheter un.
    Concernant SOAP UI, regarde le pdf que zagvier avait fait, c'est exactement ce qu'il faut faire sans même regarder du côté de la doc chorus.

    Moi, j'utilise 4D mais dans les grandes lignes, c'est exactement pareil que sur windev, je met le certificat dans un dossier, j'identifie le dossier dans mes scripts d'envoi et 4D charge tout seul le certif en mémoire et fait en sorte l'échange se passe.

    Moi, je te pose une petite question zagvier :
    utilises tu la méthode "deposer pdf facture" et si oui, comment met tu tes champs pour que Chorus les identifie bien ?
    Car j'ai fait un test avec une fausse facture en y mettant un n° siret destinataire, un n° siret fournisseur, un code service, un bon d'engagement et les montants HT, TVA et TTC...
    J'ai eu un retour 200 comme quoi tout était bien passé et le json retour m'indique le bon montant retrouvé dans la facture, le bon n° siret fournisseur mais pas le code service client ni même le n° siret (code destinataire).
    C'est pareil pour toi ? Ou as tu bien nommé les zones pour que Chorus les retrouve bel et bien ?

    Je sais que derrière, avec la fonction "soumettre facture", je peux renseigner ces infos manquantes moi même dans le json d'envoi mais qui peut le plus peut le moins et comme nous sommes de grands fainéants, nous les informaticiens, j'aurais aimé que ces infos là, chorus les décrypte lui même dans l'envoi du PDF.

    Tu me suis ? ;-)

  16. #16
    Membre du Club
    Homme Profil pro
    Développeur ABAP
    Inscrit en
    Août 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur ABAP

    Informations forums :
    Inscription : Août 2012
    Messages : 55
    Points : 63
    Points
    63
    Par défaut Chorus - UBL - API
    Bonjour tout le monde,

    Je me joins à vous dans cette galère qu'est le développement d'un connecteur Chorus Pro en mode API!

    Pour la connexion en elle même, je n'ai plus vraiment de doutes:
    - il faut un certificat serveur de type client côté émetteur et charger sa clé publique dans Chorus pour ouvrir le mode API
    - en fonction de l'outil que vous utilisez le certificat doit-être dans un keystore ou indiqué d'une manière ou d'une autre pour la connexion
    - en en-tête de l'appel API il faut indiquer les données de l'utilisateur technique (basic authentication)

    Personnellement j'ai encore une erreur "handshake_failure" mais je pense que c'est lié à mon outil en particuler...

    J'ai un gros doute sur quel mode choisir: FSO1100A (IN_DP_E1_UBL_INVOICE) ou FSO1110A (IN_DP_E2_UBL_INVOICE_MIN).

    De ce que j'ai compris, pour le FSO1100A il faut générer un XML avec toutes les informations, pour le FSO1110A juste un XML avec les informations les plus pertinentes et la facture PDF attachée.
    Dans ce deuxième cas je n'ai pas encore compris quel est l'API adaptée et si on envoie le XML et le PDF en un seul appel ou s'il faut en faire deux...

    Comment vous y prenez vous pour convertir vos données en un fichier XML respectant la norme UBL 2.1? Vu les XSD, cela me semble assez complexe, même en terme de performance...

    Avez-vous déjà pu faire un cas productif? J'ai du mal à m'y retrouver dans le matelas créé. Je souhaite dans un premier temps juste faire un flux pour une facture simple, mais il y a des notions comme idUtilisateurCourant que je n'ai pas encore bien compris... Et dans le matelas pour les factures je ne vois pas des données de poste, de TVA, etc...

    Quelles sont les APIs que vous avez déjà pu utiliser de manière concluante et dans quel ordre les appelez vous?

    Merci d'avance pour vos retours!

    Cordialement,
    Marco Silva

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par guichez Voir le message
     
    Bonjour guichez,

    Nous avons bien créé plusieurs fonctions pour déposer des factures pour éviter d'avoir à traiter tous les problèmes en une seule fois.
    - recherche et stockage de l'identification de la structure
    - recherche et stockage des états/statuts des factures
    - recherche et stockage des états/statuts du moyen de payement de la structre...
    - dépot d'une facture
    - rattachement de cette facture à :
    - un "numéro de marché" (<50 caractères, obligatoire)
    - un "numéro d’engagement" (<50 caractères, obligatoire si notre client est l'état)
    - ajout de PJ complémentaires
    - lecture de l'état/statut des factures d'une struture...

    Comme précédemment, pour réaliser ceci, il a fallut croiser les informations des différentes sources de documentation de Chorus Pro (qui sont plus ou moins précises/mises à jour les unes et les autres) :
    https://communaute.chorus-pro.gouv.f...mentation/api/
    Specifications_Externes_Annexe_Services_API_V4.00.pdf

    Petite précision, la doc demande d'encoder le fichier PDF en base 64, avec Windev il vaut mieux éviter de le faire

    Citation Envoyé par marco_moes Voir le message
     
    Bonjour marco_moes,

    Dans notre équipe, nous sommes partis sur la voie chorus par API, il me semble que FSO1100A (IN_DP_E1_UBL_INVOICE) ou FSO1110A (IN_DP_E2_UBL_INVOICE_MIN) correspondent à l'accès par EDI.

    Dans ce cas, il le type de certificat nécessaire peut être différent :
    https://communaute.chorus-pro.gouv.f...-52c8b342-4fd9

    D'après cette doc, tu peux utiliser un certificat de type client si tu fais un accès EDI sFTP ou AS2 ?

    L’accès en mode EDI implique des travaux de raccordement préalables... cela ne nous enchantait pas

    Cette discussion pourra peut-être d’avantage t'aider : https://www.developpez.net/forums/d1...ml-format-ubl/

  18. #18
    Membre du Club
    Homme Profil pro
    Développeur ABAP
    Inscrit en
    Août 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur ABAP

    Informations forums :
    Inscription : Août 2012
    Messages : 55
    Points : 63
    Points
    63
    Par défaut
    Bonjour tout le monde,

    Je pense que je ne me trompe pas quand je dis que c'est le mode API. Voici un exemple donné dans la documentation pour le corps JSON d'un appel API pour "DeposerFluxFacture" /service-qualif/factures/deposer/flux :

    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    { 
      "idUtilisateurCourant" : 331, 
      "fichierFlux" : "PD94bWwg.......base64........dmVyc2o=", 
      "nomFichier" : "24372_GDP-CU-13-SXP-01-TST_01 DeposerFluxFacture - IN_DP_E1_UBL_INVOICE - XML avec signature.xml", 
      "syntaxeFlux" : "IN_DP_E1_UBL_INVOICE", 
      "avecSignature" : true 
    }

    et là ils parlent bien du flux IN_DP_E1_UBL_INVOICE. Je suppose que le fichier encodé en base64 est le XML complet au format UBL 2.1, l'idUtilisateurCourant est un ID qu'il faut lire avec un appel API en amont pour l'utilisateur qui dépose la facture, le nom du fichier devrait pour moi suivre une règle bien précise (p.e. FSO1100A_ABC123_ AAB1131100xxxxxxxxxxxxxxx) qui ici n'est pas respectée (peut-être que ce n'est obligatoire que pour le mode EDI) et le champ avecSignature je ne sais pas ce qu'il signifie.

    Pour l'UBL simplifié (flux IN_DP_E2_UBL_INVOICE_MIN), je ne sais même pas de quelle API il s'agit exactement et du format à respecter pour le corps JSON de l'appel, donc difficile de faire un choix entre les deux...

    C'est pour cela qui si vous êtes déjà en mode productif avec Chorus Pro via des APIs, je suis preneur de toutes vos suggestions.

    Cordialement,
    Marco Silva

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2018
    Messages : 2
    Points : 8
    Points
    8
    Par défaut Sus à CHORUS ! Connexion API
    Bonjour à tous,

    tout d'abord merci pour vos solutions, grâce à ce topic j'ai pu tester mon raccordement API sur SoapUI (ça fonctionne parfaitement) et commencer à le développer en JAVA.
    Cependant il semblerait que CHORUS n'accepte pas ma connexion, l'erreur retournée est la suivante:

    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    J'avais déjà eu cette erreur avec SoapUI car le certificat fournit n'était pas correct. Maintenant que le certificat est validé dans SoapUI (c'est le même que je charge en Java), je ne comprends pas d'où ça peut venir ...

    Voici le code JAVA:

    Code Java : 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
     
    			/*
    			 * Initialise SSL Context :  p12  certificate
    			 */
    			KeyStore ks = KeyStore.getInstance("PKCS12");
    			FileInputStream fis = new FileInputStream("PathToCertif.p12");
    			ks.load(fis, "CertifPassword".toCharArray());
    			KeyManagerFactory kmfs = KeyManagerFactory.getInstance("SunX509");
    			kmfs.init(ks, "CertifPassword".toCharArray());
    			SSLContext sc = SSLContext.getInstance("SSL");
    			sc.init(kmfs.getKeyManagers(), null, null);
     
    			HttpClient httpClient = HttpClients.custom()
    					.setSSLContext(sc)
    					.build();
     
    			/*
    			 * Initialise request :  URL  +  Json
    			 */
    			HttpPost request = new HttpPost("https://chorus-pro.gouv.fr:5443/service-qualif/factures/consulter/fournisseur");
     
    			request.addHeader("Content-Type",  "application/json");
    			request.addHeader("Username",  "MON_COMPTE_TECHNIQUE@cpp2017.fr");  // Technical Account + password
    			request.addHeader("Password", "**PASSWORD_COMPTE_TECHNIQUE**");
     
    			String jsonArg = "";
    			jsonArg+="{\n";
    			jsonArg+="\"idUtilisateurCourant\" : 26022802,\n";
    			jsonArg+="\"identifiantFactureCPP\" : 2497398 \n";
    			jsonArg+="}";
     
    			request.setEntity(new StringEntity(jsonArg,StandardCharsets.UTF_8));
     
    			HttpResponse resp = httpClient.execute(request);

    L'erreur ".SSLHandshakeException" se déclenche à la ligne 34 "httpClient.execute(request)" .


    Si quelqu'un a une idée, merci par avance !


    Signé, un novice en java

  20. #20
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2018
    Messages : 2
    Points : 8
    Points
    8
    Par défaut CHORUS JAVA
    Citation Envoyé par patoch95 Voir le message
    J'ai le même problème, est ce que tu aurais trouvé la solution ?

    Nous avons finalement réussi à appeler le service "chorus-pro.gouv.fr:5443/service-qualif/factures/consulter/fournisseur" en Java, ci dessous la solution, à adapter avec vos informations (certificat, compte technique ...)

    Code Java : 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
    69
     
                            System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
     
    			String KEYSTORE = "", TRUESTORE = "";
    			KEYSTORE = "MY_PATH_TO_CERTIF.p12";
    			final String KEYSTOREPASS = "PASSWORD_CERTIF";
    			TRUESTORE = "PATH_TO_cacert_FILE";
    			final String TRUESTOREPASS = "TRUSTSTORE_PASS_default:changeit";
     
     
    			String httpsURL = "https://chorus-pro.gouv.fr:5443/service-qualif/factures/consulter/fournisseur";   //your URL
     
    			URL url = new URL(null, httpsURL, new sun.net.www.protocol.https.Handler());
    			KeyStore ks = KeyStore.getInstance("pkcs12");
    			ks.load(new FileInputStream(KEYSTORE), KEYSTOREPASS.toCharArray());
    			KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
    			kmf.init(ks, KEYSTOREPASS.toCharArray());
    			SSLContext sslctx2 = SSLContext.getInstance("SSLv3");
    			sslctx2.init(kmf.getKeyManagers(), null, null);
    			KeyStore ksTrust = KeyStore.getInstance("JKS");
    			ksTrust.load(new FileInputStream(TRUESTORE), TRUESTOREPASS.toCharArray());
     
    			//TrustManager
    			TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
    			tmf.init(ksTrust);
    			System.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
    			System.setProperty("javax.net.ssl.trustStoreType", "jks");
    			System.setProperty("javax.net.ssl.keyStore", KEYSTORE);
    			System.setProperty("javax.net.ssl.trustStore", TRUESTORE);
    			System.setProperty("javax.net.debug", "ssl");
    			System.setProperty("javax.net.ssl.keyStorePassword", KEYSTOREPASS);
    			System.setProperty("javax.net.ssl.trustStorePassword", TRUESTOREPASS);
    			SecureRandom sc = null;
    			sslctx2.init(kmf.getKeyManagers(), tmf.getTrustManagers(), sc);
     
    			HttpsURLConnection.setDefaultSSLSocketFactory(sslctx2.getSocketFactory());
     
    			JSONObject idU = new JSONObject();
    			idU.put("idUtilisateurCourant", 10742); 
    			idU.put("identifiantFactureCPP", 2497398);
    			logger.info(idU);
     
    			String headerAuth = "TECHNICAL@USER" + ":" + "PASSWORD_TECHNICAL USER";
    			String bytesEncoded = Base64.getEncoder().encodeToString(headerAuth.getBytes("UTF-8"));
    			String sHeaderAuth = "Authorization: Basic " + bytesEncoded;
     
    			HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
     
    			//connection
    			con.setRequestMethod("POST");
    			con.setDoOutput(true);
    			con.setRequestProperty("Accept-Encoding", "gzip,deflate");
    			con.setRequestProperty("Content-Type", "application/json");
    			con.setRequestProperty("Authorization", "Basic " + bytesEncoded);
    			con.setRequestProperty("Host", "chorus-pro.gouv.fr:5443");
    			con.setRequestProperty("Connection", "Keep-Alive");
     
    			//stream
    			OutputStreamWriter os = new OutputStreamWriter(con.getOutputStream());
    			os.write(idU.toString());
    			os.flush();
    			String line = "";
    			BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
    			line = br.readLine();
    			while ((line = br.readLine()) != null) {
    				System.out.println(line);
    			}
    			br.close();
    			os.close();

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/06/2007, 18h56
  2. Réponses: 1
    Dernier message: 01/03/2007, 09h03
  3. Réponses: 4
    Dernier message: 03/01/2007, 21h56
  4. Réponses: 3
    Dernier message: 06/06/2006, 12h22
  5. [9i] COMMENT LANCER PRO-STOC par un fichier Alimente.BAT
    Par Etienne maheu dans le forum Oracle
    Réponses: 2
    Dernier message: 11/10/2005, 12h07

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