与API RESTET NETSUITE的整合laravel

问题描述 投票:0回答:1

我尝试将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”。这是一个可能会有所帮助的示例:

php laravel-11 netsuite-rest-api
1个回答
0
投票

这只是示例代码。确保在Laravel中使用相同的HTTP方法,该方法在Postman中使用,在查询字符串中保留“脚本”和“部署”值,并在发送JSON内容(如果您发送JSON内容)中包含正确的“ OAuth_body_hash”。我认为最常见的问题是与要求与要求相比,对签名的生成方式或OAuth标头的格式不匹配

	

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.