Amazon MWS APIで出品中商品レポートを取得するプログラムをVB.NETで作成中で、主に以下のページの手順に従い、下記の【コード】を作成しました。

http://docs.developer.amazonservices.com/ja_JP/d …

しかし、作成された署名済みURLをブラウザで送信しても、"SignatureDoesNotMatch"というエラーが返ってきます。

これは"403 Forbidden"のエラーのようで、色々と試行錯誤をしたのですが改善できません。

恐れ入りますが、お詳しい方、修正方法をご教授お願いいたします。

【コード】
Imports System.
Imports System.Web
Imports System.Net
Imports System.IO
Imports System.Text
Imports Amazon.Runtime
Imports Amazon.SQS
Imports Amazon.SQS.Model

Public Class MyBase64str

Private enc As Encoding

Public Sub New(ByVal encStr As String)
enc = Encoding.GetEncoding(encStr)
End Sub

Public Function Encode(ByVal str As String) As String
Return Convert.ToBase64String(enc.GetBytes(str))
End Function

Public Function Decode(ByVal str As String) As String
Return enc.GetString(Convert.FromBase64String(str))
End Function

End Class


Public Class Form1

Sub GetReportAPI()

Dim ecsaddress , AWSKeyId , sKey , APIVersion , SellerId , _
timestamp , URI , MarketPlaceID , rawText , _
rawTextToSign , Operation , SignatureVer As String

APIVersion = HttpUtility.UrlEncode("2009-01-01")

SellerId = HttpUtility.UrlEncode("[セラーID]")

AWSKeyId = HttpUtility.UrlEncode("[AWSアクセスキーID]")

sKey = HttpUtility.UrlEncode("[シークレットキー]")

MarketPlaceID = HttpUtility.UrlEncode("A1VC38T7YXB528")

Operation = HttpUtility.UrlEncode("GetReportList")

SignatureVer = HttpUtility.UrlEncode("2")

ecsaddress = "mws.amazonservices.jp"

timestamp = System.DateTime.UtcNow.ToString("s") & "Z"
timestamp = HttpUtility.UrlEncode(timestamp)

rawText = ""

'署名用リクエストを作成
rawText = rawText _
& "AWSAccessKeyId=" & AWSKeyId _
& "&Action=" & Operation _
& "&Merchant=" & SellerId _
& "&SignatureMethod=HmacSHA256" _
& "&SignatureVersion=" & SignatureVer _
& "&Timestamp=" & timestamp _
& "&Version=" & APIVersion

rawTextToSign = "POST" & vbCrLf & ecsaddress & vbCrLf & "%2F" & vbCrLf & rawText

Dim data As Byte() = System.Text.Encoding.UTF8.GetBytes(rawTextToSign)
Dim keyData As Byte() = System.Text.Encoding.UTF8.GetBytes(sKey)

'HMACSHA256オブジェクトの作成
Dim hmac As New System.Security.Cryptography.HMACSHA256(keyData)

'ハッシュ値を計算
Dim Hash As Byte() = hmac.ComputeHash(data)

hmac.Clear()

Dim RequestHMAC As String = BitConverter.ToString(Hash).ToLower().Replace("-", "")

Console.WriteLine("HMAC=" & RequestHMAC)

Dim base64 As New MyBase64str("UTF-8")
Dim base64String As String = base64.Encode(RequestHMAC)

base64String = HttpUtility.UrlEncode(base64String)

Dim rawText2 As String = ""
rawText2 = rawText2 _
& "AWSAccessKeyId=" & AWSKeyId _
& "&Action=" & Operation _
& "&Merchant=" & SellerId _
& "&SignatureVersion=" & SignatureVer _
& "&Timestamp=" & timestamp _
& "&Version=" & APIVersion _
& "&Signature=" & base64String _
& "&SignatureMethod=HmacSHA256"

URI = "https://" & ecsaddress & "/?" & rawText2

End Sub

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
・OS:Windows Server 2008 R2 Standard
(上記に仮想デスクトップを構築して使用)

  • 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
  • 今の自分の気分スタンプを選ぼう!
あと4000文字

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報