我正在调用一家航运公司的API,以获得按照本文件发送的交付的POD (凭证交付)图像。
我希望看到一个图像,但是API响应是null
。
这是我的代码:
$host = "api.shiplogic.com";
$accessKey = 'AKIA55D5DNTBI4X24BCM'; //Sandbox credentials
$secretKey = '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'; //Sandbox credentials
$requestUrl = 'https://api.shiplogic.com';
$uri = '/shipments/pod/images?';
$httpRequestMethod = 'GET';
$data = 'tracking_reference=';
$refnr = 'FQJNF'; //created for testing
require 'AWS/aws-autoloader.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($accessKey, $secretKey);
$psr7Request = new Request($httpRequestMethod, $requestUrl.$uri.$data.$refnr);
$client = new Client([$requestUrl, 'timeout' => 30]);
$sr = $signature->signRequest($psr7Request, $credentials);
$response = $client->send($sr);
$json = $response->getBody()->getContents();
echo $json;
我试过var_dump()
和print_r()
我错过了什么或者做错了什么?
[{"id":203913730,"parcel_id":0,"date":"2022-08-05T09:44:19.704Z","status":"delivered","source":"danieladmin","message":"POD file(s) captured","data":{"images":["https://shiplogic-backend-prod-infra-images-and-notes.s3.af-south-1.amazonaws.com/shipment-images/8155533-fe1e0e10-324c-4360-b2f4-be51f091f8bb.png?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=ASIA55D5DNTBLMDRXYD5%2F20220805%2Faf-south-1%2Fs3%2Faws4_request\u0026X-Amz-Date=20220805T113651Z\u0026X-Amz-Expires=86400\u0026X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJ7%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCmFmLXNvdXRoLTEiRzBFAiB4vd1t%2F11LRUaoSCpqMdIP8gOuT9L32p1LSyCzSiGUBQIhAMt8FtNGK6ibRWvAJtIf%2FIGvOsESyCw2bIgNl27PWYBwKp0DCLv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQAhoMOTU1ODkyNTkxODEwIgwhD2CnEtahYg8Ck0Iq8QLMbochjBL6wQyuYPgOrOyvgliZs44WoRZqjDllfIPfa86R5TDw6hKI6aTaQLpNWUInFDnrGRu7sd%2BolgUsqnN17lr20S2h7Fy%2FnU0Rwv2z11AYSXgXrvxWbHVMJzngkyfteitp0GpD3cjK%2BdIJ9iKRS8g%2BO5WfFQKu99StSfkTWgJ%2Fo1myNwJoJkWkWhYiO1c%2BStpBSs0vdKhSKLOuNu3HBQIpWTQ1U8qnGvNdigAdz%2B7gCJwsaNqUH%2FHtl3xNSSbUSkEzqYLzdkjmKNFUC%2BrVAePsS4UnVhkMmWlnal%2BvSI%2FgY%2BDE1IuuhWYl7kuWa5SC6E5p2vngpN9lm0EnDSmK3OFsohMIJnu23WUXBJTxpmx%2Fb6KL%2FPrXapAhHccAz%2FJFmeU55%2FnMp0AqiuHjWYWE1ei1TPR2mhyj94wTW3Y4lUxhnvfeHz7QmPeh3KN3HAN0S2WHDf9Bv1gUD6bDshj1tiREoeChZzfp1ZbArO86AOgw%2BcSzlwY6nQFtpA37RYzkLVk52OW4g1tyja35Mfs6%2FykajH9IqkjuTLqvNmGIfrS7cLGgqhvdLUEs3QTIYDfPbjgkNsl5roEHbI7NO%2FhfrjIpBVmOsxJsqp62yL8Ze%2F29hgfug0TnycpXSg1bAOQ5ROelqQi5kcuy%2FTT3tePuZy1EO%2BXTm0tQbE3tf0XkLw34cQ6078ZAQJ7tyI4R4qRnWfdTkLtM\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=9a3d73a886012ac24e4719888156922d840a73d43569934a8de33ab2336f47b1"]}}]
<Error>
<Code>AuthorizationQueryParametersError</Code>
<Message>
X-Amz-Algorithm only supports "AWS4-HMAC-SHA256 and AWS4-ECDSA-P256-SHA256"
</Message>
<RequestId>ECGG4HGD86Y0PYAY</RequestId>
<HostId>
qZHFwL8gZ3GEibJ6UmgAoNd97EMVGe1Xw24RjYIKAqqrOi2Cx+YPmBJGoCy4opTiih5Nz5YlEuU=
</HostId>
</Error>
发布于 2022-08-06 02:50:08
就获得响应而言,您的代码实际上是完全正确的,但问题是您试图从其中复制URL的响应仍然是JSON编码的。这使得URL的某些部分处于无效的编码状态;具体来说,是/u0026
。
...?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026...
每个参数末尾的/u0026
是罪魁祸首。如果您json_decode()
响应,那么您将得到正确的URL。
当我运行代码并解码结果时收到的URL似乎是有效的。我所做的就是添加一行并更改最后一行:
...
$json = $response->getBody()->getContents();
$result = json_decode($json, false);
echo $result[0]->data->images[0];
您显然可以这样做,而不需要添加一行,只需更改分配$json
的行,但我希望不使用该行,以便更容易地查看不同之处。
...
$json = json_decode($response->getBody()->getContents(), false);
echo $json[0]->data->images[0];
https://stackoverflow.com/questions/73207663
复制相似问题