mastercard/oauth1-signer

此包已被弃用,不再维护。未建议替代包。

生成符合Mastercard API的OAuth签名的零依赖库。

v1.1.4 2022-05-05 10:27 UTC

This package is auto-updated.

Last update: 2024-03-21 16:50:48 UTC


README

maintenance-status

目录

概述

生成符合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);
// …