이 글의 성격은 무엇인가요?
질문 / 문제 해결
내용을 설명해주세요
환경
- iOS (iPhone), 토스 앱 최신 버전
@apps-in-toss/web-framework2.1.0createOneTimePurchaseOrder—processProductGrant지원 버전 (v5.231.1+)
현상
processProductGrant 콜백에서 서버 API 호출 후 true를 반환했는데, onSuccess가 아닌 onError로 PRODUCT_NOT_GRANTED_BY_PARTNER가 전달됩니다. 동일 패턴으로 2건 발생했습니다.
코드
createOneTimePurchaseOrder({
options: {
sku: 'my-product-id',
processProductGrant: async ({ orderId }) => {
const ok = await fetch('/api/confirm', { body: JSON.stringify({ orderId }) });
// ok.status === 200
return true; // ← 정상 반환
},
},
onEvent: (event) => {
if (event.type === 'success') {
// 여기에 도달하지 않음
}
},
onError: (error) => {
// error.code === 'PRODUCT_NOT_GRANTED_BY_PARTNER'
// 콜백이 true를 반환했는데도 여기로 옴
},
});
확인한 것
- Sentry breadcrumbs에서 서버 API → 200 응답 직후(~1초 내) 에러 발생 확인
- 서버 측 에러 로그 없음 — 콜백 내 로직은 정상 완료
- 콜백이
false를 반환하거나 예외를 던진 경우가 아님 - 2건 모두 iOS
대응
콜백 안에서 true 반환 전에 클라이언트 상태를 선저장하고, onError 발생 시에도 재진입 시 getPendingOrders로 복구되도록 처리했습니다.
질문
문서에는 PRODUCT_NOT_GRANTED_BY_PARTNER가 “파트너가 상품 지급에 실패했을 때” 발생한다고 되어 있는데, 콜백이 정상적으로 true를 반환한 경우에도 이 에러가 발생할 수 있는 조건이 있을까요? (예: 내부 타임아웃, 브릿지 통신 실패 등)
appName (선택)
draw