PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Amazon MWS...
Amazon MWS...
Débuté par Chris, 02 sep. 2014 16:22 - 8 réponses
Posté le 02 septembre 2014 - 16:22
bonjour,
j'ai différents soucis avec Amazon MWS, voici le 1er d'entre eux...
Je suis censé convertir en base64 HMAC, par exemple la string suivante :

eedda4de2eaf8eb65434cc5cbc476c8fb98498ee3f4e19be4493d95efa2b9c3a

Le résultat, selon le scratchpad d'Amazon doit être :

7t2k3i6vjrZUNMxcvEdsj7mEmO4/Thm+RJPZXvornDo=

Or rien de tel, lors de mes différents essais, j'obtiens toujours quelque chose de différent.
mon code (mais j'ai essayé différentes variantes, idem) :

sResultat64 est une chaîne= Crypte("eedda4de2eaf8eb65434cc5cbc476c8fb98498ee3f4e19be4493d95efa2b9c3a","",encodeBASE64)

Quelque chose m'échappe complétement visiblement...

Merci de votre aide

Christophe
Membre enregistré
505 messages
Popularité : +18 (18 votes)
Posté le 02 septembre 2014 - 23:21
Bonjour Chris,

Dans ton code il manque le hachage,
comme ceci par exemple:
sTexte est une chaîne = "eedda4de2eaf8eb65434cc5cbc476c8fb98498ee3f4e19be4493d95efa2b9c3a"
sHash est une chaîne = HashChaîne(HA_SHA_256,sTexte) // HMAC-SHA256
sResultat64 est une chaîne= Crypte(sHash,"",crypteAucun+compresseAucun,encodeBASE64)


(ou encore HA_SHA_160 pour HMAC-SHA1)

Mais impossible de t'aider plus avant car apparemment tu ne donnes pas tous les éléments. :(

--
Pour me contacter par courrier électronique, cliquez sur le lien ci-dessous (protection antispam): http://cerbermail.com/…
Membre enregistré
505 messages
Popularité : +18 (18 votes)
Posté le 02 septembre 2014 - 23:47
En fait, le hachage avec algorithme HMAC suppose d'utiliser une clé.

http://doc.pcsoft.fr/fr-FR/index.awp?1000007111

Calculer un hash avec authentification de message (algorithme HMAC)
<Résultat> = HashChaîne(<Type d'algorithme> , <Chaîne> , <Clé secrète>)

le paramètre <Type d'algorithme> qui t'intéresse est probablement HA_HMAC_SHA_256 ou HA_HMAC_SHA_160.

--
Pour me contacter par courrier électronique, cliquez sur le lien ci-dessous (protection antispam): http://cerbermail.com/…
Posté le 03 septembre 2014 - 09:57
Eh bien en fait, la 1ère chaine dont je parlais est le hachage d'une autre chaine (c'est mon 2nd problème ca, on y reviendra peut être...), mais déjà j'essaye de résoudre le 1er problème (oui je pars de la fin en fait)

du coup, le hashage SHA 256 HMAC de ma chaine initiale (requête POST avec paramètres) donne (avec la clé secrète) :

eedda4de2eaf8eb65434cc5cbc476c8fb98498ee3f4e19be4493d95efa2b9c3a

Selon les procédures Amazon, il faut convertir ce résultat en base 64. Et là, je rencontre déjà un os...
Impossible d'obtenir le même résultat qu'eux...
Je ne pense pas qu'un autre hashage soit nécessaire pour la base 64 ? si ???

j'ai fait d'autres essais, rien n'y fait :(
Membre enregistré
505 messages
Popularité : +18 (18 votes)
Posté le 03 septembre 2014 - 10:57
Bonjour,
Chris a écrit :

du coup, le hashage SHA 256 HMAC de ma chaine initiale (requête POST avec paramètres) donne (avec la clé secrète) :

eedda4de2eaf8eb65434cc5cbc476c8fb98498ee3f4e19be4493d95efa2b9c3a

Ici tu nous donnes une chaîne de caractères qui est la représentation hexadécimale du hash. :o
Alors c'est certain que tu n'arriveras pas au bon résultat si tu appliques l'encodage en base 64 à cette chaîne ! 8)

En transpirant pour retrouver la véritable valeur binaire du hash, j'ai pu vérifier que le résultat est correct.

sHashHexa est une chaîne = "eedda4de2eaf8eb65434cc5cbc476c8fb98498ee3f4e19be4493d95efa2b9c3a"
bufHashBinaire est un Buffer sur 32
nIndex, nPos est un entier

nPos = 1
POUR nIndex = 1 _A_ 32
bufHashBinaire[[nIndex]] = Val(sHashHexa[[nPos sur 2]], "x")
nPos += 2
FIN

sResultat64 est une chaîne= Crypte(bufHashBinaire,"",crypteAucun+compresseAucun,encodeBASE64)

// sResultat64 = "7t2k3i6vjrZUNMxcvEdsj7mEmO4/Thm+RJPZXvornDo="

De toute évidence, quelque chose t'a échappé.;)
Comment en es-tu arrivé à utiliser la représentation hexadécimale !?

--
Pour me contacter par courrier électronique, cliquez sur le lien ci-dessous (protection antispam): http://cerbermail.com/…
Posté le 03 septembre 2014 - 16:22
Mais ca répond EXACTEMENT à mon problème !!! une sacrée épine dans le pied en moins ! Merci =JBO= !!!!! :) :) :)

