따라하기 가이드전 플랜 사용 가능구매 후 권한·전달 처리
1회성 라이선스 — 처음부터 판매까지
결제가 끝나면 새몰이 라이선스 키를 발급합니다. 라이선스 서버를 직접 만들지 않아도 됩니다.
시작 전에 준비하세요
- 판매할 상품과 제공할 내용을 정합니다.
- 상품 등록에서 전달 방식을 선택합니다. 여러 방식을 함께 설정할 수 있습니다.
- 이 가이드에 따라 설정한 뒤 다른 계정으로 전달 결과를 확인합니다.
화면 예시·전달 방식·판매 조건 자세히 보기
아래 화면 예시는 실제 새몰 화면과 동일한 구성으로 재현한 것입니다. 내 계정에서는 상품 등록과 상품 수정 페이지의 연동 정보 카드에서 같은 화면을 만나게 됩니다.
한눈에 보기
1구매자새몰결제 (일회성)
2새몰구매자라이선스 키(MF-XXXX-…) 즉시 발급 — 주문 상세·보관함
3구매자판매자제품에 키 입력 (활성화)
4판매자새몰verifyLicense로 유효성·디바이스 제한 확인
키 발급·보관·검증·환불 회수는 새몰이 처리합니다. 제품에서는 키 입력과 검증 결과에 따른 활성화·이용 제한을 연결해야 합니다.
따라하기
1
상품 등록에서 '1회성 라이선스' 선택
가격 방식은 일회성 구매, 전달 방식은 1회성 라이선스. Business 플랜부터는 디바이스 제한·무료 체험·유효 기간·허용 버전 같은 고급 설정이 함께 열립니다.
saemol.com/products/new
전달 방식 *
1회성 라이선스결제 즉시 라이선스 키를 발급합니다.
수동 전달주문이 들어오면 판매자가 계정이나 링크를 직접 전달합니다.
디바이스 제한 (대) (선택)
3
Business 플랜부터 — 검증 API 호출 시 디바이스가 자동 등록됩니다
2
결제 즉시 키 발급 — 구매자가 받는 화면
결제가 완료되면 새몰이 키를 만들어 주문 상세와 마이페이지 구매한 상품·이용 권한에 자동 등록합니다. 판매자는 할 일이 없습니다.
saemol.com/mypage/licenses (구매자 화면)
PhotoStudio Pro
사용 중MF-7K2N-P9XW-4RTM-QD83디바이스 2/3 대 등록 · 무기한
3
제품에서 키 검증 구현
제품의 활성화 시점(설치 후 첫 실행 등)에 키를 입력받아 검증합니다.
activate.ts
import { Saemol } from '@saemol/sdk'
const saemol = new Saemol({ secret: process.env.SAEMOL_SECRET! })
const result = await saemol.verifyLicense({
licenseKey: inputKey,
deviceId: machineId(), // 보내면 자동 등록 — 제한 초과 시 거부
version: APP_VERSION, // 허용 버전을 설정한 경우
})
if (result.valid) {
activate()
} else {
switch (result.reason) {
case 'device_limit_exceeded': /* 다른 기기 해제 안내 */ break
case 'version_not_allowed': /* result.allowed_versions 안내 */ break
case 'expired': /* 만료 — result.expires_at */ break
default: /* revoked·suspended·키 미존재 */
}
}네트워크 장애에 대비해 성공 결과를 짧게 캐시하고 유예(grace)를 두세요 — 예제는 개발 단계부터 연동의 ‘안정성’ 절에 있습니다.
4
운영 — 회수·재발급·디바이스 해제
환불 시 키는 자동 비활성화됩니다. 유출 키 교체(재발급)·정지·재개는 라이선스 관리 콘솔에서 코드 없이 처리하고, 구매자는 보관함에서 스스로 디바이스를 해제할 수 있어 응대가 줄어듭니다.
saemol.com/dashboard/licenses
PhotoStudio Pro — MF-7K2N-…-QD83
김구매 · license
출시 전 체크리스트
- 테스트 키(MF-TEST-…)로 활성화 → 거부 사유 분기까지 확인했다
- 무료 체험을 제공한다면 trial_days 설정 후 상품 상세에 체험 버튼이 뜨는지 확인했다 (Business)
- 환불 시 제품 접근이 차단되는지 확인했다 (verify 재호출 또는 entitlement.revoked 웹훅)