ion-bazan / aliyun-http-signer
PSR-7兼容的阿里云API网关请求签名实现。与Guzzle ⛽️ 和HttPlug 🐘集成。
v1.1.0
2023-05-05 15:42 UTC
Requires
- php: >=7.2
- psr/http-message: ^1.0 || ^2.0
- ramsey/uuid: ^3.0 || ^4.0 || ^5.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- guzzlehttp/guzzle: ^6.0 || ^7.0
- infection/infection: ~0.15
- laminas/laminas-diactoros: ^2.2
- php-http/client-common: ^2.0
- phpunit/phpunit: ^8.0 || ^9.0
Suggests
- guzzlehttp/guzzle: ^6.0|^7.0, to use Guzzle Middleware
- ion-bazan/guzzle-bundle-aliyun-signer-plugin: to integrate with Guzzle Bundle
- laminas/laminas-diactoros: ^2.2, to build HTTP requests
- php-http/client-common: ^2.0, to use HttPlug plugin
README
此库实现了针对PSR-7兼容请求的阿里云API网关请求签名计算。它与Guzzle和HttPlug集成,但也可以与任何PSR-7兼容客户端一起使用。
安装
使用Composer通过以下命令安装包:
composer require ion-bazan/aliyun-http-signer
使用方法
Symfony集成
将包与Symfony集成的最简单方法是使用Guzzle Bundle的GuzzleBundleAliyunSignerPlugin。
要与其他Bundle(如HttplugBundle)一起使用,只需将RequestSigner
、Key
和RequestSignerPlugin
作为服务注册,并将凭证注入到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。