이 글의 성격은 무엇인가요?
질문 / 문제 해결
내용을 설명해주세요
안녕하세요. WebView 미니앱에서 인앱결제 소모성 상품의 지급 복원이 되지 않는 건을 문의드립니다.
환경
- @apps-in-toss/web-framework 3.0.3 (WebView)
- Android, 토스앱 5.278.0
- 상품: 1회성 소모성 상품. 같은 상품을 2회 이상 정상 구매한 사용자가 39명 있습니다.
발생 순서 (2026-09-25, KST)
- 18:06:06 createOneTimePurchaseOrder의 onError로 "결제가 완료되었지만, 서버 전송에 실패했습니다. (orderId: 93f925df-62a0-4592-9129-280654b81d87)"를 받았습니다.
- 이 시점에 processProductGrant 콜백이 저희 서버를 호출하지 않았습니다. 해당 orderId로 들어온 지급 요청은 0건입니다.
- 같은 상품을 18:06부터 20:33까지 7번 다시 결제했는데, 매번 "이미 구매한 상품입니다. 중복 구매는 불가능합니다."로 실패했습니다. 시도할 때마다 새 orderId가 발급됐습니다.
- 콘솔 주문 관리에서 이 orderId를 검색하면 나오지 않습니다.
복원 코드 (앱 진입 시 1회 실행)
const pending = await IAP.getPendingOrders();
for (const order of pending?.orders ?? ) {
if (await creditOrder(order.orderId, order.sku)) { // 저희 서버에 지급
await IAP.completeProductGrant({ params: { orderId: order.orderId } });
}
}
사용자가 9/25 이후 여러 날에 걸쳐 앱에 다시 들어왔지만, 이 주문은 이 경로로 한 번도 지급되지 않았습니다. 목록에 나왔다면 저희 서버에 지급 요청이 남았어야 합니다.
질문
- 이 orderId가 실제로 결제된 주문인지 알 수 있을까요? (PAYMENT_COMPLETED인지, FAILED인지)
- 서버 전송 실패로 끝난 주문은 getPendingOrders에 나와야 하는 것으로 이해했는데, 나오지 않는 경우가 있나요?
- 목록에 나오지 않는 주문이 재구매를 막고 있다면, 오류 문구에 있는 orderId로 completeProductGrant를 바로 호출해 풀어도 되나요?
사용자에게는 이미 수동으로 지급해서 사용자 피해는 없습니다. 원인을 알고 싶어 문의드립니다.