PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Champ CARTE et Clé API Google
Champ CARTE et Clé API Google
Débuté par Soledad, 19 mai 2015 17:54 - 3 réponses
Posté le 19 mai 2015 - 17:54
Bonjour,

Je tente l'utilisation du champ CARTE.

J'ai compris qu'il faut au préalable avoir une clé Google
et s'authentifier à l'aide de CarteLicenceGgl(xxx)

Lorsque je suis sur la console développeur de Google je possède plusieurs possibilités dans Api et authentifications/Identifiants :
- Identifiant client de l'application Web
- Clé pour les applications de serveur
- Clé pour les applications de navigateur

J'ai essayé les 3 clés dans le CarteLicenceGgl(xxx)
Mais chaque fois que je tente le code suivant j'ai une erreur.

// Init Projet
CarteLicenceGgl(xxx)

// Init Fenêtre
adrAdresse est une Adresse
adrAdresse.Rue="2 rue Voltaire"
adrAdresse.CodePostal="75011"
adrAdresse.Ville="PARIS"
CarteAffichePosition(CARTE_Carte,adrAdresse)

L'erreur affichée est "The provided Google API key is invalid or this site is not Autorizied to use it".

Avez-vous une piste à me donner ?
Posté le 02 juin 2015 - 08:24
Un petit up !
Posté le 04 juin 2015 - 19:45
Bonjour,

Après avoir galéré une bonne journée avec Google sur sujet aussi sur le net voici la solution pour Windev :

Je vous donne les deux cas que j'ai rencontrés pour l'affichage de la carte :
1 - Cas gratuit : rien à faire aucune déclaration à faire au niveau de google utiles pour les tests d'intégration. même pas au niveau CarteLicenceGgl()

2 - Cas "Google Maps API for work" :
Alors là ne pas faire l'erreur d'utiliser la fonction CarteLicenceGgl() car cette fonction est fausse avec l'API pro
Quand vous prenez un abonnement chez Google pour Maps API for work ceux-ci vous communique deux choses utiles le "Client ID" et "Crypto Key" et non une clef API.
Il faut donc indiquer le "Client ID" à l'init du projet comme suivant
KeyGoogle est une chaîne = "ClientID"
CarteConfigureAPIGgl("client="+KeyGoogle)

Cette portion de code vous permettra d'obtenir l'affichage de la carte sans aucune erreurs, et d'y placer des marqueur etc...

Maintenant petite subtilité si vous souhaitez utiliser d'autres fonctions de l'API Google non implémenté type le géo-codage inversé.

1 - Cas gratuit : je vous donne la procédure
STAdress est une structure
sNum est une chaîne
sRue est une chaîne
sVille est une chaîne
sDepartement est une chaîne
sRegion est une chaîne
sPays est une chaîne
sCodePos est une chaîne
sCompose est un chaîne
FIN
gtabAdress est un tableau de STAdress


Procedure pl_geocode_reverse(sLalitude est une chaîne, sLongitude est une chaîne)
sUrlSigne est une chaîne
sUrlSigne = "https://maps.googleapis.com/maps/api/geocode/json?latlng="+sLalitude+","+sLongitude+"&sensor=false&language=fr"
FIN

SI TableauOccurrence(gtabAdress) > 0 ALORS
TableauSupprimeTout(gtabAdress)
FIN
TableauAjouteLigne(gtabAdress)
sResultJson est une chaîne
GeoInver est un Variant
bResLancement = HTTPRequête(sUrlSigne)
SI bResLancement ALORS
sResultJson = HTTPDonneRésultat()
FIN
GeoInver=JSONVersVariant(sResultJson)
POUR i = 1 A 10
SELON GeoInver.results[1].address_components[i].types[1]
CAS "street_number" // Numéro de rue
gtabAdress[1].sNum = GeoInver.results[1].address_components[i].long_name
CAS "route" // Nom de la rue
gtabAdress[1].sRue = GeoInver.results[1].address_components[i].long_name
CAS "locality" // Villes
gtabAdress[1].sVille = GeoInver.results[1].address_components[i].long_name
CAS "administrative_area_level_2" // Département
gtabAdress[1].sDepartement = GeoInver.results[1].address_components[i].long_name
CAS "administrative_area_level_1" // Région
gtabAdress[1].sRegion = GeoInver.results[1].address_components[i].long_name
CAS "country" // Pays
gtabAdress[1].sPays = GeoInver.results[1].address_components[i].long_name
CAS "postal_code" // CP
gtabAdress[1].sCodePos = GeoInver.results[1].address_components[i].long_name
FIN
FIN
gtabAdress[1].sCompose = GeoInver.results[1].formatted_address


