인앱 결제시 “processProductGrant” 이벤트 호출이 되지 않는 경우가 있는듯 보입니다

안녕하세요.

최근 결제가 정상적으로 이루어지지 않는다는 문의가 지속적으로 접수되어, 결제 과정 전반에 대한 로그를 확인하였습니다.

확인 결과, 10월 30일 기준 총 206건의 결제 요청 중 134건은 정상적으로 결제가 완료되었으나, 약 70건은 결제 시도가 있었음에도 processProductGrant 이벤트가 발생하지 않은 것으로 확인되었습니다.

해당 이벤트 누락의 원인에 대해 확인이 필요할 것으로 판단되어 문의드립니다.

확인 후 회신 부탁드립니다.
(필요하신 경우 저희가 수집한 로그 데이터 전달도 가능합니다)

감사합니다.

이번 토/일 581건의 결제 요청이 있었고, 그중에 174건이 아무런 응답이 없었습니다.
지속적으로 약 30%는 깜깜이 상태입니다. 빠른 확인 부탁 드립니다.

혹시 이벤트가 발생하지 않는 케이스의 os 정보를 알 수 있을까요 ?(ios, android, 혹은 둘다)

현재 서버에 남는 User-Agent 로그를 확인해본 결과 해당 이슈는 Android 환경에서만 발생하는 것으로 확인되었습니다.

혹시 확인된 내용이 있을까요?

@sunwoo @YJY 님 안녕하세요!
processProductGrant 이벤트가 발생하지 않는다는 것이 토스 앱으로부터 지급 완료 트리거 이벤트를 받지 못해 processProductGrant 를 호출하지 않은 케이스가 발생하시는걸까요 ?!

수집한 로그 데이터도 공유주시면 큰 도움 될 것 같습니다 :man_bowing:

정확하게 말씀드리면, 결제 시도후 아무런 이벤트도 받지 못하는 상황이 있습니다.
processProductGrant, event, error 세가지중에 어느 이벤트도 발생이 되지 않는 상황이 발생하고 있습니다.

예로 아래는 정상 케이스입니다.
(로그 그룹핑의 문제로 3 → 1 → 2 순서로 보시면 됩니다)
정상의 케이스는 TrackingId: 1761928778425 기준으로 2~3건의 이벤트가 발생됩니다.
3. event: start purchase가 발생하고, 1. processProductGrant 이벤트 발생 로그, 2.아이템 지급 로그

// 2. processProductGrant 이벤트가 발생됨
1761928778425,"event: {""type"":""success"",""data"":{""currency"":""KRW"",""displayAmount"":""11,990원"",""amount"":11990,""displayName"":""10,000 코인"",""fraction"":0,""miniAppIconUrl"":""https://static.toss.im/appsintoss/27/704bd0e5-b50d-4527-aaed-9b5655201b0d.png"",""orderId"":""43479cef-5fa0-48e4-85a6-874eea8478bf""}}

// 3. 아이템 지급이 성공됨
result: {""success"":true,""productId"":""ait.0000009485.1aa0f02e.9250aa6b0b.8786804419"",""transactionId"":""14612520be674181b302fbf51c7a65c9"",""balance"":21300,""chargeAmount"":10000,""errorCode"":""Purchase completed successfully""}

// 1. 결제 요청이 이루어짐
event: start purchase, productId: ait.0000009485.1aa0f02e.9250aa6b0b.8786804419, transactionId: 14612520be674181b302fbf51c7a65c9"

하지만 실패 케이스를 보면 시작 로그만 있고, 추가적인 내용이 없는 부분이 있습니다.
해당 케이스가 결제를 시도 했으나 아무런 이벤트를 받지 못한 상태입니다.

1761923471587,"event: start purchase, productId: ait.0000009485.1aa0f02e.9250aa6b0b.8786804419, transactionId: 23b4e62d26494f20a2d4ad300239d524"

1761923500851,"event: start purchase, productId: ait.0000009485.1aa0f02e.9250aa6b0b.8786804419, transactionId: 97523bb333474000a668df8c7769ffda"

참고로 TrackingId의 경우 Date.now() 값 입니다.

파일 첨부가 되지 않아 로그는 링크로 대체 합니다.

혹시 확인이 어느정도 진행이 되었을까요?
추가로 필요한 내용이 있으면 언제든지 연락 부탁드립니다.

오래 기다려주셔서 감사합니다
현재 남겨주신 로그를 기반으로 일부 확인해보니 말씀주신 건들은 대부분 사용자 환경에 의해 결제를 진행할 수 없을 때로 보여져요
사용자가 결제는 시도했지만 결제할 수 없는 카드거나 사용자 기기의 Play 스토어 버전이 낮아 구글 결제를 진행할 수 없었던 케이스고, 이벤트는 결제가 성공해야 호출되는 것이기 때문에 발생하지 않는 것이 맞아요.
문의 들어온 건이 어떤 유형의 문의였는지 조금 더 상세히 알려주신다면, 더 나은 경험을 제공하는데 도움이 될 것 같습니다 :man_bowing:

@Dylan 님 안녕하세요
저희도 글 보다가 주신 답변 보고 오히려 헷갈리는 부분이 생겨서요

말씀하신 상황이 발생하더라도(사용자 기기의 Play 스토어 버전이 낮아 구글 결제를 진행할 수 없었던 케이스 등등)
processProductGrant에 대해서 안온다는 말씀이신거 맞나요?

