【问题标题】:AWS Item LookUp URL SignatureAWS 项目查找 URL 签名
【发布时间】:2017-11-22 14:16:18
【问题描述】:

我是 AWS 新手,我正在尝试在我的 UWP 应用程序中通过 UPC 查找项目。我在将签名添加到请求 URL 时遇到问题。我不断收到“我们计算的请求签名与您提供的签名不匹配。”

有没有给亚马逊打电话的经验?大多数地方的 api 文档并不真正针对 C#。

    public async void ItemLookup(string itemID)
    {
        Dictionary<string, string> fields = new Dictionary<string, string>();
        fields.Add("AssociateTag", associateTag);
        fields.Add("Condition", "All");
        fields.Add("IdType", "UPC");
        fields.Add("ItemId", itemID);
        fields.Add("Operation", "ItemLookup");
        fields.Add("ResponseGroup", "Large");
        fields.Add("SearchIndex", "All");
        fields.Add("Service", "AWSECommerceService");
        // fields.Add("Timestamp", Uri.EscapeDataString(DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:sssZ")));

        // Build Url for signing
        string url = string.Empty;
        foreach (var pair in fields)
        {
            url += "&" + pair.Key + "=" + pair.Value;
        }


        url = Uri.EscapeUriString(endpoint
                                + "AWSAccessKeyId=" + accessKeyId
                                + url);
        // Add Timestamp
        url += "&Timestamp=" + Uri.EscapeDataString(DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss.fffK", CultureInfo.InvariantCulture));


        // URL        http://webservices.amazon.co.uk/onca/xml?AWSAccessKeyId=REMOVED&AssociateTag=REMOVED&Condition=All&IdType=UPC&ItemId=786936724943&Operation=ItemLookup&ResponseGroup=Large&SearchIndex=All&Service=AWSECommerceService&Timestamp=2017-11-22T11%3A34%3A42.602Z
        // SCRATCHPAD http://webservices.amazon.co.uk/onca/xml?AWSAccessKeyId=REMOVED&AssociateTag=REMOVED&Condition=All&IdType=UPC&ItemId=786936724943&Operation=ItemLookup&ResponseGroup=Large&SearchIndex=All&Service=AWSECommerceService&Timestamp=2017-11-22T09%3A20%3A35.000Z

        // &Signature=Lvqlenpx0wos4Hg6ZzSNHqOc1QwktXgt8nFHBTfTON4%3D



        Byte[] secretBytes = UTF8Encoding.UTF8.GetBytes(secretKey);
        HMACSHA256 hmac = new HMACSHA256(secretBytes);

        Byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(url);
        Byte[] hash = hmac.ComputeHash(dataBytes);
        String signature = Convert.ToBase64String(hash);

        // Full URL
        string requestURL = url + "&Signature=" + signature;

        HttpClient httpClient = new HttpClient();
        HttpResponseMessage responseMessage = await httpClient.GetAsync(requestURL);

        var response = await responseMessage.Content.ReadAsStringAsync();



    }


}

我将来自亚马逊暂存器的 url 与我自己的 url 注释掉,它们是对齐的,但我不能 100% 确定我是否正确处理签名。

任何帮助将不胜感激

凯文

【问题讨论】:

    标签: c# amazon-web-services uwp amazon amazon-product-api


    【解决方案1】:

    我还没有测试以下内容。但是有关于你要求什么的文档。您是否检查了以下内容以创建您的签名?

    首先,列出here的全过程告诉我们,你需要使用签名的URL

    其次,如何使用 C# 和 .NET 创建 URL 签名,您可以参考以下文档:http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CreateSignatureInCSharp.html

    对了,你可以先看看例子code

    【讨论】:

    • 该示例用于 Cloud Front,签名需要策略、IP 地址和到期日期。如果我需要使用 SHA256,它还使用 SHA1 产品广告 API 不需要这些。我查看了很多文档和示例,并尝试将在 Scratch Pad 中创建的 PHP 示例转换为 C#
    【解决方案2】:

    您可以使用以下nuget 包。

    PM> Install-Package Nager.AmazonProductAdvertising
    

    查找示例

    var authentication = new AmazonAuthentication();
    authentication.AccessKey = "accesskey";
    authentication.SecretKey = "secretkey";
    
    var wrapper = new AmazonWrapper(authentication, AmazonEndpoint.UK);
    var result = wrapper.Lookup("B00BYPW00I");
    

    【讨论】:

      猜你喜欢
      • 2018-02-01
      • 2016-12-11
      • 2020-04-09
      • 2019-03-11
      • 2017-09-21
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多