我尝试将API雷神与我的Proyect连接起来。 我从立面上使用了HTTP类,并收到消息“无效的垃圾尝试”。
array:1 [▼
"error" => array:2 [▼
"code" => "INVALID_LOGIN_ATTEMPT"
"message" => "Invalid login attempt."
]
]
这是我的块编码:
use Illuminate\Support\Facades\Http;
public function test() {
$realm = "*****";
$consumerKey = "*********";
$consumerSecret = "********";
$token = "********";
$tokenSecret = "********";
$oauthTimestamp = time();
$oauthNonce = bin2hex(random_bytes(6));
$baseUrl = 'http**********';
$params = [
'script' => '****',
'deploy' => '*'
];
$body = json_encode(["mensaje" => "test message"], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
$oauthBodyHash = base64_encode(hash('sha256', $body, true));
$oauthBodyHash = rawurlencode($oauthBodyHash);
$oauthParams = [
'realm' => $realm,
'oauth_consumer_key' => $consumerKey,
'oauth_token' => $token,
'oauth_signature_method' => 'HMAC-SHA256',
'oauth_timestamp' => $oauthTimestamp,
'oauth_nonce' => $oauthNonce,
'oauth_version' => '1.0',
'oauth_body_hash' => $oauthBodyHash
];
$oauthSignature = generateOauthSignature('GET', $baseUrl, array_merge($oauthParams, $params), $consumerSecret, $tokenSecret);
$oauthParams['oauth_signature'] = rawurlencode($oauthSignature);
$params = Arr::map($oauthParams, function ( $value, $key) {
return '"' . $value . '"';
});
$authorizationHeader = "OAuth " . urldecode(http_build_query($params, '', ','));
$fullUrl = $baseUrl . '?' . http_build_query($params);
$response = Http::withHeaders([
'Content-Type' => 'application/json',
'Authorization' => $authorizationHeader
])->timeout(0)
->get($fullUrl);
$data = $response->json();
dd($data); //
}
function generateOauthSignature($method, $baseUrl, $params, $consumerSecret, $tokenSecret) {
unset($params['realm']);
ksort($params);
$encodedParams = [];
foreach ($params as $key => $value) {
$encodedParams[] = rawurlencode($key) . "=" . rawurlencode($value);
}
$paramString = implode("&", $encodedParams);
$baseString = strtoupper($method) . "&" . rawurlencode($baseUrl) . "&" . rawurlencode($paramString);
$signingKey = rawurlencode($consumerSecret) . "&" . rawurlencode($tokenSecret);
$signature = base64_encode(hash_hmac('sha256', $baseString, $signingKey, true));
return $signature;
}
在编码我的请愿书之前,我在邮递员中得到了证明,并获得了良好的回应,但是尽管我使用了相同的证书,但我却没有在我的Proyect Laravel中。
如果有人连接了Laravel的API雷神,请告诉您如何。我很感激
我尝试解决我的问题,并将MA Proyect Laravel与我的API RESTET连接到NetSuite
我以前做过此事,没有遇到这个问题。确保您的OAuth签名和标头是按NetSuite期望的方式构建的,并且您的请求方法和参数与Postman中有效的内容相匹配。对于NetSuite雷斯特,典型的方法是在“授权”标题中发送OAUTH参数,并将“脚本”和“部署”作为查询参数。另外,如果您要在请求主体中发送JSON数据,则通常需要在签名中进行帖子调用和“ OAuth_body_hash”。这是一个可能会有所帮助的示例:
这只是示例代码。确保在Laravel中使用相同的HTTP方法,该方法在Postman中使用,在查询字符串中保留“脚本”和“部署”值,并在发送JSON内容(如果您发送JSON内容)中包含正确的“ OAuth_body_hash”。我认为最常见的问题是与要求与要求相比,对签名的生成方式或OAuth标头的格式不匹配