返回

如何生成有效的 OAuth1.0 头信息来调用 NetSuite RESTlet?

php

为 NetSuite 生成 OAuth1.0 头信息

问题

NetSuite 实例调用 RESTlet 时,如何生成有效的 OAuth1.0 头信息?

解决方案

步骤 1:创建授权器数组

构建一个包含 OAuth1.0 参数的数组,包括消费者密钥、令牌密钥、时间戳、随机数等。

步骤 2:创建基字符串

按照 NetSuite 规范创建基字符串,它包含请求方法、URL、消费者密钥、令牌密钥等信息。

步骤 3:创建 HMAC 签名密钥

使用消费者密钥和令牌密钥创建 HMAC 签名密钥。

步骤 4:将签名添加到授权器数组

将使用密钥生成的 HMAC 签名添加到授权器数组中。

步骤 5:对授权器值进行 URL 编码

对授权器数组中的值进行 URL 编码,以确保兼容性。

步骤 6:将授权器转换为最终字符串

将编码后的授权器值转换为键值对字符串数组。

步骤 7:生成 OAuth 头信息

最后,生成以 "OAuth " 开头的头信息,包含授权器中的所有参数。

辅助函数

getOAuthNonce(): 生成随机字符串。

flattenAssociativeArray(): 将关联数组转换为键值对字符串数组。

restletBaseString(): 根据 NetSuite 规范创建基字符串。

代码示例

以下代码示例演示了为 NetSuite RESTlet 调用生成 OAuth1.0 头信息:

<?php
// ...

$url = COMPANY_URL."?script=2211&deploy=1&id=28099";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: ".createOAuthHeader("GET", $url),
    "Content-type: application/json",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$empty = curl_exec($ch);
// ...
?>

注意

  • 使用 NetSuite 提供的 restletBaseString() 函数创建基字符串。
  • 确保授权参数(消费者密钥、令牌密钥等)正确无误。
  • 检查生成的 OAuth 头信息与其他工具(如 Postman)中的有效头信息是否匹配。

结论

通过遵循这些步骤,您可以生成有效的 OAuth1.0 头信息,以授权 NetSuite RESTlet 调用。通过实施适当的安全措施,您可以保护您的 NetSuite 帐户和数据。

常见问题解答

  1. OAuth1.0 是否过时?
    OAuth1.0 已过时,建议使用 OAuth2.0。然而,NetSuite 仍然支持 OAuth1.0。

  2. 如何解决 OAuth1.0 授权错误?
    检查您的 OAuth 参数是否正确,包括消费者密钥、令牌密钥、时间戳和签名。确保您的时钟与 NetSuite 的时钟同步。

  3. OAuth1.0 和 OAuth2.0 有什么区别?
    OAuth2.0 引入了新的安全措施和更简单的授权流程。

  4. 我可以使用哪种工具来生成 OAuth1.0 头信息?
    有各种库和工具可用于生成 OAuth1.0 头信息,如 php-oauthlib 和 OAuth.io。

  5. 如何在 PHP 中使用 OAuth1.0?
    您可以使用 php-oauthlib 库在 PHP 中实现 OAuth1.0。