0

我正在访问的 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 的值创建授权标头。

4

2 回答 2

0

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

  1. 请求选项 - 标头
  2. 认证参数
于 2015-03-30T20:15:05.050 回答
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,
    ]);
  });
}
于 2015-04-10T15:48:04.677 回答