我正在计算一个签名以使Amazon Marketplace API调用,但我不断收到以下错误:

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.

我将签名创建过程包装到一个类中:

namespace App\Marketplace\Amazon;

class Signature

{

protected $signedString;

public function __construct($url, array $parameters, $secretAccessKey)

{

$stringToSign = $this->calculateStringToSign($url, $parameters);

$this->signedString = $this->sign($stringToSign, $secretAccessKey);

}

protected function calculateStringToSign($url, array $parameters)

{

$url = parse_url($url);

$string = "POST\n";

$string .= $url['host'] . "\n";

$string .= $url['path'] . "\n";

$string .= $this->getParametersAsString($parameters);

return $string;

}

protected function sign($data, $secretAccessKey)

{

return base64_encode(hash_hmac('sha256', $data, $secretAccessKey, true));

}

protected function getParametersAsString(array $parameters)

{

uksort($parameters, 'strcmp');

$queryParameters = [];

foreach ($parameters as $key => $value) {

$queryParameters[$key] = $this->urlEncode($value);

}

return http_build_query($queryParameters);

}

protected function urlEncode($value)

{

return str_replace('%7E', '~', rawurlencode($value));

}

public function __toString()

{

return $this->signedString;

}

}

但是我看不到我在哪里错了,我遵循了API中的指南,并查看了Java示例以及旧版Marketplace PHP SDK *。

编辑:这里是我如何使用Signature类:

$version = '2011-07-01';

$url = 'https://mws.amazonservices.com/Sellers/'.$version;

$timestamp = gmdate('c', time());

$parameters = [

'AWSAccessKeyId' => $command->accessKeyId,

'Action' => 'GetAuthToken',

'SellerId' => $command->sellerId,

'SignatureMethod' => 'HmacSHA256',

'SignatureVersion' => 2,

'Timestamp' => $timestamp,

'Version' => $version,

];

$signature = new Signature($url, $parameters, $command->secretAccessKey);

$parameters['Signature'] = strval($signature);

try {

$response = $this->client->post($url, [

'headers' => [

'User-Agent' => 'my-app-name',

],

'body' => $parameters,

]);

dd($response->getBody());

} catch (\Exception $e) {

dd(strval($e->getResponse()));

}

除此之外:我知道市场凭据正确,因为我已经登录到帐户并检索访问密钥,密钥和卖家ID。

*我没有使用SDK,因为它不支持我需要的API调用:SubmitFeed。

php 计算签名,php – 计算Amazon Marketplace API的签名问题相关推荐

  1. 开发者解读:为什么蚂蚁要用融合计算这种新计算模式?

    导读:如今大部分人工智能应用是基于监督学习范式开发的,即模型在线下进行训练,然后部署到服务器上进行线上预测,这样的开发方式在实时响应上存在较大的局限.随着计算和 AI 体系逐步成熟,我们希望机器学习应 ...

  2. 大数据技术原理与应用5Spark、流计算、图计算

    第10讲 Spark 10.1 Spark概述 10.1.1 Spark简介 •Spark最初由美国加州伯克利大学(UCBerkeley)的AMP实验室于 2009年开发,是基于内存计算的大数据并行计 ...

  3. 【机密计算】机密计算通用框架解读

    2019年8月22日,Linux基金会宣布多家巨头企业组建"机密计算联盟"(Confidential Computing Consortium),该基金将负责对联盟活动进行监督.机 ...

  4. Java API接口签名认证

    Java API接口签名认证 我们在进行程序开发的时候,一定会开发一些API接口,供他人访问.当然这些接口中有可能是开放的,也有可能是需要登录才能访问的,也就是需要Token鉴权成功后才可以访问的.那 ...

  5. api签名_使用签名保护基于HTTP的API

    api签名 我在EMC上的一个平台上可以构建SaaS解决方案. 与越来越多的其他应用程序一样,该平台具有基于RESTful HTTP的API. 使用JAX-RS之类的开发框架,构建这样的API相对容易 ...

  6. 使用签名保护基于HTTP的API

    我在EMC上的一个平台上可以构建SaaS解决方案. 与越来越多的其他应用程序一样,该平台具有基于RESTful HTTP的API. 使用像JAX-RS这样的开发框架,构建这样的API相对容易. 但是, ...

  7. 从中国封建历史的发展来理解云计算、雾计算、边缘计算以及云原生之间的关系

    前言 互联网的快速发展,带来了一大批新的名词,这次名词的更新换代的速度也是快的惊人,往往一波未平一波又起,使得大家不能墨守成规,必须不断学习才能赶得上科技和技术的发展潮流. 计算机行业更是如此,可能真 ...

  8. (九)隐私计算--安全多方计算

    目录 安全多方计算 安全多方计算的技术架构 安全挑战敌手模型 安全多方计算关键技术 安全多方计算主要特点 安全多方计算应用 安全多方计算与区块链 JUGO平台 参考: https://blog.csd ...

  9. 密码算法(SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算)

    文章目录 SM1 对称密码 SM2 椭圆曲线公钥密码算法 SM3 杂凑算法 SM4 对称算法 同态加密 密态计算和隐私计算 安全多方计算技术 安全多方计算的应用场景 对称加密算法 非对称加密算法(公钥 ...

  10. OpenStack Victoria版——6.2计算节点-Nova计算服务组件

    6.2计算节点-Nova计算服务组件 更多步骤:OpenStack Victoria版安装部署系列教程 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 Ope ...

最新文章

  1. response.getWriter().write 传递中文乱码
  2. canvas - 饼状图
  3. saltstack学习-9:批量安装nginx服务并定时更新配置(pillar)
  4. 边缘计算大热 AI芯片站上风口
  5. Linux基础第一章 概述
  6. Go sycn.Map知识点
  7. Android 本地tomcat服务器接收处理手机上传的数据之案例演示
  8. 日志库 winston 的学习笔记 - logger.info 打印到控制台上的实现原理
  9. docker mysql关掉后启动_Docker启动mysql的坑2
  10. OpenStack Nova核心组件和RabbitMQ通信流程分析
  11. 各个阶段的前端得会哪些“特殊”技能?
  12. SpringMVC之安全性(二)登录界面
  13. iphone越狱 -- 红雪越狱工具
  14. 洛谷再分肥宅水c语言,【菜鸟进阶之路】P5706【深基2.例8】再分肥宅水 - 洛谷
  15. idea继承后重新方法快捷键_idea 查看类继承关系的快捷键
  16. java7 调优_JVM故障分析及性能优化系列之七:使用MAT的Histogram和Dominator Tree定位溢出源...
  17. 公司内网openvpn部署,
  18. Java8函数式接口与Lambda表达式
  19. OPA-Gatekeeper使用
  20. 基于Kinect Azure的多相机数据采集(二)

热门文章

  1. POJ-1191 棋盘分割 记忆化搜索
  2. docker入门、docker基本命令
  3. 面试题之请求转发和重定向的区别
  4. dubbo之SPI扩展机制注解:@Extension注解的作用
  5. systemd (简体中文)
  6. 130242014062-黄凌逸-电商系统某功能模块“需求分析与设计实验课小结
  7. 对Spring 容器管理事务支持的总结
  8. 2013-09-16 构建C1000K的服务器(1) – 基础
  9. fooking文档(不定期更新)
  10. 如何解决It's likely you're attempting to run Eclipse using the JRE instead of the JDK