[DEPRECATED] Feed(Web) 포스트백 API 연동

다음 연동은 포인트 시스템을 보유한 퍼블리셔가 적용해야 합니다.

사용자에게 보상을 지급하기 위해서 포스트백(Postback) 연동이 필요합니다. 포스트백 요청은 보안을 위해 서버 간 통신(Server-to-server) 형태로 진행됩니다.

 

포스트백 요청 정보

다음은 버즈빌이 퍼블리셔 엔드포인트로 보내는 포스트백 요청에 대한 정보입니다.

내용

설명

내용

설명

1

요청 방향

버즈빌 서버 → 퍼블리셔 서버

2

HTTP Request method

POST - application/x-www-form-urlencoded

3

HTTP Request URL

퍼블리셔 서버의 엔드포인트 (i.e postback_url )

4

HTTP Request Parameters

아래 포스트백 파라미터 테이블을 참고합니다.

5

HTTP Response Code

버즈빌 서버는 퍼블리셔 서버로 부터 전달받은 응답 코드(Response Code)를 바탕으로 성공 여부를 판단합니다.

  • 200 (ok): 성공 처리합니다.

  • 그 외 응답 코드: 버즈빌 서버는 24시간 내 최대 5번까지 재시도합니다.

    • 재시도 요청 시간: 각 1분, 10분, 1시간, 3시간, 24시간 뒤

버즈빌 서버는 응답 내용(body)를 확인하지 않습니다. 요청 응답 내용에 에러가 포함되어 있어도 응답 코드가 200일 경우 성공으로 간주합니다.

 

포스트백 파라미터

광고의 타입에 따라서 두 종류의 포스트백이 존재합니다. 각 타입에 관한 포스트백 파라미터 정보는 아래 테이블을 참고합니다.

노출형 광고 - CPC, CPM 타입의 광고를 의미합니다.
액션형 광고 - 액션을 기반으로 과금 및 사용자 보상이 지급되는 광고를 의미합니다.

파라미터 정보

파라미터 필드(Field)

타입
(Type)

노출형

액션형

설명

파라미터 필드(Field)

타입
(Type)

노출형

액션형

설명

app_key

Long

O

O

퍼블리셔 서비스의 app_id 값입니다.

unit_id

Integer

O

O

광고가 노출된 웹 피드 지면의 ID 값입니다.

현재 주로 사용하는 값은 15자리의 숫자입니다.

transaction_id

String 
(max 64)

O

O

보상에 발급되는 Transaction ID 입니다. 리워드 중복 지급을 방지하기 위해 사용합니다.

  • 리워드 지급 요청 시 해당 Transaction ID로 리워드가 지급된 기록이 있다면, 중복 지급을 방지하기 위해 지급하지 않습니다.

user_id

String 
(max 255)

O

O

퍼블리셔 사용자의 ID 입니다. 웹 피드 연동 시 전달 받은 값입니다.

campaign_id

Long

O

O

리워드 포인트를 지급한 캠페인의 ID 입니다.

campaign_name

String
(max 255)

O

O

리워드 포인트를 지급한 캠페인의 이름입니다.

title

String
(max 255)

X

O

사용자가 참여한 광고의 제목입니다.

point

Integer

O

O

사용자에게 지급해야 하는 리워드 금액입니다.

is_media

Integer

O

O

  • 0: 버즈빌의 캠페인을 의미합니다.

  • 1: 퍼블리셔의 캠페인을 의미합니다.

revenue_type

String
(max 32)

O

O

광고의 타입입니다.

  • cpi: 인스톨 광고 (Cost per Install, 인스톨 시 과금)

  • cpe: 인스톨+실행 광고 (Cost per Engagement, 인스톨 후 실행시 과금)

  • cpa: 액션형 광고 (Cost per Action, 광고주 측 액션 후 과금)

action_type

String
(max 32)

O

O

리워드를 받기 위한 사용자의 활동을 의미합니다.

  • l: Landing, 광고주 페이지 접근 시 지급

  • a: Action, 실행/가입 등의 광고주 정의 활동 시 지급

event_at

Long (timestamp)

O

O

리워드 관련 행동이 일어난 시각을 의미합니다.

extra

String
(max 1024)

O

O

퍼블리셔가 지정한 캠페인 데이터 입니다. JSON 형태의 문자열 값입니다. 대시보드에서 캠페인을 생성할 때 지정할 수 있습니다.

e.g {"sub_type": "A", "source":"external"}

unit_price

decimal (18,9)

X

O

퍼블리셔에게 제공되는 캠페인의 단위 금액입니다.

ifa

String
(max 64)

X

O

사용자의 광고 ID 입니다. e.g GAID, IDFA

reward

Integer

X

O

