mastercard / oauth1-signer
此包已被弃用,不再维护。未建议替代包。
生成符合Mastercard API的OAuth签名的零依赖库。
v1.1.4
2022-05-05 10:27 UTC
Requires (Dev)
- guzzlehttp/guzzle: ^6.2
- yoast/phpunit-polyfills: ^1.0
Suggests
- psr/http-message: Allow usage of the PsrHttpMessageSigner class
README
目录
概述
生成符合Mastercard API的OAuth签名的零依赖库。
兼容性
PHP 5.6+
参考
版本控制和弃用策略
使用方法
先决条件
在使用此库之前,您需要在Mastercard开发者门户中设置一个项目。
作为此设置的一部分,您将收到应用程序的凭据
- 消费者密钥(显示在Mastercard开发者门户上)
- 私有请求签名密钥(与Mastercard开发者门户上显示的公钥匹配)
将库添加到您的项目
composer require mastercard/oauth1-signer
加载签名密钥
可以通过调用AuthenticationUtils::loadSigningKey
函数创建一个私钥对象
use Mastercard\Developer\OAuth\Utils\AuthenticationUtils; // … $signingKey = AuthenticationUtils::loadSigningKey( '<insert PKCS#12 key file path>', '<insert key alias>', '<insert key password>');
创建OAuth授权头
执行所有繁重任务的方法是OAuth::getAuthorizationHeader
。您可以直接调用它,只要您提供正确的参数,它就会返回一个字符串,您可以将其添加到请求的Authorization
头中。
use Mastercard\Developer\OAuth\OAuth; // … $consumerKey = '<insert consumer key>'; $uri = 'https://sandbox.api.mastercard.com/service'; $method = 'POST'; $payload = 'Hello world!'; $authHeader = OAuth::getAuthorizationHeader($uri, $method, $payload, $consumerKey, $signingKey);
对HTTP客户端请求对象进行签名
或者,您可以使用一些常用HTTP客户端的辅助类。
这些类在Mastercard\Developer\Signers\
命名空间中提供,会就地修改提供的请求对象,并添加正确的Authorization
头。一旦使用消费者密钥和私钥实例化,这些对象就可以重复使用。
以下简要描述了使用方法,但您也可以参考测试命名空间中的示例。
cURL
POST示例
use Mastercard\Developer\Signers\CurlRequestSigner; // … $method = 'POST'; $uri = 'https://sandbox.api.mastercard.com/service'; $payload = json_encode(['foo' => 'bår']); $headers = array( 'Content-Type: application/json', 'Content-Length: ' . strlen($payload) ); $handle = curl_init($uri); curl_setopt_array($handle, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_CUSTOMREQUEST => $method, CURLOPT_POSTFIELDS => $payload)); $signer = new CurlRequestSigner($consumerKey, $signingKey); $signer->sign($handle, $method, $headers, $payload); $result = curl_exec($handle); curl_close($handle);
GET示例
use Mastercard\Developer\Signers\CurlRequestSigner; // … $method = 'GET'; $baseUri = 'https://sandbox.api.mastercard.com/service'; $queryParams = array('param1' => 'with spaces', 'param2' => 'encoded#symbol'); $uri = $baseUri . '?' . http_build_query($queryParams); $handle = curl_init($uri); curl_setopt_array($handle, array(CURLOPT_RETURNTRANSFER => 1)); $signer = new CurlRequestSigner($consumerKey, $signingKey); $signer->sign($handle, $method); $result = curl_exec($handle); curl_close($handle);
GuzzleHttp
use GuzzleHttp\Psr7\Request; use Mastercard\Developer\Signers\PsrHttpMessageSigner; // … $payload = '{"foo":"bår"}'; $headers = ['Content-Type' => 'application/json']; $request = new Request('POST', 'https://sandbox.api.mastercard.com/service', $headers, $payload); $signer = new PsrHttpMessageSigner($consumerKey, $signingKey); $signer.sign($request);
与OpenAPI Generator API客户端库集成
OpenAPI Generator 可以根据 OpenAPI 规范 生成 API 客户端库。它提供支持多种语言和框架的生成器和库模板。
本项目为您提供了配置 API 客户端时可以使用的类。这些类会在发送请求之前自动添加正确的 Authorization
标头。
当前支持的生成器
php
OpenAPI Generator
可以使用以下命令生成客户端库
openapi-generator-cli generate -i openapi-spec.yaml -g php -o out
另请参阅
PsrHttpMessageSigner
的用法
use GuzzleHttp; use OpenAPI\Client\Api\ServiceApi; use OpenAPI\Client\Configuration use Mastercard\Developer\Signers\PsrHttpMessageSigner; // … $stack = new GuzzleHttp\HandlerStack(); $stack->setHandler(new GuzzleHttp\Handler\CurlHandler()); $stack->push(GuzzleHttp\Middleware::mapRequest([new PsrHttpMessageSigner($consumerKey, $signingKey), 'sign'])); $options = ['handler' => $stack]; $client = new GuzzleHttp\Client($options); $config = new Configuration(); $config->setHost('https://sandbox.api.mastercard.com'); $serviceApi = new ServiceApi($client, $config); // …