2 - Cas "Google Maps API for work" :
La petite subtilité, il faut signer votre url pour l'envoyer à Google avec la "Crypto Key" fournis par Google.
En gros sur une url de ce type : "https://maps.googleapis.com/maps/api/geocode/json…", vous devez crypter tous ce qui est après "https://maps.googleapis.com/"

Voici la procédure pour signe l'url :
sUrl_a_Signer est l'url complète (https://maps.googleapis.com/maps/api/geocode/json…)
sPrivateKey est Crypto Key fournis par Google.

Procedure pl_google_signUrl(sUrl_a_Signer est une chaîne ANSI, sPrivateKey est une chaîne ANSI)
sSignature est une chaîne ANSI
sUrlGoogle est une chaîne ANSI
sDecodedKey est une chaîne ANSI

sUrlGoogle = URLExtraitChemin(sUrl_a_Signer,urlProtocole)
sUrlGoogle += "://"+URLExtraitChemin(sUrl_a_Signer,urlDomaine)
sPartie_Url_A_Signer est une chaîne ANSI = URLExtraitChemin(sUrl_a_Signer,urlCheminRessource + urlNomRessource + urlExtensionRessource) + ["?"] + URLExtraitChemin(sUrl_a_Signer,urlRequête)

// Décode la Clef Google
sDecodedKey = Remplace(sPrivateKey,"-","+")
sDecodedKey = Remplace(sDecodedKey,"_","/")
sDecodedKey = Décrypte (sDecodedKey,"",crypteAnsi,encodeBASE64)

// Crée la signature Google en encodant l'url sUrlPartToSign en HMAC SHA1, avec la clef décodé
bufSignature est un Buffer = HashChaîne(HA_HMAC_SHA_160,sPartie_Url_A_Signer,sDecodedKey)

// Encode la Signature Google
sSignature = Remplace(bufSignature,"+","-")
sSignature = Remplace(sSignature,"/","_")
sSignature = Crypte (sSignature,"",crypteAnsi,encodeBASE64)

RENVOYER sUrl_a_Signer + "&signature=" + sSignature


J'espère avoir été d'une utilité sur ce sujet

Hervé.
Posté le 05 juin 2015 - 10:00
Bonjour à tous petite erreur sur la procédure pl_google_signUrl, sur la dernière étapes je vous renvoie la bonne syntaxe.

Procedure pl_google_signUrl(sUrl_a_Signer est une chaîne ANSI, sPrivateKey est une chaîne ANSI)
sSignature est une chaîne ANSI
sUrlGoogle est une chaîne ANSI
sDecodedKey est une chaîne ANSI

sUrlGoogle = URLExtraitChemin(sUrl_a_Signer,urlProtocole)
sUrlGoogle += "://"+URLExtraitChemin(sUrl_a_Signer,urlDomaine)
sPartie_Url_A_Signer est une chaîne ANSI = URLExtraitChemin(sUrl_a_Signer,urlCheminRessource + urlNomRessource + urlExtensionRessource) + ["?"] + URLExtraitChemin(sUrl_a_Signer,urlRequête)

// Décode la Clef Google
sDecodedKey = Remplace(sPrivateKey,"-","+")
sDecodedKey = Remplace(sDecodedKey,"_","/")
sDecodedKey = Décrypte (sDecodedKey,"",crypteAnsi,encodeBASE64)

// Crée la signature Google en encodant l'url sUrlPartToSign en HMAC SHA1, avec la clef décodé
bufSignature est un Buffer = HashChaîne(HA_HMAC_SHA_160,sPartie_Url_A_Signer,sDecodedKey)

// Encode la Signature Google
sSignature = Crypte (bufSignature,"",crypteAnsi,encodeBASE64)
sSignature = Remplace(sSignature,"+","-")
sSignature = Remplace(sSignature,"/","_")

RENVOYER sUrl_a_Signer + "&signature=" + sSignature