ion-bazan / aliyun-http-signer

PSR-7兼容的阿里云API网关请求签名实现。与Guzzle ⛽️ 和HttPlug 🐘集成。

v1.1.0 2023-05-05 15:42 UTC

This package is auto-updated.

Last update: 2024-09-05 03:39:52 UTC


README

Latest version GitHub Workflow Status PHP version Codecov Mutation testing badge Scrutinizer Code Quality Downloads License

此库实现了针对PSR-7兼容请求的阿里云API网关请求签名计算。它与GuzzleHttPlug集成,但也可以与任何PSR-7兼容客户端一起使用。

安装

使用Composer通过以下命令安装包:

composer require ion-bazan/aliyun-http-signer

使用方法

Symfony集成

将包与Symfony集成的最简单方法是使用Guzzle Bundle的GuzzleBundleAliyunSignerPlugin

要与其他Bundle(如HttplugBundle)一起使用,只需将RequestSignerKeyRequestSignerPlugin作为服务注册,并将凭证注入到Key服务中。

对PSR-7兼容的API请求进行签名

<?php

require_once 'vendor/autoload.php';

use IonBazan\AliyunSigner\Key;
use IonBazan\AliyunSigner\RequestSigner;
use Psr\Http\Message\RequestInterface;

function signRequest(RequestInterface $request): RequestInterface
{
    // Provide credentials
    $appId = '12345678';
    $secret = base64_encode('secret');
    
    // Create signer
    $signer = new RequestSigner(new Key($appId, $secret));

    return $signer->signRequest($request);
}

使用Guzzle中间件对API请求进行签名

<?php

require_once 'vendor/autoload.php';

use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use IonBazan\AliyunSigner\Key;
use IonBazan\AliyunSigner\RequestSigner;
use IonBazan\AliyunSigner\Guzzle\RequestSignerMiddleware;

// Provide credentials
$appId = '12345678';
$secret = base64_encode('secret');

// Create signer and middleware
$signer = new RequestSigner(new Key($appId, $secret));
$middleware = new RequestSignerMiddleware($signer);
$stack = HandlerStack::create();
$stack->push($middleware);

$client = new Client(['handler' => $stack]);
$response = $client->get('https://example.com/api/v1/test');

使用HttPlug插件对API请求进行签名

<?php

require_once 'vendor/autoload.php';

use Http\Client\Common\PluginClient;
use Http\Discovery\HttpClientDiscovery;
use IonBazan\AliyunSigner\Key;
use IonBazan\AliyunSigner\RequestSigner;
use IonBazan\AliyunSigner\HttPlug\RequestSignerPlugin;

// Provide credentials
$appId = '12345678';
$secret = base64_encode('secret');

// Create signer and plugin
$signer = new RequestSigner(new Key($appId, $secret));
$plugin = new RequestSignerPlugin($signer);
$pluginClient = new PluginClient(
    HttpClientDiscovery::find(),
    [$plugin]
);

$pluginClient->sendRequest($request);

错误与问题

如果您发现错误或安全漏洞,请创建问题

贡献

请随时提交拉取请求,添加新功能或修复错误。

请注意,代码必须遵循PSR-1、PSR-2、PSR-4和PSR-7。