[WebView / SDK 3.8.0] 인앱결제 주문 소유권 서버 검증 및 50건 초과 구매 복원 문의

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

질문 / 문제 해결

내용을 설명해주세요

안녕하세요. 탱글 파이어(tanglefire) 출시를 준비하고 있습니다. 콘솔 채널톡에서 개발자 커뮤니티 문의를 안내받아 질문드립니다.

환경: WebView, @apps-in-toss/web-framework 3.8.0 (2026-10-15 npm 최신 버전 확인). 광고 제거 비소모품과 해당 월 프리미엄 패스 소모품을 준비 중입니다. 고객 정보·실제 주문·키는 포함하지 않았습니다.

1. 서버에서 로그인 사용자와 주문 구매자의 동일성을 검증하는 공식 계약

현재 주문 조회 API 문서는 POST /api-partner/v1/apps-in-toss/order/get-order-status에 orderId만 보내고 사용자 헤더(x-toss-user-key, x-anon-key)는 받지 않는다고 안내합니다. 응답 스키마에도 orderId / sku / status / statusDeterminedAt만 있고 구매자 식별자는 없습니다.

한편 과거 커뮤니티 답변과 공식 Unity SDK APIUsagePatterns에는 토스 로그인 userKey를 이용한 주문 확인에 대한 설명이 있어 현재 계약을 확인하려고 합니다.

  • mTLS로 앱 범위의 주문을 확인한 뒤, 서버가 검증한 토스 로그인 사용자와 그 주문의 실제 구매자가 같음을 확인할 수 있는 공식 API·서명·헤더가 있나요?
  • 주문 ID를 처음 제출한 사용자에게 원장을 고정하는 방식은 ‘최초 제출자’를 신뢰하게 되는데, 이 방식이 공식 지원하는 보안 모델인지, 별도 권장 방식이 있는지 궁금합니다.
  • statusDeterminedAt은 마지막 상태 확정 시각으로 정의되어 있습니다. PAYMENT_COMPLETED에서 관찰한 값을 원 결제일로 고정해 월 패스 시즌을 정해도 되나요? 처음 조회한 상태가 PURCHASED일 때 원 결제일을 서버에서 확인하는 방법도 부탁드립니다. 복원한 날짜가 새 시즌 지급일이 되지 않게 하려는 목적입니다.

문서: 인앱 결제 | API | 앱인토스 개발자센터
인앱 결제 | SDK | 앱인토스 개발자센터
과거 관련 답변: 지금 JS를 HASH 방식으로 바꿨는데, 그러면 userKey는 어떻게 가져오나요 - Roy 님의 게시물 #8
공식 Unity SDK 설명: https://github.com/toss/apps-in-toss-unity-sdk/blob/main/Documentation~/APIUsagePatterns.md

2. SDK 3.8.0에서 50건 초과 완료·환불 주문의 전체 페이지 복원

공식 WebView 문서는 다음 호출을 안내합니다.

IAP.getCompletedOrRefundedOrders({ key: nextKey })

하지만 설치한 3.8.0 dist/index.js의 실제 구현은 인자를 받지 않고 빈 객체만 전달합니다.

const getCompletedOrRefundedOrders = Object.assign(
  () => callAsyncMethod("getCompletedOrRefundedOrders", {}),
  // ...isSupported
);

타입도 무인자이며, 반환값에는 hasNext와 nextKey가 있습니다. 첫 페이지에서 hasNext=true이면 나머지 주문을 조회할 공식 방법을 찾지 못했습니다. 인자를 강제 캐스팅해도 위 구현에서는 key가 전송되지 않습니다.

  • WebView 3.8.0에서 전체 페이지를 복원하는 정확한 호출 방법 또는 수정 버전/일정을 알려주세요.
  • 완료·환불 목록의 주문 날짜(date)가 타임존 없는 ISO 문자열일 때 적용할 시간대도 확인 부탁드립니다.

현재는 일부 목록만으로 복원 완료를 표시하거나 소유권 검증을 생략하지 않고, 관련 지급/출시 게이트를 닫아둔 상태입니다. 공식 계약에 맞춰 안전하게 연동하고 싶습니다. 감사합니다.

appName (선택)

tanglefire

안녕하세요 :slight_smile:

  1. 현재 제공되고 있는 구매자 검증 API는 없습니다. 말씀주신 부분 고려하여 다음 개선에 구매자를 검증할 수 있도록 기능을 추가하겠습니다.
  2. 월 프리미엄 패스의 지급 및 만료 시점은 createSubscriptionPurchaseOrder 의 processProductGrant(상품 지급) 완료 시점으로 잡아주시면 어떨까요 ?
  3. 인자로 받지 않는 부분 확인하였으며, 조치하여 배포 예정입니다.

key 안받는 부분 3.9.0 버전으로 올려서 테스트 해봐주실 수 있을까요 ?