액션형 광고를 위한 지급 리워드 금액입니다. point 값과 동일합니다

allow_multiple_conversions

0 or 1

X

O

해당 광고에 여러 번 참여할 수 있는지 의미합니다.

  • 0: 한 번만 참여할 수 있습니다.

  • 1: 여러 번 참여할 수 있습니다. 특정 타입의 비디오 광고 등이 이에 속합니다.

data

String

OPTIONAL

파라미터가 암호화 되어 있을 경우 사용합니다. 다음 요청 파라미터 검증 항목을 참고합니다.

 

요청 파라미터 검증 OPTIONAL

보안을 위해 파라미터 암호화를 사용할 수 있습니다.

HTTP Request Parameter Encryption/Decryption

BuzzScreen에서 매체사로 보내는 HTTP Request parameter를 암호화 하고 싶은 경우 사용합니다. 아래 과정에 따라 암호화를 진행할 수 있습니다.

진행 절차

  1. 암호화 키 발급

    1. 버즈빌 BD 매니저와 사전 협의

    2. 이메일(tech-support@buzzvil.com)을 통해 암호화 키를 요청하면 AES key, IV 값을 지급

  2. BuzzScreen 에서 아래 순서대로 파라미터를 암호화

    1. JSON serialized parameters with UTF-8 encoding

    2. AES(CBC mode, PKCS7 padding) encryption

    3. base64 encoding

  3. 암호화된 데이터를 HTTP POST request 파라미터에 data 라는 이름으로 추가하여 전송

  4. 수신 측 (매체사) 에서는 HTTP POST request에서 data 파라미터를 가져와 아래와 같은 순서로 복호화

    1. base64 decoding

    2. AES decoding

    3. JSON load

암호화 및 복호화 예제

예제에서는 AES key, IV 값으로 모두 12341234asdfasdf를 사용

{ "event_at": 1442984268, "user_id": "testuserid76301", "action_type": "u", "extra": "{}", "is_media": 0, "base_point": 2, "point": 2, "campaign_name": "test campaign", "campaign_id": 3467, "transaction_id": 429482977 }

[1] 암호화

암호화는 JSON (UTF-8encoding) → AES encryption → base64 encoding 순서로 진행

sgfHOC5Z66tLmlokmQEaXY39u+64gMWhLnxQAZ9ivYsTvF1isjVfaRx2BNhOADwPR6KB55/7F7iXBm5FKU8mHmHnlR3wSomVAlcjtx77KluoYoXi/jRCvaFLGIo7vcK1GVHxS557u/XTo53/AzdPZpk/aXkvFZvWPgS+GWj1TWle0mBJ0xOgfmb8LwMfi4rvfayTph3bZeryLuphorBzMoIhf+kQLyjfIyouWVoCh6UICeRBgzTS9SlgdUA6M1PVlCsQch0zKVeTJZEFEn8478QbpEEhgHDhXkzdo8tXgkw=

[2] 복호화

복호화는 base64 decoding → AES decryption → UTF-8 decoding 순서로 진행

  • base64 decoding

\xb2\x07\xc78.Y\xeb\xabK\x9aZ$\x99\x01\x1a]\x8d\xfd\xbb\xee\xb8\x80\xc5\xa1.|P\x01\x9fb\xbd\x8b\x13\xbc]b\xb25_i\x1cv\x04\xd8N\x00<\x0fG\xa2\x81\xe7\x9f\xfb\x17\xb8\x97\x06nE)O&\x1ea\xe7\x95\x1d\xf0J\x89\x95\x02W#\xb7\x1e\xfb*[\xa8b\x85\xe2\xfe4B\xbd\xa1K\x18\x8a;\xbd\xc2\xb5\x19Q\xf1K\x9e{\xbb\xf5\xd3\xa3\x9d\xff\x037Of\x99?iy/\x15\x9b\xd6>\x04\xbe\x19h\xf5Mi^\xd2`I\xd3\x13\xa0~f\xfc/\x03\x1f\x8b\x8a\xef}\xac\x93\xa6\x1d\xdbe\xea\xf2.\xeaa\xa2\xb0s2\x82!\x7f\xe9\x10/(\xdf#*.YZ\x02\x87\xa5\x08\t\xe4A\x834\xd2\xf5)`u@:3S\xd5\x94+\x10r\x1d3)W\x93%\x91\x05\x12\x7f8\xef\xc4\x1b\xa4A!\x80p\xe1^L\xdd\xa3\xcbW\x82L
  • AES decryption - Key, IV: 12341234asdfasdf

  • UTF-8 decoding

(memo) 위의 예제에 한글이 없기 때문에 UTF-8 decoding 을 거치지 않아도 같은 결과가 나옵니다.