0

我正在测试 Drupal 服务模块,它工作正常。我现在从无密钥切换到密钥认证,系统为我生成了这个密钥afw92iej83foijofn23

当我检查node.get时,http://localhost/drupal/admin/build/services/browse/node.get我发现它现在需要 4 个额外的必需参数stringhash, stringdomain_name, stringdomain_time_stamp, stringnonce

论据 (6)

  • stringhash(必需)有效的 API 密钥。
  • stringdomain_name(必需) API 密钥的有效域。
  • stringdomain_time_stamp(必需)用于散列密钥的时间戳。
  • stringnonce (必需)一次使用 nonce 也使用 hash key。
  • intnid(必需)节点 ID。
  • arrayfields (可选)要返回的字段列表

似乎第一个参数不仅仅是 API 密钥,而是一个散列的 API 密钥,与其他字段一起散列。如何生成此 API 密钥?drupal 是否有命令或特定方式希望我散列密钥?

4

1 回答 1

1

所需的散列值是使用 API Key 散列的以下字段:

Timestamp - 以 unix 时间戳格式表示的当前时间。

域 - 您在上面为域输入的值。

Nonce - 一个随机值。

Method - 您要调用的服务方法,例如 node.load

以一些 Drupal 代码为例:

    $domain = 'my domain';
    $timestamp = (string) time();
    $nonce = user_password();
    $hash = hash_hmac('sha256', $timestamp .';'.$domain .';'. $nonce .';'.'user.get', 'remote_api_key');
    $xmlrpc_result = xmlrpc('http://remoteserver.com/services/xmlrpc', 'user.get', $hash, $domain, $timestamp, $nonce, 0);
    if ($xmlrpc_result === FALSE) {
      print '<pre>' . print_r(xmlrpc_error(), TRUE) . '<pre>';
    }
    else {
      print '<pre>' . print_r($xmlrpc_result, TRUE) . '<pre>';

}

这个例子来自这里 http://drupal.org/node/394224

于 2010-09-21T11:49:39.130 回答