litespeed php 不会为 Amazon 产品 API 生成正确签名的请求

我直接从 Amazon 的暂存器 ( https://webservices.amazon.com/paapi5/scratchpad/index.html )获取了以下 PHP 代码,他们在其中提供了样板代码来查询其产品 API。我只对其进行了一点点修改以显示 HTTP 错误 - 其他所有内容都是直接复制和粘贴。

我输入了自己的凭据(访问密钥、密钥和合作伙伴标签),代码在我自己的 macOS 笔记本电脑上完美运行,运行(常规)PHP 7.1.23。

我将代码移至我的个人服务器,它运行完美,运行 PHP 5.3.10-1ubuntu3.26

当我将相同的代码移动到客户的服务器时,我从 Amazon 收到一条错误消息,指出请求未正确签名。错误是:

{"__type":"com.amazon.paapi5#InvalidSignatureException","Errors":[{"Code":"InvalidSignature","Message":"The request has not been correctly signed. If you are using an AWS SDK, requests are signed for you automatically; otherwise, go to https://webservices.amazon.com/paapi5/documentation/sending-request.html#signing."}]}

在该机器上, lsphp --version 返回

PHP 7.0.27 (litespeed) (built: Jan  4 2018 16:01:06)

Copyright (c) 1997-2016 The PHP Group

Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies

    with Zend OPcache v7.0.27, Copyright (c) 1999-2017, by Zend Technologies

lsphp 可执行文件有何不同,导致其无法生成正确签名的请求?



波斯汪
浏览 59回答 2
2回答

慕容3067478

正如评论中所解决的,如果服务器的时间与实际当前时间有相当大的差异,则哈希函数将产生亚马逊将拒绝的错误结果。重新配置服务器以使用网络同步其时钟,或手动调整以反映正确的时间,以便 PHP 的日期/时间功能开始返回正确的时间。

凤凰求蛊

服务器上的时间错了大约 5 分钟,这导致 GMT 时间也错了,然后我猜亚马逊不喜欢这个请求。一旦我们调整示例亚马逊代码运行完美,一切都很好!非常感谢,
打开App,查看更多内容
随时随地看视频慕课网APP