php 计算签名,php – 计算Amazon Marketplace API的签名问题
我正在计算一个签名以使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的签名问题相关推荐
- 开发者解读:为什么蚂蚁要用融合计算这种新计算模式?
导读:如今大部分人工智能应用是基于监督学习范式开发的,即模型在线下进行训练,然后部署到服务器上进行线上预测,这样的开发方式在实时响应上存在较大的局限.随着计算和 AI 体系逐步成熟,我们希望机器学习应 ...
- 大数据技术原理与应用5Spark、流计算、图计算
第10讲 Spark 10.1 Spark概述 10.1.1 Spark简介 •Spark最初由美国加州伯克利大学(UCBerkeley)的AMP实验室于 2009年开发,是基于内存计算的大数据并行计 ...
- 【机密计算】机密计算通用框架解读
2019年8月22日,Linux基金会宣布多家巨头企业组建"机密计算联盟"(Confidential Computing Consortium),该基金将负责对联盟活动进行监督.机 ...
- Java API接口签名认证
Java API接口签名认证 我们在进行程序开发的时候,一定会开发一些API接口,供他人访问.当然这些接口中有可能是开放的,也有可能是需要登录才能访问的,也就是需要Token鉴权成功后才可以访问的.那 ...
- api签名_使用签名保护基于HTTP的API
api签名 我在EMC上的一个平台上可以构建SaaS解决方案. 与越来越多的其他应用程序一样,该平台具有基于RESTful HTTP的API. 使用JAX-RS之类的开发框架,构建这样的API相对容易 ...
- 使用签名保护基于HTTP的API
我在EMC上的一个平台上可以构建SaaS解决方案. 与越来越多的其他应用程序一样,该平台具有基于RESTful HTTP的API. 使用像JAX-RS这样的开发框架,构建这样的API相对容易. 但是, ...
- 从中国封建历史的发展来理解云计算、雾计算、边缘计算以及云原生之间的关系
前言 互联网的快速发展,带来了一大批新的名词,这次名词的更新换代的速度也是快的惊人,往往一波未平一波又起,使得大家不能墨守成规,必须不断学习才能赶得上科技和技术的发展潮流. 计算机行业更是如此,可能真 ...
- (九)隐私计算--安全多方计算
目录 安全多方计算 安全多方计算的技术架构 安全挑战敌手模型 安全多方计算关键技术 安全多方计算主要特点 安全多方计算应用 安全多方计算与区块链 JUGO平台 参考: https://blog.csd ...
- 密码算法(SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算)
文章目录 SM1 对称密码 SM2 椭圆曲线公钥密码算法 SM3 杂凑算法 SM4 对称算法 同态加密 密态计算和隐私计算 安全多方计算技术 安全多方计算的应用场景 对称加密算法 非对称加密算法(公钥 ...
- OpenStack Victoria版——6.2计算节点-Nova计算服务组件
6.2计算节点-Nova计算服务组件 更多步骤:OpenStack Victoria版安装部署系列教程 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 Ope ...
最新文章
- response.getWriter().write 传递中文乱码
- canvas - 饼状图
- saltstack学习-9:批量安装nginx服务并定时更新配置(pillar)
- 边缘计算大热 AI芯片站上风口
- Linux基础第一章 概述
- Go sycn.Map知识点
- Android 本地tomcat服务器接收处理手机上传的数据之案例演示
- 日志库 winston 的学习笔记 - logger.info 打印到控制台上的实现原理
- docker mysql关掉后启动_Docker启动mysql的坑2
- OpenStack Nova核心组件和RabbitMQ通信流程分析
- 各个阶段的前端得会哪些“特殊”技能?
- SpringMVC之安全性(二)登录界面
- iphone越狱 -- 红雪越狱工具
- 洛谷再分肥宅水c语言,【菜鸟进阶之路】P5706【深基2.例8】再分肥宅水 - 洛谷
- idea继承后重新方法快捷键_idea 查看类继承关系的快捷键
- java7 调优_JVM故障分析及性能优化系列之七:使用MAT的Histogram和Dominator Tree定位溢出源...
- 公司内网openvpn部署,
- Java8函数式接口与Lambda表达式
- OPA-Gatekeeper使用
- 基于Kinect Azure的多相机数据采集(二)
热门文章
- POJ-1191 棋盘分割 记忆化搜索
- docker入门、docker基本命令
- 面试题之请求转发和重定向的区别
- dubbo之SPI扩展机制注解:@Extension注解的作用
- systemd (简体中文)
- 130242014062-黄凌逸-电商系统某功能模块“需求分析与设计实验课小结
- 对Spring 容器管理事务支持的总结
- 2013-09-16 构建C1000K的服务器(1) – 基础
- fooking文档(不定期更新)
- 如何解决It's likely you're attempting to run Eclipse using the JRE instead of the JDK