이 글의 성격은 무엇인가요?
질문 / 문제 해결
내용을 설명해주세요
환경
@apps-in-toss/web-framework ^2.4.6 (WebView 미니앱)
상품: 자동 갱신 구독 멤버십, NEW_SUBSCRIPTION 할인 offer 적용
가격 표시는 IAP.getProductItemList()가 내려주는 displayAmount를 가공 없이 그대로 사용 (부가세 연산 없음)
현상
getProductItemList()의 displayAmount를 화면에 그대로 출력하는데, 다른 상품/정가는 결제창 금액과 정확히 일치하지만 구독 할인가(offer)만 어긋납니다.
항목 화면 표시 (displayAmount) 결제창 청구 일치
소모성(열람권) VAT 포함 동일 ![]()
비소모성(평생) VAT 포함 동일 ![]()
구독 정가 (product.displayAmount) VAT 포함 동일 ![]()
구독 할인가 (offer.displayAmount) 4,450원 4,895원 ![]()
→ 할인가만 공급가(VAT 미포함)로 보이고, 결제창은 판매가(= 4,450 × 1.1 = 4,895원)로 청구됩니다.
코드
정가·할인가를 동일한 방식으로 추출/출력합니다.
// getProductItemList() 응답에서 추출
const p = catalog[MEMBERSHIP_SKU];
const offer =
p.offers?.find(o => o.type === “NEW_SUBSCRIPTION” && o.displayAmount) ??
p.offers?.find(o => o.type === “RETURNING” && o.displayAmount);
const listAmount = p.displayAmount; // 정가 → VAT 포함으로 정상
const amount = offer?.displayAmount; // 할인가 → 공급가로 보임 (문제)
// 화면 출력 — 문자열 그대로 렌더 (가공 없음)
<span style={{ textDecoration: “line-through” }}>{listAmount} {/* 정가 /}
{amount} {/ 할인가 */}
// 결제 — 금액 미전달, offerId만 전달 (청구액은 SDK가 계산)
IAP.createSubscriptionPurchaseOrder({
options: { sku: MEMBERSHIP_SKU, offerId, processProductGrant: () => true },
onEvent, onError,
});
질문
getProductItemList() 응답에서 할인 offer의 displayAmount도 상품 정가(product.displayAmount)와 동일하게 VAT 포함 판매가로 내려오는 것이 맞나요? 동일 코드 경로인데 정가는 정상이고 offer만 공급가로 보입니다.
만약 offer의 displayAmount가 공급가로 내려오는 것이 의도된 동작이라면, 클라이언트에서 할인가에만 부가세 10%를 더해 표기해야 하나요? 권장 방식이 궁금합니다.
(결제 금액은 클라이언트에서 전달하지 않고 offerId만 넘기므로, 화면 표기만 맞추면 되는지 확인하고 싶습니다.)
