|
Débuté par Cyril, 20 juil. 2018 11:36 - 10 réponses |
| |
| | | |
|
| |
Posté le 20 juillet 2018 - 11:36 |
RE bonjour Un add on à ma demande d'hier (encore merci Philipe pour m'avoir mis sur la voie). Je n'ai plus de soucis avec mes requêtes GET mais je stoppe sur les requêtes POST.
Je vous joint mon code PHP POST .. Ainsi que ma transcription en WinDev, qui ne fonctionne pas. Message d'erreur de l'API "Variable processJson not set".
Merci d'avance pour votre aide
Procedure PostFile(ValToken) PostFile est une httpRequête PostResult est une httpRéponse
PostFile..AgentUtilisateur = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0" PostFile..Méthode = httpPost
PostFile..URL ="https://www.ocrmobile.cloud/public/api/process/"+ValToken PostFile..Entête["RETURNTRANSFER"] = "1" PostFile..Utilisateur=ApiId PostFile..MotDePasse=ApiPassword PostFile..Entête["my_file"]="c:\temp\invoice.pdf" PostFile..Entête["processjson"]="{supportId:2,taxes:[2.1,5.5,10,20],task:scan,country:FR,language:FR,fileName:invoice.pdf,type:pdf,srcCount:1,useCrop:true}" PostFile..ContentType="{supportId:2,taxes:[2.1,5.5,10,20],task:scan,country:FR,language:FR,fileName:invoice.pdf,type:pdf,srcCount:1,useCrop:true}" PostResult = HTTPEnvoie(PostFile) Info(PostResult..Contenu)
LE CODE PHP curl_setopt($curlHandle, CURLOPT_URL, $urlTreat); curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curlHandle, CURLOPT_USERPWD, "$apiId:$apiPassword"); curl_setopt($curlHandle, CURLOPT_POST, 1); curl_setopt($curlHandle, CURLOPT_USERAGENT, $userAgent); curl_setopt($curlHandle, CURLOPT_FAILONERROR, True);
$post_array = array(); $post_array["my_file"] = "@".$filePath; $post_array["processJson"] = '{"supportId":2,"taxes":[2.1,5.5,10,20],"task":"scan","country":"FR","language":"FR", "fileName":"'.$fileName.'","type":"img","srcCount":1,"useCrop":true}';
curl_setopt($curlHandle, CURLOPT_POSTFIELDS, $post_array); |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 940 messages Popularité : +66 (68 votes) |
|
Posté le 20 juillet 2018 - 12:02 |
bonjour,
je pense qu'il faut simplement utiliser la propriété ..Contenu de votre HTTPRequete et non pas ContentType qui lui défini le type de contenu ( qui dans votre cas semble être "application/json" )
à tester...
bon dèv Message modifié, 20 juillet 2018 - 12:02 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 55 messages Popularité : +3 (3 votes) |
|
Posté le 20 juillet 2018 - 12:34 |
Bonjour Christophe Merci du retour. J'ai bien modifié comme indiqué (voir code ci-dessous). Toujours la même erreur.
Comme je l'indiqué hier dans mon premier post, je travaille depuis des années sur PHP et C#, j'ai découvert Windev23 il y a quelques mois c'est vraiment top comme outil mais je (nous en fait car nous sommes 3) galère pas mal pour m'habituer à la syntaxe autour des connexions API, WebService .. Mais cela va venir !
PostFile..AgentUtilisateur = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0" PostFile..Méthode = httpPost
PostFile..URL ="https://www.ocrmobile.cloud/public/api/process/"+ValToken PostFile..Entête["RETURNTRANSFER"] = "1" PostFile..Utilisateur=ApiId PostFile..MotDePasse=ApiPassword PostFile..Entête["my_file"]="c:\temp\invoice.pdf" PostFile..Contenu="{supportId:2,taxes:[2.1,5.5,10,20],task:scan,country:FR,language:FR,fileName:invoice.pdf,type:pdf,srcCount:1,useCrop:true}" PostFile..ContentType=typeMimeJSON PostResult = HTTPEnvoie(PostFile) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 574 messages Popularité : +222 (260 votes) |
|
Posté le 20 juillet 2018 - 15:24 |
Bonjour, Ton JSON est faux tout simplement. De la même manière qu'en php, tes membres doivent être encadré par des doubles quotes ains que tes valeurs de type chaine.
Il faut faire ça
sContent est une chaîne=[ {"supportId":2,"taxes":[2.1,5.5,10,20],"task":"scan","country":"FR","language":"FR","fileName":"invoice.pdf","type":"pdf","srcCount":1,"useCrop":True} ] PostFile..Contenu=sContent
C'est saisi à la volée, mais l'idée est là.
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 55 messages Popularité : +3 (3 votes) |
|
Posté le 20 juillet 2018 - 15:27 |
Re bonjour ... J'avance et merci pour vos conseils mais j'ai encore beaucoup de mal avec la syntaxe WinDev. Voici à présent ce que j'obtiens en retour de ma requête POST... Si vous pouvez me faire un troubleshooting ... Je commence à tourner en rond ! Mille merci J'ai ajouté mon code et le printscreen en retour de l'API
Procedure PostFiles(ValToken) AnsiChaine est une chaîne ANSI = [ processJson= {"supportId":2, "taxes":[2.1,5.5,10,20], "task":"scan", "country":"FR", "language":"FR", "fileName":"c:\temp\invoice.pdf", "type":"pdf", "srcCount":1, "useCrop":True} ] JsonChaine est un Buffer = ChaîneVersUTF8(AnsiChaine)
PostFile est une httpRequête PostResult est une httpRéponse
PostFile..AgentUtilisateur = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0" PostFile..Méthode = httpPost
PostFile..URL ="https://www.ocrmobile.cloud/public/api/process/"+ValToken PostFile..Entête["RETURNTRANSFER"] = "1" PostFile..Utilisateur=ApiId PostFile..MotDePasse=ApiPassword PostFile..Entête["my_file"]="c:\temp\invoice.pdf" PostFile..Contenu=JsonChaine
PostResult = HTTPEnvoie(PostFile) Info(PostResult..Contenu) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 948 messages Popularité : +30 (92 votes) |
|
Posté le 20 juillet 2018 - 15:38 |
Coucou,
AnsiChaine est une chaîne ANSI = [ processJson= {"supportId":2, "taxes":[2.1,5.5,10,20], "task":"scan", "country":"FR", "language":"FR", "fileName":"c:\temp\invoice.pdf", "type":"pdf", "srcCount":1, "useCrop":True} ]
VariantVersJSON
https://doc.pcsoft.fr/?1000021051
Consommer un webservice REST/JSON depuis une application WINDEV
https://www.youtube.com/watch?v=LTVZC2jOV3U
-- In üs we trust - #92iMessage modifié, 20 juillet 2018 - 15:40 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 55 messages Popularité : +3 (3 votes) |
|
Posté le 20 juillet 2018 - 16:41 |
Merci Charly J'ai appliqué la modif proposé, même erreur. Si vous le désirez je peux vois envoyer mes ID pour tester (ainsi que le code) via email. En // je vais regarder la vidéo proposée. Ces galères me rappelle mes débuts en PHP ... Cela me rajeunis !! Cdlt |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 948 messages Popularité : +30 (92 votes) |
|
Posté le 20 juillet 2018 - 17:12 |
Coucou,
Envoie toute les infos nécésaire, je te le fait ^^
#Promo #Friday
charly.cando.anywhere@gmail.com
-- In üs we trust - #92iMessage modifié, 20 juillet 2018 - 17:13 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 55 messages Popularité : +3 (3 votes) |
|
Posté le 20 juillet 2018 - 17:27 |
Merci pour la promo du Vendredi ! Je t'envoie les infos |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 948 messages Popularité : +30 (92 votes) |
|
Posté le 21 juillet 2018 - 14:40 |
Coucou,
COCRMobile est une Classe GLOBAL PUBLIC CONSTANT URL = "https://www.ocrmobile.cloud/public/api/" AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0" FIN LOCAL PRIVÉE m_arrKeys est un tableau de chaîne m_sUAID est une chaîne m_sPassword est une chaîne m_sToken est une chaîne
m_xRequest est un restRequest m_xResponse est un restRéponse FIN
Procedure PUBLIC Authenticate(): boolean
ErreurChangeParamètre(epGotoCasErreur) ExceptionChangeParamètre(epGotoCasException)
RETOUR = Faux
VariableRAZ(:m_xRequest) VariableRAZ (:m_xResponse) :Token = ""
AVEC :Request ..URL = ::URL + "authenticate/" + TableauVersChaîne(object:Keys, "::") ..Méthode = httpGet ..AgentUtilisateur = ::AGENT ..Utilisateur = object:UAID ..MotDePasse = object:Password FIN
:m_xResponse = RESTEnvoie(:m_xRequest) _vResponse est un Variant = JSONVersVariant(:Response.Contenu)
SELON Vrai CAS _vResponse.access = "Faux" ErreurDéclenche(1, "authenticate error : [%VariantVersJSON(_vResponse)%]") RENVOYER Faux AUTRE CAS FIN
:Token = _vResponse.token
RENVOYER Vrai
CAS ERREUR: ErreurPropage() CAS EXCEPTION: ExceptionPropage() FIN:
VariableRAZ(:m_xRequest) VariableRAZ (:m_xResponse)
Procedure PUBLIC ExecuteRequest(_sFilename est une chaîne): chaîne
ErreurChangeParamètre(epGotoCasErreur) ExceptionChangeParamètre(epGotoCasException)
RETOUR = ""
SELON Vrai CAS PAS fFichierExiste(_sFilename) ErreurDéclenche(1, "[%_sFilename%] not found.") RENVOYER "" AUTRE CAS FIN
_vPost est un Variant
AVEC _vPost .supportId = 1 .taxes = [2.1,5.5,10,20] .task = "scan" .language = "FR" .country = "FR" .fileName = fExtractPath(_sFilename, fFileName) .type = "img" .srcCount = "1" .useCrop = True FIN _sUIDForm est une chaîne = DonneGUID(guidBrut) HTTPCréeFormulaire(_sUIDForm) HTTPAjouteParamètre(_sUIDForm, "processJson", VariantVersJSON(_vPost)) HTTPAjouteFichier(_sUIDForm, "my_file", _sFilename) HTTPEnvoieFormulaire(_sUIDForm, ... ::URL + "process/" + objet:Token, ... httpPost, ... ::AGENT, ... "", ... typeMimeFormulaireMultiPartie, ... :UAID, ... :Password ... ) _vResponse est un Variant = JSONToVariant(HTTPDonneRésultat(httpRésultat))
SELON Vrai CAS _vResponse.access = "Faux" ErreurDéclenche(1, "response false [%VariantVersJSON(_vResponse)%]") RENVOYER "" AUTRE CAS FIN
_IDProcess est une chaîne = _vResponse.processId
VariableRAZ(:m_xRequest) AVEC :Request ..URL = ::URL + "getResult/[%_IDProcess%]/[%objet:Token%]" ..Méthode = httpGet ..AgentUtilisateur = ::AGENT ..Utilisateur = object:UAID ..MotDePasse = object:Password FIN
BOUCLE VariableRAZ(:m_xResponse) :m_xResponse = RESTEnvoie(:m_xRequest) _vResponse = JSONVersVariant(:Response.Contenu) AVEC _vResponse SELON Vrai CAS .status = "todo" _OU_ .status = "inProgress" Multitâche(-1) CONTINUE CAS PAS .access ErreurDéclenche(1, "No access : [%:Response.Contenu%]") RENVOYER "" CAS ChaîneCommencePar(.status, "failed") ErreurDéclenche(1, "treatment fail [%:Response.Contenu%]") RENVOYER "" CAS .status = "ok" RENVOYER VariantVersJSON(.result) AUTRE CAS ErreurDéclenche(1, "Unknown response: [%:Response.Contenu%]") RENVOYER "" FIN FIN FIN
RENVOYER ""
CAS ERREUR: ErreurPropage() CAS EXCEPTION: ExceptionPropage() FIN:
VariableRAZ(:m_xRequest) VariableRAZ (:m_xResponse)
ErreurChangeParamètre(epGotoCasErreur) ExceptionChangeParamètre(epGotoCasException) _sFilename est une chaîne = TonFichier _sResult est une chaîne _clCOCRMobile est un COCRMobile AVEC _clCOCRMobile :Keys = ["", ""] :UAID = "" :Password = "" :Authenticate() _sResult = :ExecuteRequest(_sFilename) FIN
Info(_sResult)
CAS ERREUR: Erreur(ErreurInfo(errComplet)) CAS EXCEPTION: Erreur(ExceptionInfo(errComplet))
#WLoodies #LaPiraterieNEstJamaisFinie #Gotham #Sale #92i
-- In üs we trust - #92i
Message modifié, 21 juillet 2018 - 14:44 |
| |
| |
| | | |
|
| | |
| |
Posté le 23 juillet 2018 - 13:13 |
Un grand merci à Charly qui m'a envoyé ce code durant le WE !! |
| |
| |
| | | |
|
| | | | |
| | |
|