Mais comme prévu, celà ne répond qu'en partie à mes problèmes, car en fait, je n'arrive pas à obtenir cette même chaine :

eedda4de2eaf8eb65434cc5cbc476c8fb98498ee3f4e19be4493d95efa2b9c3a

avec la requête :

POST
mws.amazonservices.fr
/Products/2011-10-01
AWSAccessKeyId=XXXXXXXXXXXXXX&Action=GetCompetitivePricingForSKU&MarketplaceId=XXXXXXXXXXXXX&SellerId=XXXXXXXXXXXXXXX&SellerSKUList.SellerSKU.1=XXXXXXXXXXXXXXX&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2014-09-02T14%3A16%3A01Z&Version=2011-10-01


pour celà, j'ai fait de nombreux essais, tous négatifs...

sClésecrete est une chaîne="ZZZZZZZZZZZZZZZZZZZZZZZ"
sTexte est une chaîne = "POST"+"mws.amazonservices.fr"+"/Products/2011-10-01"+"AWSAccessKeyId=XXXXXXXXXXXXXXX&Action=GetCompetitivePricingForSKU&MarketplaceId=XXXXXXXXXXXX&SellerId=XXXXXXXXXXXXXXXX&SellerSKUList.SellerSKU.1=XXXXXXXXXXXXXXX&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2014-09-02T14%3A16%3A01Z&Version=2011-10-01"
sHash est une chaîne = HashChaîne(HA_HMAC_SHA_256 ,sTexte,sClésecrete) // HA_HMAC_SHA_256 ou HMAC-SHA256 ???


J'ai essayé cette chaine avec des "+RC+" à la place de simples "+", idem... j'ai essayé pas mal d'autres choses dans le même genre, jamais trouvé la bonne...
Posté le 03 septembre 2014 - 21:45
Je me réponds, car j'ai finalement trouvé !
Si ca peut servir à d'autres, tant mieux :)

sresultat64 est une chaîne
sClésecrete est une chaîne="XXXXXXXXXXXXXX"

// bon à savoir "/n" est = caract(10)

sTexte est une chaîne = "POST"+Caract(10)+"mws.amazonservices.fr"+Caract(10)+"/Products/2011-10-01"+Caract(10)+"AWSAccessKeyId=XXXXXXXXXXXXXX&Action=GetCompetitivePricingForSKU&MarketplaceId=XXXXXXXXXXXXXX&SellerId=XXXXXXXXXXXXXX&SellerSKUList.SellerSKU.1=XXXXXXXXXXXXXX&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2014-09-02T14%3A16%3A01Z&Version=2011-10-01"
sHash est une chaîne = HashChaîne(HA_HMAC_SHA_256 ,sTexte,sClésecrete) // HMAC-SHA256

// et c'est là qu'en fait, sHash donne un résultat dans un format que je n'attendais pas, mais une fois le traitement suivant (base64) effectué...

sresultat64= Crypte(sHash,"",crypteAucun+compresseAucun,encodeBASE64)

// ca marche !! le résultat attendu est là !
Membre enregistré
36 messages
Popularité : +1 (1 vote)
Posté le 09 juillet 2018 - 11:04
Bonjour, je ressort un peu ce post du fond car je rencontre des soucis pour travailler avec l'API mws d'amazon!

j'arrive bien à générer une signature identique à celle que j'ai en faisant des test sur le Scratchpad d'amazon pour une requète donnée.

Mais lorsque je veux envoyer ma requête en utilisant httpenvoieformulaire ou un httprequete et en passant les param dans la requête je reçois une erreur signature invalide pour httpenvoieformulaire ou Either Action or Operation query parameter must be present via httprequete...

avez vous rencontré des soucis pour l'envoi de vos requêtes ou y a t il des subtilitées particulières... comme le user agent, le header etc...

Merci d'avance parce que là je m'y casse la tête depuis 3 jours sans résultats!
Membre enregistré
36 messages
Popularité : +1 (1 vote)
Posté le 09 juillet 2018 - 13:32
Chris a écrit :
Je me réponds, car j'ai finalement trouvé !
Si ca peut servir à d'autres, tant mieux

sresultat64 est une chaîne
sClésecrete est une chaîne="XXXXXXXXXXXXXX"

// bon à savoir "/n" est = caract(10)

sTexte est une chaîne = "POST"+Caract(10)+"mws.amazonservices.fr"+Caract(10)+"/Products/2011-10-01"+Caract(10)+"AWSAccessKeyId=XXXXXXXXXXXXXX&Action=GetCompetitivePricingForSKU&MarketplaceId=XXXXXXXXXXXXXX&SellerId=XXXXXXXXXXXXXX&SellerSKUList.SellerSKU.1=XXXXXXXXXXXXXX&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2014-09-02T14%3A16%3A01Z&Version=2011-10-01"
sHash est une chaîne = HashChaîne(HA_HMAC_SHA_256 ,sTexte,sClésecrete) // HMAC-SHA256

// et c'est là qu'en fait, sHash donne un résultat dans un format que je n'attendais pas, mais une fois le traitement suivant (base64) effectué...

sresultat64= Crypte(sHash,"",crypteAucun+compresseAucun,encodeBASE64)

// ca marche !! le résultat attendu est là !


Bonjour,

pouvez-vous me dire si vous utilisez les fonctions de création et d'envoi de formulaire ou httprequete pour envoyer la requête?

Merci d'avance
Message modifié, 09 juillet 2018 - 13:32