|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
UTILISATION WEBSERVICE API REST |
Débuté par ROMAIN, 18 avr. 2017 11:56 - 10 réponses |
| |
| | | |
|
| |
Membre enregistré 6 messages |
|
Posté le 18 avril 2017 - 11:56 |
Bonjour à tous,
Je tourne en rond sur l'utilisation d'un Webservice mis à disposition par l'un de nos partenaires.
Vous trouverez ci-dessous un exemple d'appel à ce webservice (ce code ne fonctionne pas) :
MaReq est une restRequête LaReponse est une restRéponse sParametres est une chaîne
MaReq.URL = "https://app.transfertbanque.fr/releves/CFONB" MaReq.Méthode = httpPost MaReq..ContentType = "application/json"
sParametres = [ { "Login": "mail_utilisateur", "Password": "mdp_utilisateur", "DateDebut": "01012017", "DateFin": "31012017", "NonTraitesSeulement": "0" } ]
MaReq.Contenu = ChaîneVersUTF8(sParametres)
LaReponse = RESTEnvoie(MaReq)
SI ErreurDétectée ALORS Erreur(ErreurInfo(errComplet)) SINON Info(LaReponse..Contenu) FIN
Je n'arrive pas à passer les 5 paramètres nécessaires à savoir :
- Login (chaine) - Password (chaine) - DateDebut (chaine) - DateFin (chaine) - NonTraitesSeulement (chaine)
Vous trouverez ci-dessous un exemple d'appel à ce webservice fonctionnel mais pas en windev :
private void Generer(string Login, string Password, string Debut, string Fin, string NonTraitesSeulement) { IRestResponse response = null; var client = new RestClient(System.Configuration.ConfigurationManager.AppSettings["url"].ToString() +"/CFONB");
var request = new RestRequest(Method.POST); request.AddParameter("Login", Login); request.AddParameter("Password", Password); request.AddParameter("Debut", Debut); // facultatif si on veut tout ce qui est traité jusqu'à la date de fin request.AddParameter("Fin", Fin); request.AddParameter("NonTraitesSeulement", NonTraitesSeulement); // facultatif si on veut tout ce qui est traité jusqu'à la date de fin
response = client.Execute(request); }
Pouvez-vous m'aider à trouver ce qui ne va pas mon code Windev ?
Merci d'avance pour votre aide !
Romain |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 574 messages Popularité : +222 (260 votes) |
|
Posté le 18 avril 2017 - 12:41 |
Bonjour,
Tu as la doc de ton WS ? Es-tu sur que tu envoies les bons paramètres ? Quelle est la réponse du WS ?
-- Cordialement,
Philippe SAINT-BERTIN Géode Informatique |
| |
| |
| | | |
|
| | |
| |
Posté le 18 avril 2017 - 16:53 |
Qu'est ce qui ne marche pas? Avec ton code, le service répond bien '200':
LaReponse <httpRéponse> Contenu {"File":"","Error":1} X EntêteBrut HTTP/1.1 200 OK<RC>Cache-Control: no-cache<RC>Pragma: no-cache<RC>Content-Type: application/json; charset=utf-8<RC>Expires: -1<RC>Server: Microsoft-IIS/8.5<RC>X-AspNet-Version: 4.0.30319<RC>X-Powered-By: ASP.NET<RC>Strict-Transport-Security: max-age=15552001; includeSubDomains<RC>Date: Tue, 18 Apr 2017 12:27:39 GMT<RC>Content-Length: 21<RC><RC> X CodeEtat 200 X DescriptionCodeEtat OK X ContentType application/json; charset=utf-8 X
De mon coté j'utilise les variants, beaucoup plus facile à manipuler qu'un JSON construit à la main. Ce qui donnerait dans ton cas:
vCFONB est un variant vCFONB.Login="mail_utilisateur", vCFONB.Password="mdp_utilisateur", vCFONB.DateDebut="01012017", vCFONB.DateFin="31012017", vCFONB.NonTraitesSeulement=0
MaReq.Contenu=VariantVersJSON(vCFONB)
et au retour, JSONVersVariant afin de pouvoir utiliser:
vResponse.File vResponse.Error ... vResponse.OtherFields |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 6 messages |
|
Posté le 18 avril 2017 - 17:44 |
Bonjour,
Je vous remercie pour vos réponses.
Tout compte fait, mon code était correcte. C'était simplement la doc de l'API qui mentionnait les paramètres "DateDebut" et "DateFin" alors que les bon paramètres étaient "Debut" et "Fin"...
Merci Lionel pour l'utilisation des variants, c'est en effet plus simple et surtout plus clair.
Vous trouverez ci-dessous mon code :
Procedure gpGetReleveCFONB(p_sLogin est une chaîne, p_sPassword est une chaîne, p_dDebut est une Date = "", p_dFin est une Date = "", p_bNonTraitesSeulement est un booléen = Faux)
MaRequeteRest est une restRequête LaReponseRest est une restRéponse vParametresRequete est un Variant vReponse est un Variant
sCFONB est une chaîne
MaRequeteRest.URL = "https://app.transfertbanque.fr/releves/CFONB" MaRequeteRest.ContentType = "application/json" MaRequeteRest.Méthode = httpPost
vParametresRequete.Login = p_sLogin vParametresRequete.Password = p_sPassword
SI p_dDebut <> Null ALORS vParametresRequete.Debut = DateVersChaîne(p_dDebut, "JJMMAAAA") FIN
SI p_dFin <> Null ALORS vParametresRequete.Fin = DateVersChaîne(p_dFin, "JJMMAAAA") FIN
SI p_bNonTraitesSeulement ALORS vParametresRequete.NonTraitesSeulement = "1" SINON vParametresRequete.NonTraitesSeulement = "0" FIN
MaRequeteRest.Contenu = VariantVersJSON(vParametresRequete)
LaReponseRest = RESTEnvoie(MaRequeteRest)
SI ErreurDétectée ALORS Erreur(HErreurInfo(hErrComplet))
SINON
vReponse = JSONVersVariant(LaReponseRest.Contenu) SELON vReponse.Error CAS 0 sCFONB = vReponse.File CAS 1 Erreur("Erreur d'authentification") CAS 2 Erreur("Identifiants non autorisés à utiliser le service") AUTRE CAS Erreur("Erreur non identifiée") FIN
FIN
RENVOYER sCFONB
Bon dev à vous.
Romain |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 20 messages Popularité : +1 (1 vote) |
|
Posté le 19 avril 2017 - 10:22 |
Bonjour à tout
J'ai la même situation que Romain mais je ne peux pas obtenir un bon résultat. Chaque fois que j'obtiens l'erreur: 500 Internal Server Erreur
Mon code est:
maReq est un restRequête LaReponse est un restRéponse
sReqContent est un Variant sReqContent.cui = 5129635 sReqContent.data = "2017-03-15"
maReq.Méthode = httpPost maReq.Contenu = VariantVersJSON(sReqContent)
maReq.ContentType = "application/json" maReq.URL = "https://webservicesp.anaf.ro:443/PlatitorTvaRest/api/v1/ws/tva"
LaReponse = RESTEnvoie(maReq)
SI ErreurDétectée ALORS Erreur(ErreurInfo(errComplet)) SINON Info(LaReponse.Contenu) FIN
Et la réponse est:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <style> body{ margin:0px; padding:0px; background-color: #ffffff; color:#000; font-family:Arial,Verdana,Helvetica,Tahoma,sans-serif; } #content { font-size: 1em; margin-left: 1em; margin-right: 1em; padding: 1em; } h4.basichead { font-family:Arial,Verdana,Helvetica,Tahoma,sans-serif; } p { padding-top: .5em; } ul { line-height: 1.3em; } a:link { color: #c00000 } a:visited { color: #c00000 } #page { border: 7px; padding: 7px } #box { margin: 0; } #title { font-family:Arial,Verdana,Helvetica,Tahoma,sans-serif; font-size:24px; font-weight: normal; color:#274a71; padding-bottom:6px; } #error { colory: #c00004; margin-bottom: 10px; } #code { font-family: monospace; font-size: 8pt; } #stack { margin-left: 30px; } </style> </head>
<body>
<div id="content"> <div id="page"> <div id="box">
<div id="error"> Exception thrown by application class 'org.apache.wink.server.internal.RequestProcessor.handleRequest:195' </div> <div id="code"> javax.servlet.ServletException: org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.List out of START_OBJECT token at [Source: com.ibm.ws.webcontainer.srt.SRTInputStream@6fa71721; line: 1, column: 1]<br> <div id="stack">at org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:195)<br>at org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:124)<br>at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)<br>at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1239)<br>at [internal classes]<br> </div>Caused by: org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.List out of START_OBJECT token at [Source: com.ibm.ws.webcontainer.srt.SRTInputStream@6fa71721; line: 1, column: 1]<br> <div id="stack">at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:160)<br>at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:194)<br>at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:103)<br>at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:93)<br>at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)<br>at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:1961)<br>at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:889)<br>at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:410)<br>at org.apache.wink.providers.jackson.WinkJacksonJaxbJsonProvider.readFrom(WinkJacksonJaxbJsonProvider.java:106)<br>at org.apache.wink.server.internal.registry.ServerInjectableFactory$EntityParam.getValue(ServerInjectableFactory.java:198)<br>at org.apache.wink.common.internal.registry.InjectableFactory.instantiate(InjectableFactory.java:68)<br>at org.apache.wink.server.internal.handlers.CreateInvocationParametersHandler.handleRequest(CreateInvocationParametersHandler.java:44)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)<br>at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)<br>at org.apache.wink.server.handlers.AbstractHandler.handleRequest(AbstractHandler.java:34)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)<br>at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)<br>at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleResourceMethod(FindResourceMethodHandler.java:151)<br>at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleRequest(FindResourceMethodHandler.java:65)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)<br>at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)<br>at org.apache.wink.server.internal.handlers.FindRootResourceHandler.handleRequest(FindRootResourceHandler.java:95)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)<br>at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)<br>at org.apache.wink.server.internal.handlers.HeadMethodHandler.handleRequest(HeadMethodHandler.java:53)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)<br>at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)<br>at org.apache.wink.server.internal.handlers.OptionsMethodWADLHandler.handleRequest(OptionsMethodWADLHandler.java:51)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)<br>at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)<br>at org.apache.wink.server.internal.handlers.SearchResultHandler.handleRequest(SearchResultHandler.java:33)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)<br>at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)<br>at org.apache.wink.server.internal.log.ResourceInvocation.handleRequest(ResourceInvocation.java:92)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)<br>at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)<br>at org.apache.wink.server.internal.log.Requests.handleRequest(Requests.java:76)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)<br>at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)<br>at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)<br>at org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:60)<br>at org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:207)<br>at org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:154)<br>... 4 more<br> </div> </div> </div> </div> </div> </div>
</body>
Avez-vous une suggestion?
Je vous remercie
-- Issa Bej |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 574 messages Popularité : +222 (260 votes) |
|
Posté le 19 avril 2017 - 11:33 |
Bonjour,
Que contient ta variable avant envoi ? Toutes les données sont-elles remplies ? Ton json est-il correct avant envoi ?
-- Cordialement,
Philippe SAINT-BERTIN Géode Informatique |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 messages |
|
Posté le 19 avril 2017 - 12:23 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 20 messages Popularité : +1 (1 vote) |
|
Posté le 19 avril 2017 - 13:33 |
Bonjour Philippe, Leurs spécifications sont très simplistes
Send request containing the data processed at the following address: Web Service URL (POST) : https://webservicesp.anaf.ro:/PlatitorTvaRest/api/v1/ws/tva The request must be sent POST and the format is similar to the example below: Post Body: [ { "cui": _Numar_, "data":"_Data interogarii_" }, { "cui": _Numar_, "data":"_Data interogarii_" } ] example:
Content-Type: application/json [ { "cui": 1234, "data": "2015-02-14" }, { "cui": 5678, "data": "2015-02-14" } ]
Merci beaucoup,
-- Issa Bej |
| |
| |
| | | |
|
| | |
| |
Posté le 19 avril 2017 - 14:35 |
Bonour Issa,
L'API attend un tableau, donc dans ton cas:
vReqContent est un Variant vReqContent[1].cui = 5129635 vReqContent[1].data = "2017-03-15"
et tu peux le cas échéant créer d'autre itération comme dans l'exemple fourni:
vReqContent[2].cui = nValue2 vReqContent[2].data = sValue2 vReqContent[3].cui = nValue3 vReqContent[3].data = sValue3 etc... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 20 messages Popularité : +1 (1 vote) |
|
Posté le 19 avril 2017 - 15:33 |
Merci Lionel
Il ne fonctionne toujours pas Le code d'erreur est 415 et la description de l'erreur est "Unsupported Media Type" même si le contenu semble être correct
maReq.Contenu = [ { "cui":5129635, "data":"2017-03-15" }, { "cui":11307036, "data":"2017-03-15" } ] OU maReq.Contenu = [ { "cui":5129635, "data":"2017-03-15" } ]
-- Issa Bej |
| |
| |
| | | |
|
| | |
| |
Posté le 07 décembre 2019 - 10:32 |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|