Guzzle客户端服务描述中的每个操作的不同授权标头

时间:2015-03-27 16:45:10

标签: guzzle

我访问的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的值。

2 个答案:

答案 0 :(得分:0)

您可能需要查看Guzzle文档中的以下链接。

  1. Request Options - Headers
  2. Authentication Parameters

答案 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,
    ]);
  });
}