서버 전송 실패 주문이 getPendingOrders에 나오지 않고, 재구매가 "이미 구매한 상품"으로 막힙니다

이 글의 성격은 무엇인가요?

질문 / 문제 해결

내용을 설명해주세요

안녕하세요. WebView 미니앱에서 인앱결제 소모성 상품의 지급 복원이 되지 않는 건을 문의드립니다.

환경

  • @apps-in-toss/web-framework 3.0.3 (WebView)
  • Android, 토스앱 5.278.0
  • 상품: 1회성 소모성 상품. 같은 상품을 2회 이상 정상 구매한 사용자가 39명 있습니다.

발생 순서 (2026-09-25, KST)

  1. 18:06:06 createOneTimePurchaseOrder의 onError로 "결제가 완료되었지만, 서버 전송에 실패했습니다. (orderId: 93f925df-62a0-4592-9129-280654b81d87)"를 받았습니다.
  2. 이 시점에 processProductGrant 콜백이 저희 서버를 호출하지 않았습니다. 해당 orderId로 들어온 지급 요청은 0건입니다.
  3. 같은 상품을 18:06부터 20:33까지 7번 다시 결제했는데, 매번 "이미 구매한 상품입니다. 중복 구매는 불가능합니다."로 실패했습니다. 시도할 때마다 새 orderId가 발급됐습니다.
  4. 콘솔 주문 관리에서 이 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 이후 여러 날에 걸쳐 앱에 다시 들어왔지만, 이 주문은 이 경로로 한 번도 지급되지 않았습니다. 목록에 나왔다면 저희 서버에 지급 요청이 남았어야 합니다.

질문

  1. 이 orderId가 실제로 결제된 주문인지 알 수 있을까요? (PAYMENT_COMPLETED인지, FAILED인지)
  2. 서버 전송 실패로 끝난 주문은 getPendingOrders에 나와야 하는 것으로 이해했는데, 나오지 않는 경우가 있나요?
  3. 목록에 나오지 않는 주문이 재구매를 막고 있다면, 오류 문구에 있는 orderId로 completeProductGrant를 바로 호출해 풀어도 되나요?

사용자에게는 이미 수동으로 지급해서 사용자 피해는 없습니다. 원인을 알고 싶어 문의드립니다.

안녕하세요 :slight_smile:
불편을 드려 죄송해요. 혹시 안드로이드에서 발생한 문제 맞을까요 ?

실제 결제는 되었는데, 결제 이후 프로세스에서 에러가 발생하여 getPendingOrders 에서도 나오지 않은걸로 확인됩니다.
현재 개선을 진행중이며 빠르게 조치하겠습니다.

네 안드로이드 맞고
Android SM-S911N 기기에서 발생했습니다