회원 연동은 고객사에서 제공하는 서비스의 회원 인증을 Online Contact의 헬프센터에도 적용하여 회원 문의를 접수하고, 접수한 문의 내역을 다시 확인할 수 있도록 제공하는 기능입니다. 회원 연동은 GET 방식과 POST 방식의 두 가지 타입으로 제공하고 있으며, 연동을 위해서는 Online Contact에서 제공하는 개발 명세서에 따라 API를 개발하여 회원연동 메뉴에 등록해 주셔야 합니다.
① 고객이 APP 내에서 헬프센터에 접속합니다. ② 고객사의 APP은 헬프센터 호출 시 아래 URL 형식으로 호출합니다. - https://{org}.oc.toast.com/{service}/hc/?usercode={유저_아이디}&username={유저_이름}&email={유저_이메일}&phone={유저_전화번호}&token={인증토큰_값} ③ 헬프센터에서 'Token 검증 URL'을 호출합니다.('Token 검증 URL'은 고객사에서 아래 제공된 명세서에 따라 개발 후 Online Contact 회원연동 메뉴에 등록 필요) ④ 토큰 검증 후 정상일 경우 ‘문의하기’ 또는 ‘문의내역’ 페이지에 접속합니다. 이때 검증에 실패할 경우 ‘문의하기’는 비회원으로 접수됩니다.
① 서비스 관리 > 헬프센터 > 회원 연동 접속
② 회원 연동 '활성화' 버튼 클릭
③ '비회원 문의 접수' 활성화 여부 선택(활성화 시 로그아웃 상태에서도 문의 접수 가능, 비활성화 시 로그인 상태에서만 문의 접수 가능)
④ 서비스 성격에 맞는 '로그인 타입' 선택
⑤ 각 타입에 따라 필요한 API 개발 및 URL 설정
Token 생성 샘플은 아래와 같습니다. 파라미터 순서는 반드시 아래와 일치해야 하며, 전체 관리 → 계약 서비스 현황 → 조직 정보 메뉴에서 Online Contact 조직 Key를 확인해주세요. (※ Sample project > application.properties > oc.apikey= 항목에 조직 Key를 저장)
private String getSHA256Token(String serviceId, String usercode, String username, String email, String phone,
String returnUrl, Long time, String apiKey) throws Exception {
StringBuilder sb = new StringBuilder();
// Order by follow number:
sb.append(serviceId); // 1
sb.append("&");
sb.append(usercode); // 2
sb.append("&");
if (StringUtils.isNotBlank(username)) {
sb.append(username); // 3
sb.append("&");
}
if (StringUtils.isNotBlank(email)) {
sb.append(email); // 4
sb.append("&");
}
if (StringUtils.isNotBlank(phone)) {
sb.append(phone); // 5
sb.append("&");
}
if (StringUtils.isNotBlank(memberno)) {
sb.append(memberno); // 6
sb.append("&");
}
if (StringUtils.isNotBlank(returnUrl)) {
sb.append(returnUrl); // 7
sb.append("&");
}
sb.append(time); // 8
SecretKeySpec signingKey = new SecretKeySpec(apiKey.getBytes("UTF-8"), "HmacSHA256");
Mac mac = Mac.getInstance(signingKey.getAlgorithm());
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(sb.toString().getBytes("UTF-8"));
return new String(Base64.encodeBase64(rawHmac));
}
// Sample
// Use this same input, the output is : Ah9M58CQ9RFTShjFuqziQr+0MjmJxN6+bzWxMD71moo=
public static void main(String[] args) throws Exception {
String s = getSHA256Token("hangame", "testusercode", "testUsername", "test@email.com", "123456789",
null, 1660095873001L, "7cf2828608274a49a3f06152b2188927");
System.out.println(s); // Output: Ah9M58CQ9RFTShjFuqziQr+0MjmJxN6+bzWxMD71moo=
}
URL
URL(개발)
인터페이스 명 | 프로토콜 | 호출방향 | 인코딩 | 결과 형식 | 인터페이스 설명 |
---|---|---|---|---|---|
GET 회원인증 | HTTPS | GET | UTF-8 | 서비스 측에서 헬프센터 접속 시, 고객정보 및 암호화 후 생성된 token 값을 파라미터로 URL에 추가해서 호출 |
명칭 | 변수 | 데이터 타입 | 필수 | 설명 |
---|---|---|---|---|
서비스 ID | service | VARCHAR(50) | O | 서비스 ID |
유저 ID | usercode | VARCHAR(50) | O | 유저ID(유니크 값) |
유저 명 | username | VARCHAR(50) | X | 유저 명 |
유저 이메일 | VARCHAR(100) | O | 유저 이메일 | |
전화번호 | phone | VARCHAR(20) | X | 전화번호 |
회원번호 | memberno | VARCHAR(50) | X | 회원번호 |
timestamp | time | LONG | O | 시간 단위: 밀리초 |
인증 Token | token | VARCHAR | O | 다음 파라미터 값과 조직 Key로 계산(SHA256). (선택사항 값이 null 혹은 없을 경우, token 생성에서 제외. 주의사항: 문자열에서 각 값의 순서는 다음과 동일해야 함) SHA256Digest(service + usercode + username + email + phone + memberno + returnUrl + time) |
인터페이스 명 | 프로토콜 | 호출방향 | 인코딩 | 결과 형식 | 인터페이스 설명 |
---|---|---|---|---|---|
Token 검증 URL | HTTPS | GET | UTF-8 | JSON | 서비스 측에서 token과 usercode로 로그인 상태 확인 후 JSON 형태 결과 값을 전송 |
명칭 | 변수 | 데이터 타입 | 필수 | 설명 |
---|---|---|---|---|
유저 ID | usercode | VARCHAR(50) | O | 유저 ID(유니크 값) |
서비스 측에서 생성한 Token | token | VARCHAR | O | 사용자가 GET 방식을 통해 Online Contact에 로그인 시, Online Contact으로 전달하는 token |
로그인:
{
"login": "true",
"usercode":"usercodeXXX"
}
로그아웃:
{
"login": "false",
"usercode": null
}