Amazon MWS APIで出品中商品レポートを取得するプログラムをVB.NETで作成中で、主に以下のページの手順に従い、下記の【コード】を作成しました。
しかし、作成された署名済みURLをブラウザで送信しても、"SignatureDoesNotMatch"というエラーが返ってきます。
これは"403 Forbidden"のエラーのようで、色々と試行錯誤をしたのですが改善できません。
恐れ入りますが、修正方法をご教授お願いいたします。
VB.NET
1 Imports System. 2 Imports System.Web 3 Imports System.Net 4 Imports System.IO 5 Imports System.Text 6 Imports Amazon.Runtime 7 Imports Amazon.SQS 8 Imports Amazon.SQS.Model 9 10 Public Class MyBase64str 11 12 Private enc As Encoding 13 14 Public Sub New(ByVal encStr As String) 15 enc = Encoding.GetEncoding(encStr) 16 End Sub 17 18 Public Function Encode(ByVal str As String) As String 19 Return Convert.ToBase64String(enc.GetBytes(str)) 20 End Function 21 22 Public Function Decode(ByVal str As String) As String 23 Return enc.GetString(Convert.FromBase64String(str)) 24 End Function 25 26 End Class 27 28 29 Public Class Form1 30 31 Sub GetReportAPI() 32 33 Dim ecsaddress , AWSKeyId , sKey , APIVersion , SellerId , _ 34 timestamp , URI , MarketPlaceID , rawText , _ 35 rawTextToSign , Operation , SignatureVer As String 36 37 APIVersion = HttpUtility.UrlEncode("2009-01-01") 38 39 SellerId = HttpUtility.UrlEncode("[セラーID]") 40 41 AWSKeyId = HttpUtility.UrlEncode("[AWSアクセスキーID]") 42 43 sKey = HttpUtility.UrlEncode("[シークレットキー]") 44 45MarketPlaceID = HttpUtility.UrlEncode("A1VC38T7YXB528") 46 47 Operation = HttpUtility.UrlEncode("GetReportList") 48 49 SignatureVer = HttpUtility.UrlEncode("2") 50 51 ecsaddress = "mws.amazonservices.jp" 52 53 timestamp = System.DateTime.UtcNow.ToString("s") & "Z" 54 timestamp = HttpUtility.UrlEncode(timestamp) 55 56 rawText = "" 57 58 '署名用リクエストを作成 59rawText = rawText _ 60 & "AWSAccessKeyId=" & AWSKeyId _ 61 & "&Action=" & Operation _ 62 & "&Merchant=" & SellerId _ 63 & "&SignatureMethod=HmacSHA256" _ 64 & "&SignatureVersion=" & SignatureVer _ 65 & "&Timestamp=" & timestamp _ 66 & "&Version=" & APIVersion 67 68 rawTextToSign = "POST" & vbCrLf & ecsaddress & vbCrLf & "%2F" & vbCrLf & rawText 69 70 Dim data As Byte() = System.Text.Encoding.UTF8.GetBytes(rawTextToSign) 71 Dim keyData As Byte() = System.Text.Encoding.UTF8.GetBytes(sKey) 72 73 'HMACSHA256オブジェクトの作成 74Dim hmac As New System.Security.Cryptography.HMACSHA256(keyData) 75 76 'ハッシュ値を計算 77Dim Hash As Byte() = hmac.ComputeHash(data) 78 79 hmac.Clear() 80 81 Dim RequestHMAC As String = BitConverter.ToString(Hash).ToLower().Replace("-", "") 82 83Console.WriteLine("HMAC=" & RequestHMAC) 84 85 Dim base64 As New MyBase64str("UTF-8") 86 Dim base64String As String = base64.Encode(RequestHMAC) 87 88 base64String = HttpUtility.UrlEncode(base64String) 89 90 Dim rawText2 As String = "" 91 rawText2 = rawText2 _ 92 & "AWSAccessKeyId=" & AWSKeyId _ 93 & "&Action=" & Operation _ 94 & "&Merchant=" & SellerId _ 95 & "&SignatureVersion=" & SignatureVer _ 96 & "&Timestamp=" & timestamp _ 97 & "&Version=" & APIVersion _ 98 & "&Signature=" & base64String _ 99 & "&SignatureMethod=HmacSHA256" 100 101 URI = "https://" & ecsaddress & "/?" & rawText2 102 103 End Sub 104 105 End Class
-----------------【エラーメッセージ】-----------------
<Type>Sender</Type>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message>
-----------------【環境】-----------------
・開発:Visual Studio Community 2017 Ver15.1
(AWSSDK for .NETをインストール)
.NET Framework Ver4.6
・OS:Windows Server 2008 R2 Standard
(上記に仮想デスクトップを構築して使用)

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。