使用 php 和 GET 方法在 netsuite 中实现 Oauth
Oauth implementation in netsuite using php and method GET
这个答案对我来说很好,但只适用于 POST 方法
我正在尝试使用相同的技术,但使用 GET 方法并使其正常工作,这是我的代码
<?php
//date_default_timezone_set('America/New_York');
define("NETSUITE_URL", 'https://5240409-sb1.restlets.api.netsuite.com/app/site/hosting/restlet.nl');
define("NETSUITE_SCRIPT_ID", 'XXXXXX');
define("NETSUITE_DEPLOY_ID", 'XXXXXX');
define("NETSUITE_ACCOUNT", 'XXXXXX');
define("NETSUITE_CONSUMER_KEY", 'XXXXXX');
define("NETSUITE_CONSUMER_SECRET", 'XXXXXX');
define("NETSUITE_TOKEN_ID", 'XXXXXX');
define("NETSUITE_TOKEN_SECRET", 'XXXXXX');
define("NETSUITE_CLIENT", 'XXXXXX');
function sendOrderToNS($details) {
$oauth_nonce = md5(mt_rand());
$oauth_timestamp = time();
$oauth_signature_method = 'HMAC-SHA1';
$oauth_version = "1.0";
$base_string =
"GET&" . 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
. "&script=" . NETSUITE_SCRIPT_ID
. "&client=" . NETSUITE_CLIENT
);
$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) .'"';
var_dump($auth_header);
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, NETSUITE_URL . '?&script=' . NETSUITE_SCRIPT_ID . '&deploy=' . NETSUITE_DEPLOY_ID . '&client=' . NETSUITE_CLIENT);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: ' . $auth_header,
'Content-Type: application/json'
]);
$result = curl_exec($ch);
var_dump($result);
curl_close($ch);
}
sendOrderToNS();
我收到以下错误:
"{"error" : {"code" : "INVALID_LOGIN_ATTEMPT", "message" : "Invalid login attempt."}}"
我很确定这个错误是因为签名格式错误,但我不知道我做错了什么
问题出在查询参数上,它需要按字母顺序排列,所以不用
$base_string =
"GET&" . 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
. "&script=" . NETSUITE_SCRIPT_ID
. "&client=" . NETSUITE_CLIENT
);
我不得不做
$base_string =
"GET&" . urlencode(NETSUITE_URL) . "&" .
urlencode(
"client=" . NETSUITE_CLIENT
. "&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
. "&script=" . NETSUITE_SCRIPT_ID
);
这个答案对我来说很好,但只适用于 POST 方法
我正在尝试使用相同的技术,但使用 GET 方法并使其正常工作,这是我的代码
<?php
//date_default_timezone_set('America/New_York');
define("NETSUITE_URL", 'https://5240409-sb1.restlets.api.netsuite.com/app/site/hosting/restlet.nl');
define("NETSUITE_SCRIPT_ID", 'XXXXXX');
define("NETSUITE_DEPLOY_ID", 'XXXXXX');
define("NETSUITE_ACCOUNT", 'XXXXXX');
define("NETSUITE_CONSUMER_KEY", 'XXXXXX');
define("NETSUITE_CONSUMER_SECRET", 'XXXXXX');
define("NETSUITE_TOKEN_ID", 'XXXXXX');
define("NETSUITE_TOKEN_SECRET", 'XXXXXX');
define("NETSUITE_CLIENT", 'XXXXXX');
function sendOrderToNS($details) {
$oauth_nonce = md5(mt_rand());
$oauth_timestamp = time();
$oauth_signature_method = 'HMAC-SHA1';
$oauth_version = "1.0";
$base_string =
"GET&" . 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
. "&script=" . NETSUITE_SCRIPT_ID
. "&client=" . NETSUITE_CLIENT
);
$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) .'"';
var_dump($auth_header);
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, NETSUITE_URL . '?&script=' . NETSUITE_SCRIPT_ID . '&deploy=' . NETSUITE_DEPLOY_ID . '&client=' . NETSUITE_CLIENT);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: ' . $auth_header,
'Content-Type: application/json'
]);
$result = curl_exec($ch);
var_dump($result);
curl_close($ch);
}
sendOrderToNS();
我收到以下错误:
"{"error" : {"code" : "INVALID_LOGIN_ATTEMPT", "message" : "Invalid login attempt."}}"
我很确定这个错误是因为签名格式错误,但我不知道我做错了什么
问题出在查询参数上,它需要按字母顺序排列,所以不用
$base_string =
"GET&" . 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
. "&script=" . NETSUITE_SCRIPT_ID
. "&client=" . NETSUITE_CLIENT
);
我不得不做
$base_string =
"GET&" . urlencode(NETSUITE_URL) . "&" .
urlencode(
"client=" . NETSUITE_CLIENT
. "&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
. "&script=" . NETSUITE_SCRIPT_ID
);