그렇다면 onError 콜백에 INVALID_USER_ENVIRONMENT나 INTERNAL_ERROR 같은 에러는 전달이 되는거죠?
질문자님은 그거조차 안온다고 하신거 같아서..답변이 햇갈려서요

INVALID_PRODUCT_ID : 유효하지 않은 상품 ID이거나, 해당 상품이 존재하지 않습니다. 상품 ID를 확인해주세요.
유효하지 않은 상품 ID이거나, 해당 상품이 존재하지 않을 때 발생해요.


PAYMENT_PENDING : 결제 승인이 대기 중입니다. 결제 승인을 기다려주세요.
사용자가 요청한 결제가 아직 승인을 기다리고 있을 때 발생해요.


NETWORK_ERROR : 네트워크 오류가 발생했습니다. 잠시 후 다시 시도해주세요.
서버 내부 문제로 요청을 처리할 수 없을 때 발생해요.


INVALID_USER_ENVIRONMENT : 이 상품은 현재 기기, 계정 또는 설정 환경에서는 구매가 지원되지 않습니다.
특정 기기, 계정 또는 설정 환경에서 구매할 수 없는 상품일 때 발생해요.


APP_MARKET_VERIFICATION_FAILED : 앱스토어에서 사용자 정보 검증에 실패했습니다. 환불이 필요합니다.
사용자가 결제를 완료했지만, 앱스토어에서 사용자 정보 검증에 실패했을 때 발생해요. 사용자가 앱스토어에 문의해서 환불을 요청해야해요.


TOSS_SERVER_VERIFICATION_FAILED : 결제가 완료되었지만, 서버 전송에 실패했습니다.
사용자가 결제를 완료했지만, 서버 전송에 실패해서 결제 정보를 저장할 수 없을 때 발생해요.


INTERNAL_ERROR : 내부 오류가 발생했습니다. 잠시 후 다시 시도해주세요.
서버 내부 문제로 요청을 처리할 수 없을 때 발생해요.


KOREAN_ACCOUNT_ONLY : 한국 계정만 사용 가능합니다. 다른 계정을 사용해주세요.
iOS 환경에서 사용자의 계정이 한국 계정이 아닐 때 발생해요.


USER_CANCELED : 사용자가 결제를 취소했습니다.
사용자가 결제를 완료하지 않고 주문서 페이지를 이탈했을 때 발생해요.


PRODUCT_NOT_GRANTED_BY_PARTNER : 파트너사의 상품 지급이 실패했습니다
파트너사의 상품 지급이 실패했을 때 발생해요. 토스앱 5.230.0 이상에서만 발생해요.


답변상의 내용으로는 사용자의 환경의 문제이며 결제가 정상으로 되지 않았을 것이라는 내용으로 했습니다.
하지만 저희쪽의 데이터와 CS를 보면 결제가 되었던 유저가 결제가 되지 않는 경우, 결제는 정상으로 진행 되었으나 이벤트가 발생하지 않아 아이템 지급이 누락된 경우가 상당수 있는것으로 보입니다.

사용자가 결제는 시도했지만 결제할 수 없는 카드거나 사용자 기기의 Play 스토어 버전이 낮아 구글 결제를 진행할 수 없었던 케이스고, 이벤트는 결제가 성공해야 호출되는 것이기 때문에 발생하지 않는 것이 맞아요.

위 내용에 대해서는 onError도 발생을 하지 않는다는 내용으로 이해하면 될까요 ?
만약 해당 경우에 이벤트가 발생하지 않는다면, 개발사는 해당 경우를 어떻게 인지하고 유저에게 안내를 할 수 있을까요 ?

문의 들어온 건이 어떤 유형의 문의였는지 조금 더 상세히 알려주신다면, 더 나은 경험을 제공하는데 도움이 될 것 같습니다

대부분의 문의가 결제는 되었지만, 관련 재화가 지급되지 않았다는 내용입니다.

INVALID_USER_ENVIRONMENT를 포함한 결제 과정 중 에러가 발생할 경우 이벤트는 발생되지 않고, 에러 콜백 + 에러 페이지가 노출됩니다.

로그로 미루어보아 이벤트 미발송 케이스의 대부분은 에러페이지까지 노출된 것으로 보입니다.

"결제가 되었지만 지급이 안된 케이스"는 좀 더 파악이 필요할 것 같습니다. 결제 시점의 로그를 공유해주실 수 있을까요 ?

NVALID_USER_ENVIRONMENT를 포함한 결제 과정 중 에러가 발생할 경우 이벤트는 발생되지 않고, 에러 콜백 + 에러 페이지가 노출됩니다.

로그상으로는 에러콜백이 한건도 존재하지 않은 부분은 문제가 있어 보입니다.

"결제가 되었지만 지급이 안된 케이스"는 좀 더 파악이 필요할 것 같습니다. 결제 시점의 로그를 공유해주실 수 있을까요 ?

해당 내용은 저희도 별도 로그 작업을 진행해야 전달 드릴수 있는 자료가 될듯 합니다.
내부 논의 후 추가 로그 작업이 진행시 메시지 드리겠습니다.

혹시 유저가 상단의 … 메뉴를 통해 문의시 회원정보를 알수 있는 방법이 있을까요 ?

문의로 회원을 구분하는 것은 현재로서는 어렵습니다.
이후 관련해서 동일한 문의가 재발생 했을 때 문의 메일의 시각과 추정 로그를 함께 전달주시면 빠른 개선에 도움이 될 듯하여 부탁드리겠습니다 :man_bowing:
위 INVALID_USER_ENVIRONMENT 관련 이슈는 추가확인하여 대응해보겠습니다.
감사합니다.