안녕하세요,
현재 이 플러그인을 내 인스턴스에서 향후 사용할 목적으로 테스트하고 있었는데 문제가 발생했습니다.
제 Stripe 계정은 신규이며 인증이 완료되지 않아 Stripe 대시보드 > Developers에서 삭제할 수 있는 테스트 데이터를 사용하고 있습니다.
문제는 Stripe에서 데이터를 삭제해도 포럼 인스턴스의 동일한 데이터가 삭제되지 않는다는 점입니다. 이로 인해 사용자의 Billing > Payment 페이지가 충돌할 수 있습니다.
재현 단계
- 구독 플랜 생성
- 사용자를 해당 플랜에 구독. Stripe는 사용자에게
cus_abcd1234567890과 같은customer_id를 부여합니다. - Stripe 대시보드에서 데이터 삭제
- 사용자의 Billing 페이지를 다시 열면
/s/user/payment로드 시 충돌이 발생하며, 웹 브라우저 콘솔에 다음 응답 텍스트가 표시됩니다:
{\"errors\":[\"No such customer: 'cus_abcd1234567890'\"]}
인스턴스의 데이터베이스를 탐색해 보니, 여러 번 수행한 삭제 작업의 이전 데이터가 다음 테이블에서 발견되었습니다:
discourse_subscriptions_customers: 사용자 결제 페이지 충돌을 유발합니다.discourse_subscriptions_productsdiscourse_subscriptions_subscriptions
마지막 두 테이블은 충돌을 유발하지 않는 것으로 보입니다. 그러나 여전히 만료된 데이터를 포함하고 있습니다.
discourse_subscriptions_customers의 문제 있는 행을 수동으로 삭제하면 사용자의 충돌이 해결됩니다. 하지만 이를 SQL 요청을 통해 수행해야 하는 것은 복잡하고 위험하며, 특히 경험이 적은 사용자에게는 더욱 그렇습니다.
또한 Stripe 대시보드에서 사용자 정보를 수동으로 삭제하는 경우 이 문제가 발생하지 않는다는 점도 주목할 만합니다. Stripe는 여전히 그의 아카이브된 정보를 유지하며 그를 "영구 삭제됨"으로 표시합니다.
제안된 해결책
가능하다면 Stripe가 테스트 데이터가 삭제되었음을 Discourse에 알리는 방법을 마련하고, 해당 테이블의 데이터를 삭제하도록 해야 합니다.
또는,
플러그인 옵션에 “테스트 데이터 삭제” 버튼과 함께 관리자가 자신이 무엇을 하고 있는지 알 수 있도록 큰 빨간색 경고 라벨을 추가하는 방법도 있습니다.