메인 콘텐츠로 건너뛰기
크리에이터가 배포한 쿠폰 코드를 사용합니다.

흐름

1. 쿠폰 코드 입력  →  2. 검증  →  3. 쿠폰 사용  →  4. 보상 지급

쿠폰 검증

사용 전 쿠폰 유효성을 확인합니다. 요청
curl -X POST "https://sandbox-sdk-api.playcamp.io/v1/server/coupons/validate" \
  -H "Authorization: Bearer ak_server_xxx:secret" \
  -H "Content-Type: application/json" \
  -d '{
    "couponCode": "CREATOR-ABC12-001",
    "userId": "user_12345"
  }'
응답 (유효한 경우)
{
  "data": {
    "valid": true,
    "couponCode": "CREATOR-ABC12-001",
    "reward": [
      { "itemId": "gem", "itemQuantity": 100 }
    ],
    "packageName": { "ko": "웰컴 패키지", "en": "Welcome Package" },
    "creatorKey": "ABC12",
    "campaignId": "campaign_001"
  }
}
응답 (유효하지 않은 경우)
{
  "data": {
    "valid": false,
    "couponCode": "INVALID-CODE",
    "errorCode": "COUPON_NOT_FOUND",
    "errorMessage": "쿠폰을 찾을 수 없습니다"
  }
}

쿠폰 사용

검증 후 실제로 쿠폰을 사용합니다. 요청
curl -X POST "https://sandbox-sdk-api.playcamp.io/v1/server/coupons/redeem" \
  -H "Authorization: Bearer ak_server_xxx:secret" \
  -H "Content-Type: application/json" \
  -d '{
    "couponCode": "CREATOR-ABC12-001",
    "userId": "user_12345"
  }'
응답 (200 OK)
{
  "data": {
    "success": true,
    "usageId": 5678,
    "couponCode": "CREATOR-ABC12-001",
    "reward": [
      { "itemId": "gem", "itemQuantity": 100 }
    ],
    "packageName": { "ko": "웰컴 패키지" },
    "creatorKey": "ABC12",
    "campaignId": "campaign_001",
    "redeemedAt": "2024-01-15T10:30:00.000Z"
  }
}

에러 코드

코드설명
COUPON_NOT_FOUND존재하지 않는 쿠폰
COUPON_INACTIVE비활성화된 쿠폰
COUPON_NOT_YET_VALID사용 기간 전
COUPON_EXPIRED만료됨
USER_CODE_LIMIT유저별 코드 한도 초과
USER_PACKAGE_LIMIT유저별 패키지 한도 초과
TOTAL_USAGE_LIMIT전체 한도 초과

전체 흐름 예시 (Node SDK)

import { PlayCampServer } from '@playcamp/node-sdk';

const server = new PlayCampServer('your_server_key:your_secret');

async function redeemCoupon(userId: string, couponCode: string) {
  // 1. 검증
  const validation = await server.coupons.validate({ couponCode, userId });

  if (!validation.valid) {
    return {
      success: false,
      error: validation.errorCode,
      message: validation.errorMessage,
    };
  }

  // 2. 사용
  const result = await server.coupons.redeem({ couponCode, userId });

  // 3. 게임 내 보상 지급
  for (const reward of result.reward) {
    await giveItemToUser(userId, reward.itemId, reward.itemQuantity);
  }

  return { success: true, reward: result.reward };
}