为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用 Golang 生成亚马逊产品 API 签名

无法使用 Golang 生成亚马逊产品 API 签名

Go
森栏 2021-12-06 19:54:34
我无法使用 Amazon 和 Go 提供的测试参数获得正确的签名。我的签名哈希函数如下。我按照亚马逊文档使用 SHA-256 和 base64 编码。func HashSignature(str string, secret string) string {  mac := hmac.New(sha256.New, []byte(secret))  _, err := mac.Write([]byte(str))  if err != nil {   return "" }  hash := base64.StdEncoding.EncodeToString(mac.Sum(nil))  hash = url.QueryEscape(hash)  return hash}我的签名测试功能如下。我在 Ruby 代码中使用了下面的规范字符串,它生成了正确的预期签名。所以问题似乎出在我的 HashSignature() 函数的输出上,但我看不出我在那里做错了什么。func TestAmazonSignature(t *testing.T) {/* here is the canonical string from Amazon documentation which should yield the expected signature belowGETwebservices.amazon.com/onca/xmlAWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&AssociateTag=mytag-20&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=Images%2CItemAttributes%2COffers%2CReviews&Service=AWSECommerceService&Timestamp=2014-08-18T12%3A00%3A00Z&Version=2013-08-01*/  SECRET_KEY := "1234567890"  CANONICAL_STR := "GET\nwebservices.amazon.com\n/onca/xml\nAWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&AssociateTag=mytag-20&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=Images%2CItemAttributes%2COffers%2CReviews&Service=AWSECommerceService&Timestamp=2014-08-18T12%3A00%3A00Z&Version=2013-08-01"  EXPECTED := "j7bZM0LXZ9eXeZruTqWm2DIvDYVUU3wxPPpp%2BiXxzQc%3D"  if RESULT := HashSignature(CANONICAL_STR, SECRET_KEY); RESULT != EXPECTED {    t.Errorf("\nEXPECTED:\n%v\nRESULT:\n%v", EXPECTED, RESULT)  } else { fmt.Println("TestAmazonSignature: Signature: OK") }}这是包含所有这些代码的操场链接。
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

对我来说看起来不错,尝试运行:

https://play.golang.org/p/w0mQAYx2GQ

我添加了必要的导入和主要功能


查看完整回答
反对 回复 2021-12-06
  • 1 回答
  • 0 关注
  • 218 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信