베타 운영 중·유료 거래는 2026년 12월 17일 정식 오픈 후 시작됩니다. 지금은 상품을 미리 등록하고 둘러보실 수 있습니다.

전달 방식별 연동
따라하기 가이드Pro 플랜부터결제 즉시 자동 발급

인앱결제 연동 — 처음부터 판매까지

데스크톱이나 모바일 앱의 인앱 구매를 여는 방식입니다. 결제가 끝나면 새몰이 활성화 토큰과 SKU를 내려보냅니다.

아래 화면 예시는 실제 새몰 화면과 동일한 구성으로 재현한 것입니다. 내 계정에서는 상품 등록 상품 수정 페이지의 연동 정보 카드에서 같은 화면을 만나게 됩니다.
전달 방식은 여러 개를 고를 수 있습니다. 이 가이드는 인앱결제 연동 하나를 기준으로 설명하지만, 다른 방식과 함께 체크해도 됩니다. 방식마다 설정과 발급이 따로 적용됩니다. 세 축(상품 종류·가격 방식·전달 방식)이 어떻게 맞물리는지는 판매 가이드에 정리해 두었습니다.
가격을 매기려면 사업자 인증이 필요합니다. 개인사업자나 법인으로 정산 정보를 등록하고 인증을 마쳐야 유료 요금제를 설정할 수 있습니다. 비사업자는 0원(무료) 상품만 등록됩니다. 인증과 상관없이 연동 자체는 지금 그대로 따라 할 수 있습니다.

한눈에 보기

1구매자새몰새몰에서 결제 (앱 밖 웹 결제)
2새몰구매자활성화 토큰 발급 (주문 상세·보관함)
3새몰판매자entitlement.activated 웹훅 (SKU 포함)
4구매자판매자앱에서 토큰 입력 → 검증 → SKU 활성화

요금제명 ↔ 앱 내 SKU를 매핑해 두면, 어떤 인앱 상품을 열어줄지 토큰 검증 응답으로 알 수 있습니다.

따라하기

1

상품 등록 — SKU 매핑

saemol.com/products/new

전달 방식 *

인앱결제 연동결제 즉시 활성화 토큰을 발급하고 웹훅으로 보내드립니다.
1회성 라이선스결제 즉시 라이선스 키를 발급합니다.

SKU 매핑 (JSON) *

{"Basic": "com.myapp.basic", "Pro": "com.myapp.pro"}

요금제명 → 앱 내 SKU. 활성화 웹훅 페이로드에 포함됩니다

JSON의 키는 요금제 이름과 정확히 같아야 합니다. 일치하지 않으면 검증은 통과하지만 skunull로 옵니다 — 앱에서 잠금이 안 풀리는 원인 1순위입니다. 요금제 이름을 바꾸면 이 JSON도 함께 고치세요.
샌드박스에서 확인하려면 "테스트" 항목도 같이 넣어두세요 — 테스트 키의 요금제명이 테스트로 고정이라 그래야 매칭됩니다.
2

결제 → 활성화 토큰 발급

saemol.com/orders/… (구매자 화면)

전달 정보

활성화 토큰

MF-9Q4T-W2NR-8XKM-PD57

활성화 토큰이 발급되었습니다. 앱에서 토큰을 입력하면 구매가 활성화됩니다.

3

앱에서 토큰 검증 → SKU 활성화

app 활성화 다이얼로그
const result = await saemol.verifyLicense({ licenseKey: activationToken })

if (result.valid) {
  unlock(result.sku)   // 'com.myapp.pro' — SKU 매핑에서 결정됨
}

앱이 서버 없이 배포되는 경우에도 검증 호출은 반드시 판매자 서버를 경유하세요 — 연동 시크릿이 앱 바이너리에 들어가면 안 됩니다.

4

웹훅으로 서버측 활성화 (선택)

서버 계정 체계가 있다면 entitlement.activated 웹훅을 받아 토큰 입력 없이 서버에서 곧바로 열어줄 수도 있습니다. payload에 sku가 함께 오므로 별도 검증 호출 없이 어떤 인앱 상품인지 판별됩니다.

webhooks/saemol.ts — 토큰 입력 없이 활성화
const event = verifyWebhook({ headers: req.headers, rawBody, secret })

if (event.event === 'entitlement.activated' && event.data.kind === 'in_app') {
  // sku는 요금제명 → sku_map으로 결정된 값 (매핑이 없으면 null)
  await unlockForUser(event.data.buyer_id, event.data.sku)
}

환불 시에는 entitlement.revoked로 비활성화하세요.

출시 전 체크리스트

  • 요금제명과 SKU 매핑의 키가 정확히 일치한다 (요금제명 변경 시 매핑도 갱신)
  • 테스트 토큰으로 앱 활성화 → 환불 회수 시 비활성화까지 확인했다
  • 연동 시크릿이 앱에 포함되지 않고 서버에만 있다

다음으로 볼 문서