구글 환불 API 회의 ! 오늘은 처음으로 개발팀 외의 분들과 길게 대화를 나눠본 날이었습니다. (*ˊᵕˋ*)ノ
관리자 페이지를 위한 구글 환불 API 개발이 3월에 맡게된 주요 업무 중 하나인데요 !
대시보드 관련 API 는 과장님이 진행하시지만 일단은.... 제가 담당자이기 때문에 (???)
기획 회의에 처음으로 참여해보았습니다 ㅎㅎ!
전 날에 기획자님이 미리 질문할 거리들을 전달해주셔서 아침에 30분 정도 일찍가서 준비했는데...
ㅎㅎ 저는 신입이기 때문에...? 결론적으로는 과장님께 질문을 토스하는 중계기 역할을 수행했습니다. ㅎㅎ;;;;
주요 질문 포인트는
1. 환불 API 를 호출했는데 카드 유효기간이 지났다던가... 다양한 에러 케이스가 발생할 경우 어떻게 되는가
-> 해당 에러 케이스들을 상세하게 대시보드에서 Alert 를 줄 수 있는 것인가
2. 구글 대시보드에 환불할 때는 환불 완료까지 10분이상 걸린 적도 있었는데...
-> 환불 API 요청 후 진행 상황을 어떻게 알 수 있는지
3. 1년 전 멤버십 현황도 한달 단위로 모두 대시보드에 나오는 것인지
-> 1년 전 멤버십도 API를 통해 환불이 가능한 것인지
이렇게 3가지 였습니다!
3번은 바로 가능하다는 답변을 드릴 수 있었지만, 1번 2번 질문은 생각치 못한 질문이었는데요.
구글 공식 API 문서에는 성공했을 때의 응답만 나와있었기 때문에...
에러 메세지를 상세하게 주던가...? 10분이상...? 그러면 비동기 처리를 따로 해야되는건가...?
온갖 생각이 들었던 질문이었습니다. 工エエェェ(;╹⌓╹)ェェエエ工
역시 현업에서는 여러 에러 케이스를 생각하고 대응 준비를 하는 것이 중요하겠다라는 깨달음을 얻었습니다.
그리고 개발 외적으로는... 3년 전 결제 건에 대해서도 환불 문의가 들어오는구나 (...)
세상은 정말 넓은 것 같습니다 ㅎㅎ;;;
회의 및 내용 정리는 1시간 정도 소요되었고 나머지 시간에는 API 조사 업무를 진행했는데요 !
Amplitude 는 API 리스트업 및 테스트는 오전에 모두 완료했지만
Braze는... API 인증 키가... 계속 잘못된 키라고 오류가 나네요.... ( ´•̥-•̥` )
결국 퇴근 시간 되어서 이사님께 보고 드리면서 질문 드렸는데
내일 차장님 출근하시면 여쭤봐야 될 것 같습니다 ㅎㅎㅠ
(개발은 진짜 이상한 곳에서 갑자기 삽질하게 되는 경우가 많은 것 같아요)
▶ 전체적인 스케쥴
- [오전 8시 20분~] 구글 환불 API 살펴보기 + 질문 드리기 - 0.5h
- Amplitude API 테스트 - 0.5h
- 개발 스크럼 회의 - 0.5h
- 업무 방향성 질문 + 중간 보고 - 0.5h
- Amplitude API 리스트업 및 테스트 - 1.5h
- 점심 - 1h
- Amplitude API 관련 정리 - 0.5h
- 구글 환불 API 복습 + 추가 조사 - 0.5h
- 구글 환불 API - 관리자 페이지 기획 회의 - 0.5h
- 회의 내용 정리 (Notion) + To do 스케쥴링 - 0.5h
- 구글 API 내용 정리 (Notion) - 0.5h
- [오후 3시 반~] Braze API 조사 및 테스트 - 2.5h
- API 인증키 오류 무한 반복
- 공식 API 문서, Postman 문서 탐색 및 정리
- 업무 상황 보고 + 질문 - 15m
내일 출근해서 차장님 오시면 바로 질문하러 가야겠습니다. _〆(。。)
▶ Amplitude_python_sdk & Amplitude 공식 API 조사 Notion 링크
Amplitude 사용자 속성값 변경 → Identify API 공식문서링크
[ Identify API ]
- 특정 device_id 에 대한 user_id 를 설정하거나 이벤트를 보내지 않고 특정 사용자의 사용자 속성을 업데이트할 수 있다.
- Amplitude 기본 사용자 속성과 정의한 사용자 지정 사용자 속성을 수정할 수 있다.
- 이러한 업데이트는 앞으로의 이벤트에만 영향을 미친다.
- [참고] 속성 값은 사용자의 다음 이벤트가 있을 때까지 플랫폼에 적용되거나 표시되지 않는다.
자세히 보기
- POST or GET 요청을 https://api2.amplitude.com/identify 로 보내면 된다.
- 파라미터는 2개가 필요하다. → api_key & identification
Required Argument Description
api_key | 프로젝트 API Key |
identification | 단일 JSON 식별 개체 (필드는 아래 참조) 또는 각각 하나의 식별을 나타내는 JSON 개체의 배열. |
- 주의 사항
- user_id 가 여러 장치에서 동시에 이벤트를 보내는 경우 모든 장치가 제한된다.
Example Request
curl --data 'api_key=API_KEY' --data
'identification=[{"user_id":"datamonster@gmail.com",
"user_properties":{"Age":"35"}, "country":"United States"}]'
https://api.amplitude.com/identify
Keys for the Identification Argument
- user_id 또는 device_id 중 하나 필요.
Key Type Description
user_id | string | (device_id 가 공백인 경우 필수) 당신이 정한 고유 user_id. [Note] 만약 존재하지 않는 user_id 라면 user_id 에 연결된 사용자는 첫 번째 이벤트가 있을 때까지 신규로 표시되지 않는다. |
device_id | string | (user_id 가 공백인 경우 필수) iOS 의 IDFV (Identifier for Vendor) 와 같은 기기별 식별자. |
user_properties | dictionary | 사용자와 연결된 추가 데이터를 나타내는 key-value 딕셔너리. 각 고유 값은 Amplitude 대시보드에 사용자 세그먼트로 표시된다. 개체 깊이는 40개 레이어를 초과할 수 없다. [Note] 속성 값을 배열에 저장할 수 있으며 날짜 값은 문자열 값으로 변환된다. |
groups | string | (Enterprise 만 해당) 사용자 그룹을 나타내는 Key-Value 쌍의 딕셔너리. 그룹을 설정하면 account level 보고 기능을 사용할 수 있다. 자세한 내용은 링크 참조. |
app_version | string | |
platform | string | 데이터를 보내고 있는 플랫폼 |
os_name | string | |
os_version | string | |
device_brand | string | |
device_manufacturer | string | |
device_model | string | |
carrier | string | 이동 통신사 |
country | string | |
region | string | |
city | string | |
dma | string | 사용자 지정 시장 영역 (The Designated Market Area of the user) |
language | string | |
paying | string | |
start_version | string |
속성 작업 지원
- "$set" - 속성 값 설정
- "$setOnce" - 속성 값 설정, 속성 값 재정의 방지
- $add - 숫자 값 추가 숫자 속성
- $append 및 $prepend - 사용자 속성 배열에 값 추가 및 추가
- $unset - 속성 제거
- $preInsert - 지정된 값을 속성 목록의 시작 부분에 추가
- $postInsert - 값이 목록에 아직 없는 경우 사용자 속성 목록 끝에 추가
- $remove - 지정된 값의 모든 인스턴스 제거
[X] {"$append":{"interests":"Music"}, "subscription type":"paid"}
[O] {"$set": {"cohort": "Test A"},
"$setOnce": {"startDate": "2015-10-01"},
"$add": {"friendCount": 3},
"$append": {"interests": "Music"},
"$prepend":{"sports": "Tennis"},
"$unset": {"oldProperty": "-"}}
- (platform, os_name, os_version, device_brand, device_manufacturer, device_model, and carrier) 필드는 모두 함께 업데이트 되어야 한다. 일부만 설정하면 다른 모든 속성 값이 자동으로 null 로 재설정된다.
- (country, region, city, DMA) 필드는 모두 함께 업데이트 되어야 한다. 일부만 설정하면 다른 모든 속성 값이 자동으로 재설정된다.
- Amplitude 에서는 날짜값을 문자열로 비교하므로 ISO 8601 형식 (YYYY-MM-DDTHH:mm:ss)을 사용하는 것이 좋다.
상태 코드
200 | 성공 |
414 | 414 오류 코드, URL 에 제한이 있는 GET HTTP 를 사용 중일 수 있다. 데이터가 URL 에 포함되지 않도록 HTTP GET 대신 HTTP POST 를 사용하는 것이 좋다. |
429 | Amplitude 는 초당 이벤트의 특정 임계값을 초과하는 device_ids 또는 user_ids 에 대한 요청을 제한한다. 요청을 조절하면 응답에 HTTP 상태 코드 429 가 표시된다. |
FAQ - Identify
- 아직 추적하지 않은 사용자 속성을 업데이트 할 수 있습니까?
- 예, 이러한 속성이 아직 당사 시스템에 없는 경우에도 새 속성으로 기존 사용자를 업데이트할 수 있습니다.
- 원시 데이터에서 이러한 업데이트를 볼 수 있습니까?
- 아니요, 이러한 업데이트는 이벤트로 계산되지 않고 대신 백엔드에 보관하는 사용자 속성 테이블에 대한 업데이트로 Redshift 에 표시되지 않습니다.
- 이 업데이트는 소급 적용됩니까?
- 아니요, 앞으로의 데이터에만 영향을 미칩니다.
- Identify API 호출이 활성 및 신규 사용자 수에 영향을 줍니까?
- 해당 호출은 이벤트로 계산되지 않으므로 “활성 사용자" 또는 “새 사용자" 정의에 영향을 미치지 않습니다.
- Identify API 호출이 Amplitude 의 월별 이벤트 수에 추가됩니까?
- 아니요. 해당 호출은 이벤트로 계산되지 않습니다.
- 필드 변경의 영향은 무엇입니까?
- 기존 값에서 user_id 필드를 변경하는 경우 새로운 Amplitude 유저가 생성됩니다.
- user_id 가 null 일 경우에는 새로운 유저를 생성하지 않습니다.
- 사용자 속성은 이벤트에 어떻게 적용되나요?
- 자세한 지원 문서를 읽어보십시오. 링크
- 414 오류 상태 코드가 표시됩니다. 내가 뭘 잘못하고 있죠?
- URL 에 제한이 있는 GET HTTP 를 사용 중일 수 있다. 데이터가 URL 에 포함되지 않도록 HTTP GET 대신 HTTP POST 를 사용하는 것이 좋습니다.
▶ 구글 환불 API 관련 공부
- 대시보드에서 구글 환불을 진행하고 싶다. (1년 전 내역도 환불하고 싶음!)
- 가능하다면 연속적인 환불 (=일괄처리) 도 체크박스 형태로 가능했으면 좋겠다.
- 환불 버튼을 눌렀을 때, ‘환불 처리 중', ‘환불 완료' 로 버튼 상태가 표시되었으면 하고, 환불 실패 시에는 멤버십 내역 아래에 ‘환불 실패 {마지막 환불 시도 날짜}’가 표시되었으면 좋겠다.
- 대시보드에 멤버십 목록 (한달 한달 표시되는 멤버십) 은 3년 전 내역도 있는 경우가 있으므로 페이징 처리가 들어가거나, 필터가 적용된 무한 스크롤 형태였으면 좋겠다.
- 기타 사항
- 환불 사유는 기획 쪽에서 정해서 전달하겠다.
- 환불이 길면 10분 걸릴 때도 있다. (API 응답 처리가 어떻게 되는지? 비동기 처리?)
- 일단 대시보드에서 나타나는 멤버십 기간은 전체 내역이 나오도록.
- 1년 전 결제 내역은 ‘구글 대시보드'에서 환불 처리 가능하다.
- ⇒ ★ 테스트 시 참고
- 결제 테스트 관련해서는 QA 팀에게 물어봐야 할 것 같다.
- API 관련 이슈 (revoke 로 일단 진행. 시간 되면 refund 테스트 해보자.)
ㄴ 근데 1년 전 주문도 환불 가능한지는 어떻게 테스트하지.
ㄴ 멤버십 테이블은 신경 ㄴㄴ ! 나는 구글 환불 함수만 만들면 된다 !- revoke 는 구독이 즉시 해제되고 기간 상관없이 환불이 가능하다. 링크
- refund 는 구독은 유지되고 기관 상관없이 (????) 환불이 진행된다. 링크
- orders.refund 는 사용자의 구독 또는 인앱 구매 주문을 환불한다. 링크
- 1년 이내 주문만 가능하다.
- [POST] - 쿼리 매개변수 revoke 가 true 인 경우 엑세스 즉시 종료, 구독 취소.
'Learn > Company' 카테고리의 다른 글
[TIL #18] 구글 환불 API 구현 + Flask 프레임워크 공부 (0) | 2022.03.09 |
---|---|
[TIL #16] Error 해결 - 공식 문서를 꼼꼼히 읽자 (0) | 2022.03.04 |
[TIL #14] 업무 시작! - API 조사 (0) | 2022.03.02 |
[TIL #13] 3월 목표 세우기 (0) | 2022.03.02 |
[TIL #12] excel <-> db 함수 작성하기! (0) | 2022.02.23 |