Discourse 구독 플러그인

[가이드] Stripe 가격 테이블을 사용하여 Discourse 구독 설정하기 (및 일반적인 함정)

안녕하세요,

긴 시간의 문제 해결 과정을 거친 후, Stripe 가격 테이블이라는 최신 방법을 사용하여 공식 discourse-subscriptions 플러그인을 설정하는 데피니티브한 가이드를 공유하고자 합니다. 이 방법은 강력하지만, 바로 눈에 띄지 않는 몇 가지 중요한 단계가 있으며, 이를 무시하면 웹훅 실패(404 Not Found)나 결제 성공 후에도 사용자가 그룹에 추가되지 않는 등의 오류가 발생할 수 있습니다.

다음은 확인된 정상 작동하는 단계별 프로세스입니다.


1부: Stripe 설정

이 프로세스에서는 모든 제품과 가격에 대해 Stripe를 "진실의 원천(source of truth)"으로 사용합니다.

1. 제품 및 가격 생성

  • Stripe 대시보드에서 **Live Mode(실제 모드)**에 있는지 확인하십시오.
  • Products(제품) > **Product catalog(제품 카탈로그)**로 이동합니다.
  • 먼저 주요 제품(예: “Premium Membership”, “VIP Access”)을 생성합니다.
  • 각 제품 아래에서 관련 가격(예: XX / month, XXX / year)을 모두 생성합니다.

2. 매우 중요한 메타데이터 단계 플러그인이 사용자를 자동으로 그룹에 추가하려면, 생성하는 모든 Price(가격) 객체에 특정 메타데이터를 추가해야 합니다. Stripe 대시보드 UI에서는 이를 찾기 어려울 수 있습니다.

  • 새 가격을 생성할 때(또는 “Edit price” 옵션을 찾을 수 있는 경우), 메타데이터를 추가해야 합니다. 가격 생성 중 **“Additional options(추가 옵션)”**을 클릭해야 메타데이터 필드가 표시될 수 있습니다.
  • **+ Add metadata(메타데이터 추가)**를 클릭하고 다음을 입력하십시오:
    • KEY(키): group_name
    • VALUE(값): Discourse에서 해당 그룹의 고유하고 URL에 안전한 슬러그/핸들, 전체 이름이 아닙니다.

예시:

  • Discourse 그룹의 전체 이름이 **“Enclave Plus”**인 경우, 그 슬러그는 EnclavePlus일 가능성이 높습니다.
  • 값으로 EnclavePlus를 사용해야 합니다. 공백이 포함된 "Enclave Plus"를 사용하면 실패합니다.
  • 그룹과 연결하려는 모든 가격 플랜에 대해 이 과정을 반복해야 합니다.

3. Stripe 가격 테이블 생성

  • **Products > Pricing tables(제품 > 가격 테이블)**로 이동합니다.
  • 새 테이블을 만들고 방금 설정한 가격들을 추가합니다.
  • 테이블을 게시한 후, “Copy code(코드 복사)” 버튼을 클릭하여 가격 테이블 ID( prctbl_...로 시작)를 가져옵니다.

4. 웹훅 엔드포인트 구성 (404 오류 수정) 이는 가장 흔한 실패 지점입니다.

  • **Developers > Webhooks(개발자 > 웹훅)**로 이동하고 **+ Add endpoint(엔드포인트 추가)**를 클릭합니다.
  • **Endpoint URL(엔드포인트 URL)**은 다음 형식이어야 합니다: https://your-discourse-site.com/s/hooks 참고: 올바른 경로는 /s/hooks이며, /s/stripe/webhook이 아닙니다.
  • **Events to send(보낼 이벤트)**에는 최소한 다음을 추가하십시오:
    • checkout.session.completed
    • customer.subscription.deleted
  • 엔드포인트를 생성하고 Signing secret(서명 시크릿)( whsec_...로 시작)을 복사합니다.

2부: Discourse 설정

이제 Stripe에서 설정한 모든 것을 사용하도록 플러그인을 구성해 보겠습니다.

1. API 키 및 가격 테이블 ID 입력

  • Admin > Settings(관리자 > 설정)로 이동하여 discourse subscriptions을 검색합니다.
  • 라이브 Stripe 키를 입력하십시오:
    • discourse subscriptions public key (pk_live_...)
    • discourse subscriptions secret key (sk_live_...)
    • discourse subscriptions webhook secret (whsec_...)
  • 가격 테이블 모드를 활성화합니다:
    • discourse subscriptions pricing table enabled 상자를 체크합니다.
    • discourse subscriptions pricing table id 필드에 prctbl_... ID를 붙여넣습니다.

2. Stripe 제품을 Discourse 그룹과 연결 가격 테이블을 사용하더라도 Discourse에 어떤 그룹이 어떤 제품에 속하는지 알려야 합니다.

  • Admin > Plugins > Subscriptions(관리자 > 플러그인 > 구독)로 이동하여 Products(제품) 탭을 클릭합니다.
  • **Create New Product(새 제품 생성)**을 클릭합니다.
  • Stripe의 제품 이름과 완전히 일치하는 제품 이름(예: Enclave Plus)을 입력합니다.
  • 제품을 저장합니다. 제품 페이지에서 아래로 스크롤하여 **Add New Plan(새 플랜 추가)**을 클릭합니다.
  • 이 플랜은 단순히 "다리(bridge)
5개의 좋아요