【发布时间】:2022-01-18 11:56:32
【问题描述】:
所以我在我的程序中实现了 ship-logic 的 API,并且从未使用过 AWS 身份验证。 我是否对文档进行了研究并做了以下工作:
<?php
$host = "api.shiplogic.com";
$accessKey = 'AKIA55D5DNTBFC3I7BHQ';
$secretKey = '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';
$requestUrl = 'https://api.shiplogic.com';
$uri = '/rates';
$httpRequestMethod = 'POST';
$data = '{"collection_address": {"company": "Kenesis Test","street_address": " 32 Goud Street, Goedeburg, Benoni","local_area": "Benoni","city": "Johannesburg","country": "ZA","code": "1501"},"delivery_address": {"street_address": "10 bloomberg street","local_area": "minnebron","city": "brakpan","code": "1541"},"parcels": [{"submitted_length_cm": 1,"submitted_width_cm": 1,"submitted_height_cm": 1,"submitted_weight_kg": 0.1}],"declared_value": 99}';;
require 'vendor/autoload.php';
use Aws\Signature\SignatureV4;
use Aws\Credentials\Credentials;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
use Psr\Http\Client\ClientInterface;
$signature = new SignatureV4('execute-api', 'af-south-1');
$credentials = new Credentials($accessKeyId, $secretAccessKey);
$psr7Request = new Request($httpRequestMethod, $requestUrl.$uri, ["content-type"=>"application/json"], $data);
$client = new Client([$requestUrl, 'timeout' => 30]);
$sr = $signature->signRequest($psr7Request, $credentials);
$response = $client->send($sr);
//var_dump($response);
?>
现在它是一段简单的代码,但我不断收到 403 响应。 当我使用 PostMan 执行完全相同的请求时,响应成功返回。
任何 AWS 专家都可以帮助我并指出我是否在代码方面做错了什么? 我们将不胜感激。
P.S,我在这里使用沙盒凭据,不用担心。
【问题讨论】:
-
如果 403 从您向 shiplogic api 发出的 PSR7 请求返回,请检查您在 php 请求中发送的请求标头是否与邮递员的请求标头匹配。它可能与它有关。
标签: php amazon-web-services authentication signature