SSO 통합을 TBA (사용자 이름과 암호)로 변환하는 과정이 진행 중입니다. 최근 2016.2 업그레이드 이후 java 코드는 완전히 작동하지 않았습니다 (참고로, 업그레이드 전에는 작동했습니다). 현재 문제는 403 또는 잘못된 타임 스탬프 오류가 발생한다는 것입니다. NetSutie로 작업하면서 이러한 변화가 발생했을 때 어떤 상관 관계도 보이지 않습니다.문제 TBA를 통해 NetSuite에 연결
저는 Java 전문가와는 거리가 멀기 때문에 여기있는 사람이이 코드를 잘못 해석했는지 알 수 있기를 바랍니다. (NetSuite PHP 툴킷을 사용하여 작동시킬 수있었습니다.)
다음은 NetSuite의 아이디어를 사용하여 약간 수정 한 Java 개발자가 가장 많이 얻은 기본 코드입니다.
public class Main{
public static void main(String[]args){
String compID="compID";
String consumerKey="consumerKey";
String consumerSecret="consumerSecret";
String tokenId="tokenId";
String tokenSecret="tokenSecret";
String restletURL="https://rest.sandbox.netsuite.com/app/site/hosting/restlet.nl?script=123&deploy=2";
Token token=new Token(tokenId,tokenSecret);
String nonce=RandomStringUtils.randomNumeric(9);
long ms=new java.util.Date().getTime();
ms=(long)Math.floor(ms/1000);
String time=ms+"";
String baseString=compID+"&"+consumerKey+"&"+tokenId+"&"+nonce+"&"+time;
String key=consumerSecret+"&"+tokenSecret;
byte[] bytes=key.getBytes();
SecretKeySpec secretkey=new SecretKeySpec(bytes,"HmacSHA1");
Mac keymac=null;
try{
keymac=Mac.getInstance("HmacSHA1");
keymac.init(secretkey);
}catch(NoSuchAlgorithmException e){
e.printStackTrace();
}catch(InvalidKeyException e){
e.printStackTrace();
}
byte[] hash=keymac.doFinal(baseString.getBytes());
String result=new String(Base64.encodeBase64(hash,false));
String oauth_timestamp = Instant.now().toEpochMilli()+"";
String headerAuthorization="OAuth realm=\""+compID+"\", oauth_consumer_key=\""+consumerKey+"\", oauth_token=\""+token+"\", oauth_nonce=\""+nonce+"\", oauth_timestamp=\""+oauth_timestamp+"\", oauth_signature_method=\"HMAC-SHA1\", oauth_version=\"1.0\", oauth_signature=\""+result+"\"";
System.out.println(headerAuthorization);
HttpClient httpclient=HttpClientBuilder.create().build();
HttpGet request=new HttpGet(restletURL);
request.setHeader(HttpHeaders.AUTHORIZATION,headerAuthorization);
String response="";
try{
//Handle the response from NetSuite
ResponseHandler<String> responseHandler=new ResponseHandler<String>(){
@Override
public String handleResponse(final HttpResponse response)throws ClientProtocolException,IOException{
int status=response.getStatusLine().getStatusCode();
//If the call is successful
if(status>=200 && status<300){
HttpEntity entity=response.getEntity();
return entity!=null?EntityUtils.toString(entity):null;
}else{
throw new ClientProtocolException("Unexpected response status: "+status);
}
}
};
response=httpclient.execute(request,responseHandler);
System.out.println(response);
}catch(Exception e){
e.printStackTrace();
}
}
}
WebServices (vs RESTlet)에 연결하려면 어떻게 사용할 수 있습니까? – MTranchant