Callback URL
Table of contents
사용자가 광고참여를 통하여 획득한 포인트를 개발사의 서버에서 관리하실 경우 다음과 같이 진행합니다.
- 매체 정보 설정 화면에서 아래와 같이 ‘포인트 관리’ 항목을 ‘자체서버에서 관리’로 선택합니다.
- URL 항목에 포인트 적립 정보를 받을 URL을 입력합니다.
이후에는 사용자에게 포인트가 적립될 때 마다 실시간으로 위 URL로 적립 정보를 받을 수 있습니다.
호출방식
HTTP POST
Parameters
파라메터 | 상세 내용 | 최대길이 |
---|---|---|
seq_id | 포인트 지급에 대한 고유한 ID 값이다. URL이 반복적으로 호출되더라도 이 값을 사용하여 중복지급여부를 확인할 수 있다. | string(50) |
pay_pnt | 사용자에게 지급되어야 할 포인트 값이다. | long |
md_user_nm | 게시앱에서 사용자 식별을 하기 위하여 전달되는 값이다. 이 값을 받기 위해서는 매체앱내에서 setUserName() API를 사용하여 사용자 식별 값을 설정하여야 한다. | string(256) |
md_chk | 전달된 값이 유효한지 여부를 판단하기 위하여 제공된다. 이 값은 app_key + md_user_nm + seq_id 의 MD5 Hash 값이다. app_key 값은 앱 등록시 부여된 값으로 Tnk 사이트에서 확인할 수 있다. | string(32) |
app_id | 사용자가 참여한 광고앱의 고유 ID 값이다. | long |
pay_dt | 포인트 지급시각이다. (System milliseconds) 예) 1577343412017 | long |
app_nm | 참여한 광고명 이다. | string(120) |
리턴값 처리
Tnk 서버에서는 위 URL을 호출하고 HTTP 리턴코드로 200이 리턴되면 정상적으로 처리되었다고 판단합니다. 만약 200이 아닌 값이 리턴된다면 Tnk 서버는 비정상처리로 판단하고 이후에는 5분 단위 및 1시간 단위로 최대 24시간 동안 반복적으로 호출합니다.
- 중요! 동일한 Request가 반복적으로 호출될 수 있으므로 seq_id 값을 사용하시어 반드시 중복체크를 하셔야합니다.
Callback URL 구현 예시 (Java)
// 해당 사용자에게 지급되는 포인트
int payPoint = Integer.parseInt(request.getParameter("pay_pnt"));
// tnk 내부에서 생성한 고유 번호로 이 거래에 대한 Id이다.
String seqId = request.getParameter("seq_id");
// 전달된 파라메터가 유효한지 여부를 판단하기 위하여 사용한다. (아래 코딩 참고)
String checkCode = request.getParameter("md_chk");
// 게시앱에서 사용자 구분을 위하여 사용하는 값(전화번호나 로그인 ID 등)을 앱에서 TnkSession.setUserName()으로 설정한 후 받도록한다.
String mdUserName = request.getParameter("md_user_nm");
// 앱 등록시 부여된 app_key (tnk 사이트에서 확인가능)
String appKey = "d2bbd...........19c86c8b021";
// 유효성을 검증하기 위하여 아래와 같이 verifyCode를 생성한다. DigestUtils는 Apache의 commons-codec.jar 이 필요하다. 다른 md5 해시함수가 있다면 그것을 사용해도 무방하다.
String verifyCode = DigestUtils.md5Hex(appKey + mdUserName + seqId);
// 생성한 verifyCode와 chk_cd 파라메터 값이 일치하지 않으면 잘못된 요청이다.
if (checkCode == null || !checkCode.equals(verifyCode)) {
// 오류
log.error("tnkad() check error : " + verifyCode + " != " + checkCode);
} else {
log.debug("tnkad() : " + mdUserName + ", " + seqId);
// 포인트 부여하는 로직수행 (예시)
purchaseManager.getPointByAd(mdUserName, payPoint, seqId);
}