1. 11번가에서 제공하는 open API의 java 개발 관련 소스는 좀 틀린 부분이 있다. QA 팀 쪽에 메뉴얼 수정 요청을 했으나..
아직도 안한다.. 니들 맘대로 해.. 나도 귀찮어..
2. ASP와 JAVA로 둘다 개발해보고 최종적으로 관리나 성능면에서 JAVA를 선택함.
3. ASP는 캐릭터셋을 utf-8로 해야 한다.(메뉴얼에는 euc-kr)
set api = createobject("msxml2.serverXmlhttp")
-
api.setRequestHeader "content-type","text/xml; charset=utf-8"
api.setRequestHeader "openapikey",openapikey
api.send xmldata
|
4. JAVA도 당연히 utf-8이다..통신 관련 소스는 이하 정리..
5. 통신 방법에는 Post와 Put이 있다. 메뉴얼 상단의
Method Type : Post (또는 Put) 를 주의깊게 확인하라!
6. 예제 소스는 HttpClient 옛날 버전으로 개발한 듯 하다.. 치사하게 라이브러리를 숨겨서 안알랴줌 해서... 기냥.. 새로 개발함..
7. 사용 라이브러리는 httpclient 4.4 (2015-03-12 현재 최신 버전!!!)
8. 이하 상품등록등에 쓰이는 post 방식 예제 소스(통신부분만 발췌)
클래스의 변수들은 회사 DB쪽에 반영을 위해 필요한 거임.. 통신 부분만 참고하셈..
xml 포맷이야.. 메뉴얼 보고 잘 작성하셈.. 중요한건.. 필수 요소에 대해서 잘 보고 작성 해야 함. 에러가 구체적으로 안나오고.. 그냥 요소가 없다란 식으로 막연하게 나오드라..
-
HttpClient httpclient = HttpClients.createDefault();
try {
HttpPost httpPost = new HttpPost(통신주소);
httpPost.addHeader("openapikey", openapikey);
logger.info("[POST URI] : " + httpPost.getURI());
//System.out.println("[POST URI] : " + httpPost.getURI());
-
-
StringEntity entity = new StringEntity(전송할XML, ContentType.create("text/xml", "UTF-8"));
entity.setChunked(true);
httpPost.setEntity(entity);
System. out. println("[Executing request]: " + httpPost. getRequestLine());
// Export header info --> 디버그 용임...
Header[] tmp = httpPost.getAllHeaders();
System. out. println("[Set Header Info]:");
for (Header header : tmp) {
System. out. println(header. toString());
}
try {
HttpResponse response = httpclient.execute(httpPost);
System. out. println(response. toString());
in = response.getEntity().getContent();
String body = IOUtils. toString(in );
//System.out.println(body);
uptProdInfo(body, 우리회사상품코드, 후처리용상태코드);
System. out. println("End Proc::::::::::::::::::::::::::::::");
} catch (ClientProtocolException e) {
-
-
-
}
} finally {
}
}
|
9. 이하 상품 수정/판매중지/판매재개 등에 사용되는 put 방식 예제 소스. 변수는 신경쓰지 마셈..
httpclient 이후 HttpPut 생성하는게 포인트.. 그 밖에 다른 것은 없다..
-
HttpClient httpclient = HttpClients.createDefault();
try {
HttpPut httpput = new HttpPut(callUrl);
httpput.addHeader("openapikey", openapikey);
logger.info("[PUT URI] : " + httpput.getURI());
//System.out.println("[POST URI] : " + httpPost.getURI());
-
-
StringEntity entity = new StringEntity(inputXML, ContentType.create("text/xml", "UTF-8"));
entity.setChunked(true);
httpput.setEntity(entity);
System. out. println("[Executing request]: " + httpput. getRequestLine());
// Export header info
Header[] tmp = httpput.getAllHeaders();
System. out. println("[Set Header Info]:");
for (Header header : tmp) {
System. out. println(header. toString());
}
System. out. println("statusVal::" + statusVal );
try {
HttpResponse response = httpclient.execute(httpput);
System. out. println(response. toString());
in = response.getEntity().getContent();
-
String body = IOUtils. toString(in );
-
uptProdInfo(body, prma_pcode, statusVal);
System. out. println("End Proc::::::::::::::::::::::::::::::");
} catch (ClientProtocolException e) {
-
-
-
}
} finally {
}
}
|
10. 마지막으로 리턴되는 결과 XML을 parsing 하는 예제.. 뭐 다양하게 개발할 수 있겠지만.. 난 요따구로 했수다..
-
System. out. println("Return XML ::::" + xmlStr );
-
try {
Document document = DocumentBuilderFactory. newInstance(). newDocumentBuilder(). parse(is );
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList cols = (NodeList)xpath.evaluate("/ClientMessage/resultCode", document, XPathConstants.NODESET);
-
for( int idx=0; idx<cols.getLength(); idx++ ){
resultCode = cols.item(idx).getTextContent();
}
if(resultCode.equals("200")){ //정상처리.. 생각해 보니 예외처리 안했다.. 젠장..
NodeList cols1 = (NodeList)xpath.evaluate("/ClientMessage/productNo", document, XPathConstants.NODESET);
-
for( int idx=0; idx<cols1.getLength(); idx++ ){
market_pcode = cols1.item(idx).getTextContent();
}
//여기엔 오픈마켓에서 생성된 상품코드를 DB에 반영하고 DB 상태값을 변경하는게 있었지롱~~
}
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
-
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XPathExpressionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
|
11. 그닥 어렵지는 않았네.. 통신 환경 설정에 시간 대부분이 갔음.. 서비스 신청하고 테스트와 운영 서버 설정을 하는데.. 이게 잘 안됨..
그리고 여러대 운영하면 세미콜론으로 연결하면 된다.
12. 끗~~~! 뭘 봐!!