인앱 빌링 : 구글 마켓 연동시 permissionDenied 문제

|

구글링해도 거의 나오지 않는 희귀한 문제 하나.

Google Play Developers API를 통해 영수증 검증을 시도 했는데, 다음과 같은 에러가 떨어졌다.


{

"error": {

  "errors": [

   {

    "domain": "androidpublisher",

    "reason": "permissionDenied",

    "message": "The current user has insufficient permissions to perform the requested operation."

   }

  ],

  "code": 401,

  "message": "The current user has insufficient permissions to perform the requested operation."

}

}


애플, 구글 마켓 연동 (부제 : 인앱 결재 영수증 확인 A to Z) : http://elenoa.tistory.com/375


이전 포스트 대로 착실히 영수증 검증 단계를 밟아나갔는데, 정작 영수증을 확인하려면 실패. 유독 해당 Google Play 계정만 문제가 되었다.


실제 겪은 현상은 조금 복잡한거다. (따라서 설명도 복잡한거다.)

1) a@google.com 계정이 만든 Google Play에 등록된 게임 (이하 a의 게임)

2) a@google.com 계정이 만든 Google Play Developers API (이하 a의 API)

3) b@google.com 계정이 만든 Google Play에 등록된 게임 (이하 b의 게임)

4) b@google.com 계정이 만든 Google Play Developers API (이하 b의 API)


a의 게임은 a의 API와 b의 API 중 어느 것으로 해도 영수증 검증이 되었다. b의 게임은 어떤 API로도 영수증 검증이 안되고 위의 에러 코드가 발생했다.

이 현상을 확인하기 위해 c의 계정이 등장한다.


5) c@google.com 계정이 만든 Google Play Developers API (이하 c의 API)


c의 API 역시 a의 게임 영수증 검증이 가능했고, b의 게임 영수증 검증이 불가능했다. 여기서 좀 더 복잡하게 들어가 보기로 했다. c@google.com 계정을 a의 게임 관리자로 초대하고 다시 해제하는 등 권한 문제에 대해서 접근하기 시작했다. 그러다가..

c의 API가 a의 게임 영수증 검증에 실패하기 시작했다. 정확히 a의 게임 관리자로 초대하고 해제한 직후였다. (관리자 목록에서 삭제하지만, 실제로는 차단과 비슷한 효과가 있다고 보여진다) 그래서 다시 a의 게임 관리자로 초대하고 '매출 정보 보기' 권한을 주자 c의 API가 a의 게임 영수증 검증에 성공했다. (권한을 삭제하자 즉시 c의 API는 a의 게임 영수증 검증에 실패한다.)



elenoa 계정에 빨간 네모박스 게임에 대해서 재무 보고서 보기 권한이 주어진다.


요 물건은 OAuth2 Playground. 간단하게 OAuth2를 시뮬레이트 해 볼 수 있다. API까지 문제 없이 동작하는 것을 볼 수 있다.


같은 상황에서 빨간 박스 게임에 대한 '재무 보고서 보기' 권한만 제거한다.


위와 동일한 오류 결과를 얻을 수 있다. '효과는 괭장했다!"


우리의 목적은 b의 게임이 b의 API로 게임 영수증 검증되는 것이였는데, 결과적으로 이건 실패했다. 당연하게도 b@google.com 계정은 b의 게임에서 소유자로 등록되어 있기 때문에 권한을 어쩌고 할 여지가 없었던 것이다. (구글 시스템 내부에서 뭔가 꼬인것 같긴 한데 누구도 이걸 해결할 의지가 없다.)

결국 a@google.com 계정을 b의 게임에 읽기 권한만 주고 초대한 후 '매출 정보 보기' 권한만 주고, a의 API가 b의 게임 영수증 검증을 수행하는 것을 확인하고 턴을 마쳤다.


일단 현재까지는 잘되네.


And