我访问的API需要一个自定义授权标头,它是在实例化客户端时传入的publicKey和API端点的完整URI的组合。我想从服务描述中提取baseUrl和操作uri并使用它们来创建授权头,但是在调用实例化客户端时我无法弄清楚如何执行此操作。
这是服务说明:
{
"name": "FranchiseSystem",
"apiVersion": "1",
"baseUrl": "https://apidev.example.com",
"description": "REST API client",
"operations": {
"GetFranchiseList": {
"httpMethod": "GET",
"uri": "v1/franchise",
"summary": "Returns an array of franchises."
},
"GetReviews": {
"httpMethod": "GET",
"uri": "v1/review",
"summary": "Returns an array of reviews."
}
}
}
这是客户端设置:
$testClient = new JunknetClient([
'publicKey' => '1234567890',
]);
这是对实例化客户端的调用,其名称为操作:
$result = $testClient->GetFranchiseList();
或:
$result = $testClient->GetReviews();
当调用testClient-> GetFranchiseList时,我需要使用publicKey创建授权头,并为GetFranchiseList创建baseUrl和uri的值。
当调用testClient-> GetReviews时,我需要使用publicKey创建授权标头,并为GetReviews创建baseUrl和uri的值。
答案 0 :(得分:0)
您可能需要查看Guzzle文档中的以下链接。
答案 1 :(得分:0)
我能够通过使用和事件发射器和订户来解决我的问题。它有点乱,但它完成了工作。
private function handleCredentialsOptions(Collection $config) {
//Build authorization header from $config values
$this->getHttpClient()->getEmitter()->on('before',
function (BeforeEvent $e) use(&$config) {
$this->getHttpClient()->setDefaultOption('headers', [
'Authentication' => '',
]);
$path = $e->getRequest()->getUrl();
$authValue = $config['publicKey'].';;';
$authValue .= time().';';
$authValue .= strtoupper(md5($config['privateKey'] . $path));
$this->getHttpClient()->setDefaultOption('headers', [
'Authentication' => $authValue,
]);
});
}