PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → utilisation API
utilisation API
Iniciado por Eric, 23,dic. 2019 18:07 - 3 respuestas
Miembro registrado
91 mensajes
Publicado el 23,diciembre 2019 - 18:07
Bonjour,

J'utilise (enfin... j'aimerais) l'api allmysms pour envoyer des sms.
J'ai une erreur dans la réponse du httprequete.

La réponse du httprequete est "err 400 bad request" "Your browser sent a invalid request"

si je récupère l'url d'envoi utilisée (grâce au pressepapier) et que je la colle dans firefox, ça fonctionne.
voir (ci-dessous) le code de construction et d'envoi de la requête. Je ne comprends pas où cela pêche.
sLogin est une chaîne
sLogin="societe"

sApiKey est une chaîne
sApiKey="maclef"

sUrl est une chaîne
sUrl ="https://api.allmysms.com/http/9.0/sendSms/"

sFlux est une chaîne

sReturnformat est une chaîne
sReturnformat="JSON"

// Paramètres Post
sParametrePost est une chaîne
sFlux=[
{ "DATA": {
"MESSAGE": "Bonjour, nous sommes très heureux de vous compter parmi nos clients",
"TPOA": "EXPED",
"LOWCOST": "0",
"DYNAMIC": "0",
"SMS": %1
{
"MOBILEPHONE": "MONTEL"
}
%2 }}
]

sFlux = ChaîneConstruit(sFlux,Caract(91),Caract(93))
sParametrePost = ChaîneConstruit("?login=%1&apiKey=%2&smsData=%3&returnformat=%4&mobile=MONTEL",sLogin, sApiKey, sFlux, sReturnformat)

sUrl += sParametrePost

VersPressePapier(surl)

// Requête
SI httpRequête(sUrl, "", "")=Vrai ALORS
Info(HTTPDonneRésultat(httpRésultat))
SINON
Erreur(ErreurInfo())
FIN


et ce que contient le presse papier :

//contenu du presse-papier
https://api.allmysms.com/http/9.0/sendSms/…": {"MESSAGE": "Bonjour, nous sommes très heureux de vous compter parmi nos clients!",
"TPOA": "expediteur",
"LOWCOST": "0",
"DYNAMIC": "0",
"SMS": [
{
"MOBILEPHONE": "montel"
}
]
}
}&returnformat=JSON&mobile=montel

Si quelqu'un a une idée ou vois une anerie dans mon code, je suis preneur.

Merci à vous

Eric
Miembro registrado
953 mensajes
Publicado el 24,diciembre 2019 - 09:46
bonjour Eric,

vous dites, lorsque je colle l'adresse utilisée sous FireFox çà fonctionne, il faut bien voir qu'une URL ne doit pas comporter certain caractères.
Firefox fera automatiquement une conversion des caractères 'interdit'.

sous Windev, vous avez la fonction URLEncode()

https://doc.pcsoft.fr/fr-FR/?3024040&name=URLEncode

je n'ai pas trop regardé votre code, mais dans un premier temps faite juste un petit test en ajoutant un URLEncode() sur votre variable sURL
juste avant de faire votre HTTPRequete()
Miembro registrado
1.640 mensajes
Publicado el 24,diciembre 2019 - 09:57
Salut !

J'utilise aussi AllMySms, voici le code de la classe que j'ai faite :

C_SMS est une Classe
PUBLIQUE
m_sMessage est une chaîne
//m_sMessage est une chaine sur 160
m_sExpediteur est une chaîne sur11
m_nCodeRetour est un entier
m_sMessageRetour est une chaîne
m_sDestinataire est une chaîne sur10
m_sRequeteEnvoyee est une chaîne,Sérialise=Faux

PRIVÉE
m_sApiKeyest une chaîne
m_sLoginest une chaîne


CONSTANT
//sFlux = "<DATA><MESSAGE><![CDATA[%1]]></MESSAGE><TPOA>%2</TPOA><SMS><MOBILEPHONE>%3</MOBILEPHONE></SMS></DATA>"
sFlux= [
{
"DATA": {
"MESSAGE": "%1",
"TPOA": "%2",
"SMS" : [
{
"MOBILEPHONE" : "%3"
}]
}
}

]

sParametres="login=%1&apiKey=%2&smsData=%3"
sUrl="https://api.allmysms.com/http/9.0/sendSms/"
FIN
FIN



// CONSTRUCTEUR
Procedure Constructeur(sApiKey est une chaîne,sLogin est une chaîne)
m_sApiKey=sApiKey
m_sLogin=sLogin


//////////////////////////////////////////////////////////////////////////////////////////////////////////////
Procedure Envoyer()
SI CheckDataFirst() ALORS
sTel est une chaîne=CheckTelFormat(m_sDestinataire)
SI VérifieExpressionRégulière(sTel,"0[6-7][0-9]{8,8}") ALORS
sRequete est une chaîne=ChaîneConstruit(sFlux,URLEncode(m_sMessage),m_sExpediteur,sTel)
sRequete=Remplace(sRequete,"&","%26")
sRequete=Remplace(sRequete,"?","%3F")
sParametrePost est une chaîne=ChaîneConstruit("login=%1&apiKey=%2&smsData=%3",m_sLogin,m_sApiKey,sRequete)
m_sRequeteEnvoyee =s ParametrePost
SI httpRequête(sUrl,"","",sParametrePost)=Vrai ALORS
m_nCodeRetour=1
m_sMessageRetour=HTTPDonneRésultat()
//AddLogs("EnvoyerSMS","Envoi SMS",m_sMessageRetour)
RENVOYER Vrai
SINON
m_nCodeRetour=0
m_sMessageRetour=ErreurInfo()
RENVOYER Faux
FIN

SINON
m_nCodeRetour= -1
m_sMessageRetour="N° de téléphone incorrect "+sTel
RENVOYER Faux
FIN

SINON
m_nCodeRetour= -1
m_sMessageRetour="Informations fournies incorrectes"
RENVOYER Faux
FIN



//////////////////////////////////////////////////////////////////////////////////////////////////////////////
Procedure PROTÉGÉE CheckDataFirst() :booléen
bRretour est un booléen=Vrai

RENVOYER bRretour


//////////////////////////////////////////////////////////////////////////////////////////////////////////////
Procedure CheckTelFormat(LOCAL sTel) :chaîne
sTel=Remplace(sTel," ","")
sTel=Remplace(sTel,"/","")
sTel=Remplace(sTel,".","")
sTel=Remplace(sTel,"_","")
sTel=Remplace(sTel,"+33","0")

RENVOYER sTel
Mensaje modificado, 24,diciembre 2019 - 10:01
Miembro registrado
91 mensajes
Publicado el 24,diciembre 2019 - 10:44
Merci à vous deux.
J'avais en effet un problème d'encodage du message.
Je vais regarder de plus près le code fourni gentiment par François; il m' a l'air plus précis que le mien.

Question à François : Utilises tu les webhook pour suivre les envois? si oui ecris avec webdev en awp ?

encore merci, j'ai pu avancer dans mon projet.
Cordialement,

Eric