3

我收到此错误

我们计算的请求签名与您提供的签名不匹配此请求的规范字符串应该是 String-to-Sign 应该是

我正在尝试在 Rails 中实现 SP API。我从https://api.amazon.com/auth/o2/token端点获取了访问令牌。之后病房使用 Aws::STS::Client 创建了临时会话令牌。我使用 Aws::Sigv4::Signer 进行签名。

第一步(访问令牌)

payload = {
  grant_type: 'refresh_token',
  client_id: [ClientId],
  refresh_token: [RefreshToken],
  client_secret: [ClientSecret],
}
headers = {'Content-Type': 'application/json'}
response = HTTParty.post("https://api.amazon.com/auth/o2/token", body: payload.to_json, headers: headers)
access_token = response["access_token"]

第二步(使用 AWS::STS 创建代入角色)


    result = sts = Aws::STS::Client.new(
      region: "us-east-1",
      credentials: Aws::Credentials.new("aws-access-key", "aws-secret-key")
    ).assume_role({
      role_arn: "role_arn",
      role_session_name: 'sp-api'
    })

enter code here

第三步(创建签名)


    signer = Aws::Sigv4::Signer.new(
      service: 'execute-api',
      region: 'us-east-1',
      # static credentials
      access_key_id: access_key_id,
      secret_access_key: secret_access_key,
      session_token: session_token
    )
    
    signature = signer.sign_request(
      http_method: 'GET',
      url: 'https://sellingpartnerapi-na.amazon.com/orders/v0/orders/ordersID',
      headers: {
        'host' => 'sellingpartnerapi-na.amazon.com',
        'X-Amz-Access-Token' => access_token,
      })

最后一步(使用签名标头调用 API)


    headers = {
      'Content-Type' => 'application/json',
      "host" => signature.headers["host"],
      "X-Amz-Date" => signature.headers['x-amz-date'],
      "X-Amz-Security-Token" => signature.headers["x-amz-security-token"],
      "X-Amz-Content-Sha256" => signature.headers["x-amz-content-sha256"],
      "Authorization" => signature.headers['authorization']
    }
    
    data = HTTParty.send(:get, "https://sellingpartnerapi-na.amazon.com/orders/v0/orders/ordersID", headers: headers)

4

0 回答 0