Я продолжаю получать сообщение об ошибке «Неверная подпись» в NETSUITE.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Я продолжаю получать сообщение об ошибке «Неверная подпись» в NETSUITE.

Сообщение Anonymous »

Я пытаюсь войти в Netsuite через API, но он продолжает выдавать ошибку «Неверная подпись». Я проверил другие ответы и блоги, но не смог найти того, чего не хватает. Я изменил порядок и добавил параметры вручную в алфавитном порядке, но ошибка все равно возникла.
Идентификатор учетной записи содержит символ «_», а URL-адрес содержит символ «-».
Один или два раза во время случайного тестирования он показал неверную ошибку метки времени, но все равно не работал, и я точно не помню, какая ошибка вызвала эту проблему.

Я предоставляю все необходимые данные в качестве входных данных, например< /p>
  • Идентификатор токена
  • секрет токена
  • ключ клиента
  • секрет клиента
  • Идентификатор аккаунта
  • URL
Вот мой код:public class OAuthSignatureGenerator {

Encoder encode;

public String generateOauthHeader(String method, UserFields userFields, String baseUrl) {
long timestamp = new Date().getTime() / 1000;

String nonce = getAlphaNumericString();

ArrayList parameters = new ArrayList();
parameters.add(ApplicationConstants.CONSUMER_KEY + "=" + userFields.getConsumerKey());
parameters.add(ApplicationConstants.NONCE + "=" + nonce);
parameters.add(ApplicationConstants.SIGNATURE_METHOD_KEY + "="
+ ApplicationConstants.SIGNATURE_METHOD_VAL);
parameters.add(ApplicationConstants.TIMESTAMP + "=" + timestamp);
parameters.add(ApplicationConstants.OAUTH_TOKEN + "=" + userFields.getTokenId());
parameters.add(ApplicationConstants.VERSION_KEY + "=" + ApplicationConstants.VERSION_VAL);

/*
* parameters.add("oauth_consumer_key=\"" + userFields.getConsumerKey()+"\"");
* parameters.add(ApplicationConstants.NONCE + "=\"" + nonce+"\"");
* parameters.add(ApplicationConstants.SIGNATURE_METHOD_KEY + "=\"" +
* ApplicationConstants.SIGNATURE_METHOD_VAL+"\"");
* parameters.add(ApplicationConstants.TIMESTAMP + "=\"" + timestamp+"\"");
* parameters.add(ApplicationConstants.OAUTH_TOKEN + "=\"" + userFields.getTokenId()+"\"");
* parameters.add(ApplicationConstants.VERSION_KEY + "=\"" +
* ApplicationConstants.VERSION_VAL+"\"");
*/

Collections.sort(parameters);

StringBuffer parametersList = new StringBuffer();

for (int i = 0; i < parameters.size(); i++) {
parametersList.append(((i > 0) ? "&" : "") + parameters.get(i));
}

String signature = null;
try {
String signatureString = method + "&" + URLEncoder.encode(baseUrl, StandardCharsets.UTF_8)
+ "&" + URLEncoder.encode(parametersList.toString(), StandardCharsets.UTF_8);

/*
* method + "&" + URLEncoder.encode(baseUrl, StandardCharsets.UTF_8.toString()) +
* URLEncoder.encode("&" + ApplicationConstants.CONSUMER_KEY + "=\"" +
* userFields.getConsumerKey() + "\"&" + ApplicationConstants.NONCE + "=\"" + nonce + "\"&" +
* ApplicationConstants.SIGNATURE_METHOD_KEY + "=\"" +
* ApplicationConstants.SIGNATURE_METHOD_VAL + "\"&" + ApplicationConstants.TIMESTAMP + "=\""
* + timestamp + "\"&" + ApplicationConstants.TOKEN_ID + "=\"" + userFields.getTokenId() +
* "\"&" + ApplicationConstants.VERSION_KEY + "=\"" + ApplicationConstants.VERSION_VAL + "\"",
* StandardCharsets.UTF_8.toString());
*/

System.out.println("SignatureString = " + signatureString);
// String signKey = URLEncoder.encode(userFields.getConsumerSecret(), StandardCharsets.UTF_8)
// + "&" + URLEncoder.encode(userFields.getTokenSecret(), StandardCharsets.UTF_8);// +
// userFields.getTokenSecret();

SecretKeySpec signingKey = new SecretKeySpec(
(userFields.getConsumerSecret() + "&" ).getBytes(),
"HmacSHA256");

Mac m = Mac.getInstance("HmacSHA256");
m.init(signingKey);
m.update(signatureString.getBytes());
byte[] res = m.doFinal();
signature = Base64Coder.encodeLines(res);
// URLEncoder.encode(Base64.getEncoder().encodeToString(res), StandardCharsets.UTF_8);

/*
* OAuthHmacSigner signer = new OAuthHmacSigner(); signer.clientSharedSecret =
* userFields.getConsumerSecret(); signer.tokenSharedSecret = userFields.getTokenSecret();
* GenericUrl urlgen = new GenericUrl(baseUrl); OAuthParameters oauthParameters = new
* OAuthParameters(); oauthParameters.consumerKey = userFields.getConsumerKey();
* oauthParameters.token = userFields.getTokenId(); oauthParameters.nonce = nonce;
* oauthParameters.signatureMethod = "HMAC-SHA256"; oauthParameters.timestamp =
* String.valueOf(timestamp); oauthParameters.version = ApplicationConstants.VERSION_VAL;
* oauthParameters.signer = signer; oauthParameters.computeSignature(method, urlgen);
* oauthParameters.realm = userFields.getAccountId();
*
* signature = oauthParameters.signature;
*/

} catch (Exception e) {
System.err.println("Unable to append signature");
}

System.out.println("signature= " + signature);

String authHeaderString = "OAuth " + ApplicationConstants.REALM + "=\""
+ userFields.getAccountId() + "\"," + ApplicationConstants.CONSUMER_KEY + "=\""
+ userFields.getConsumerKey() + "\"," + ApplicationConstants.OAUTH_TOKEN + "=\""
+ userFields.getTokenId() + "\"," + ApplicationConstants.SIGNATURE_METHOD_KEY + "=\""
+ ApplicationConstants.SIGNATURE_METHOD_VAL + "\"," + ApplicationConstants.TIMESTAMP + "=\""
+ timestamp + "\"," + ApplicationConstants.NONCE + "=\"" + nonce + "\","
+ ApplicationConstants.VERSION_KEY + "=\"" + ApplicationConstants.VERSION_VAL + "\","
+ ApplicationConstants.SIGNATURE + "=\"" // + signature
+ URLEncoder.encode(signature.trim(), StandardCharsets.UTF_8) + "\"";

System.out.println("authHeaderString = " + authHeaderString);

return authHeaderString;
}

String getAlphaNumericString() {
return UUID.randomUUID().toString().replace("-", "").substring(0, 10);
}
}



Подробнее здесь: https://stackoverflow.com/questions/695 ... n-netsuite
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»