php - NetSuite 使用 PHP oAuth 1.0 连接时出现错误
问题描述
您好我想使用 PHP 连接 netsuite。我在 Postman 中尝试过,它工作正常。请求正在发送,我得到了结果。
所以我想使用 PHP 执行同样的事情。所以我写了以下代码。
<?php
define("NETSUITE_URL", 'https://xxxx.restlets.api.netsuite.com/app/site/hosting/restlet.nl');
define("NETSUITE_SCRIPT_ID", 'xx');
define("NETSUITE_DEPLOY_ID", 'xx');
define("NETSUITE_ACCOUNT", 'xxxx');
define("NETSUITE_CONSUMER_KEY", 'xxxxxxx');
define("NETSUITE_CONSUMER_SECRET", 'xxxxxx');
define("NETSUITE_TOKEN_ID", 'xxxxxx');
define("NETSUITE_TOKEN_SECRET", 'xxxxxx');
$details = array(
'status' => 'Testing'
);
sendOrderToNS($details);
function sendOrderToNS($details)
{
$data_string = json_encode($details);
$oauth_nonce = md5(mt_rand());
$oauth_timestamp = time();
$oauth_signature_method = 'HMAC-SHA1';
$oauth_version = "1.0";
$base_string = "POST&" . urlencode(NETSUITE_URL) . "&" . urlencode("deploy=" . NETSUITE_DEPLOY_ID . "&oauth_consumer_key=" . NETSUITE_CONSUMER_KEY . "&oauth_nonce=" . $oauth_nonce . "&oauth_signature_method=" . $oauth_signature_method . "&oauth_timestamp=" . $oauth_timestamp . "&oauth_token=" . NETSUITE_TOKEN_ID . "&oauth_version=" . $oauth_version . "&realm=" . NETSUITE_ACCOUNT . "&script=" . NETSUITE_SCRIPT_ID);
$sig_string = urlencode(NETSUITE_CONSUMER_SECRET) . '&' . urlencode(NETSUITE_TOKEN_SECRET);
$signature = base64_encode(hash_hmac("sha1", $base_string, $sig_string, true));
$auth_header = "OAuth " . 'oauth_signature="' . rawurlencode($signature) . '", ' . 'oauth_version="' . rawurlencode($oauth_version) . '", ' . 'oauth_nonce="' . rawurlencode($oauth_nonce) . '", ' . 'oauth_signature_method="' . rawurlencode($oauth_signature_method) . '", ' . 'oauth_consumer_key="' . rawurlencode(NETSUITE_CONSUMER_KEY) . '", ' . 'oauth_token="' . rawurlencode(NETSUITE_TOKEN_ID) . '", ' . 'oauth_timestamp="' . rawurlencode($oauth_timestamp) . '", ' . 'realm="' . rawurlencode(NETSUITE_ACCOUNT) . '"';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, NETSUITE_URL . '?&script=' . NETSUITE_SCRIPT_ID . '&deploy=' . NETSUITE_DEPLOY_ID);
curl_setopt($ch, CURLOPT_POST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: ' . $auth_header, 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string) ]);
$content = curl_exec($ch);
print_r($content);
curl_close($ch);
}
?>
但我收到以下错误:
{"error" : {"code" : "INVALID_LOGIN_ATTEMPT", "message" : "Invalid login attempt."}}
我该如何解决这个问题?
解决方案
您错过了网址中的帐户 ID
curl_setopt($ch, CURLOPT_URL, NETSUITE_URL . '?&script=' . NETSUITE_SCRIPT_ID . '&deploy=' . NETSUITE_DEPLOY_ID . '&realm=' . NETSUITE_ACCOUNT );
推荐阅读
- dart - 如何处理可扩展表单上的控制器 TextField
- c# - 试图从 SQL Server Profiler 获取过程名称,而是显示“sp_reset_connection”
- php - AWS SDK PHP - 如何通过一个链接加载多个文件?如何创建一个 zip 文件?
- java - 如何创建从 Activity 底部绘制的 listView?
- batch-file - 在没有管理员权限的情况下在特定位置打开 cmd 的 .bat 文件
- php - memcached 不存储具有特定键的复杂项目数组
- python - 如何在python中对维基百科类别进行分组?
- c# - .NET 客户端应用程序连接到 WebSocket 服务器的最佳方式是什么?
- javascript - 优化javascript显示风格
- java - 如何使用 selenium webdriver 使 Google Chrome JavaScript 控制台持久化?