You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加START_WITH过滤器后NetSuite RestAPI签名无效致401未授权问题

NetSuite REST API带START_WITH过滤器请求返回401无效签名问题

我在创建带START_WITH过滤器的NetSuite REST API请求获取记录详情时,每次都被拒绝,返回错误401 Unauthorized. Invalid Signature;但不添加过滤器的普通请求能正常返回正确响应。

我的签名生成代码如下:

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

   String nonce = getAlphaNumericString();
   ArrayList<String> parameters = new ArrayList<>();
   parameters.add(
    ApplicationConstants.CONSUMER_KEY
        + ApplicationConstants.EQUAL
        + userFields.getConsumerKey());
parameters.add(ApplicationConstants.NONCE + ApplicationConstants.EQUAL + nonce);
parameters.add(
    ApplicationConstants.SIGNATURE_METHOD_KEY
        + ApplicationConstants.EQUAL
        + ApplicationConstants.SIGNATURE_METHOD_VAL);
parameters.add(ApplicationConstants.TIMESTAMP + ApplicationConstants.EQUAL + timestamp);
parameters.add(
    ApplicationConstants.OAUTH_TOKEN + ApplicationConstants.EQUAL + userFields.getTokenId());
parameters.add(
    ApplicationConstants.VERSION_KEY
        + ApplicationConstants.EQUAL
        + ApplicationConstants.VERSION_VAL);
if (offset != null) {
  parameters.add(ApplicationConstants.OFFSET + ApplicationConstants.EQUAL + offset);
}
if (limit != null) {
  parameters.add(ApplicationConstants.LIMIT_CLAUSE + ApplicationConstants.EQUAL + limit);
}
parameters.add("q" + ApplicationConstants.EQUAL + "companyname START_WITH COMP1234");

Collections.sort(parameters);

StringBuffer parametersList = new StringBuffer();

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

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

  SecretKeySpec signingKey =
      new SecretKeySpec(
          (userFields.getConsumerSecret()
                  + ApplicationConstants.AMPERSAND
                  + userFields.getTokenSecret())
              .getBytes(),
          ApplicationConstants.HMACSHA256);

  Mac m = Mac.getInstance(ApplicationConstants.HMACSHA256);
  m.init(signingKey);
  m.update(signatureString.getBytes());
  byte[] res = m.doFinal();
  signature = Base64Coder.encodeLines(res);

} catch (Exception e) {
  e.printStackTrace();
}

return ApplicationConstants.OAUTH
    + ApplicationConstants.REALM
    + ApplicationConstants.EQUAL_START_QUOTES
    + userFields.getAccountId()
    + ApplicationConstants.END_QUOTES
    + ApplicationConstants.CONSUMER_KEY
    + ApplicationConstants.EQUAL_START_QUOTES
    + userFields.getConsumerKey()
    + ApplicationConstants.END_QUOTES
    + ApplicationConstants.OAUTH_TOKEN
    + ApplicationConstants.EQUAL_START_QUOTES
    + userFields.getTokenId()
    + ApplicationConstants.END_QUOTES
    + ApplicationConstants.SIGNATURE_METHOD_KEY
    + ApplicationConstants.EQUAL_START_QUOTES
    + ApplicationConstants.SIGNATURE_METHOD_VAL
    + ApplicationConstants.END_QUOTES
    + ApplicationConstants.TIMESTAMP
    + ApplicationConstants.EQUAL_START_QUOTES
    + timestamp
    + ApplicationConstants.END_QUOTES
    + ApplicationConstants.NONCE
    + ApplicationConstants.EQUAL_START_QUOTES
    + nonce
    + ApplicationConstants.END_QUOTES
    + ApplicationConstants.VERSION_KEY
    + ApplicationConstants.EQUAL_START_QUOTES
    + ApplicationConstants.VERSION_VAL
    + ApplicationConstants.END_QUOTES
    + ApplicationConstants.SIGNATURE
    + ApplicationConstants.EQUAL_START_QUOTES
    + URLEncoder.encode(signature, StandardCharsets.UTF_8)
    + ApplicationConstants.QUOTES;
 }

请求URL示例:

  • 无过滤器:https://1212112-sb1.suitetalk.api.netsuite.com/services/rest/record/v1/customer/
  • 带过滤器:https://1212112-sb1.suitetalk.api.netsuite.com/services/rest/record/v1/customer?q="companyName START_WITH COMP1234"

内容的提问来源于stack exchange,提问作者Shubham Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:26:08