플러그인: discourse-subscriptions 버전: 최신 (최신 상태 확인됨) Discourse 버전: 3.5.4
버그 요약: 특정 엣지 케이스에서 플러그인이 유효한 결제 수단을 연결하지 않은 채 PaymentIntent를 생성하여 최종 사용자에게 구독 실패가 조용히 발생하게 됩니다.
재현 단계:
-
고객의 Stripe 고객 프로필에 만료된 카드가 저장되어 있음
-
고객이 구독을 시도하거나 결제 수단을 업데이트함
-
플러그인이 PaymentIntent를 생성하지만 새 카드 정보를 Stripe에 전달하지 못함
-
resource_missing또는payment_intent_incompatible_payment_method오류로 거래가 실패함
Stripe 오류 로그:
resource_missing: This customer has no attached payment source or default
payment method.
payment_intent_incompatible_payment_method: A payment method of type card
was expected to be present, but this PaymentIntent does not have a payment
method and none was provided.
Stripe에서 확인한 내용:
-
Stripe 계정은 정상 상태이며, Stripe 측에 문제가 없음
-
PaymentIntent가 결제 수단 없이 생성됨
-
플러그인이 일부 경우
pm_결제 수단 객체가 아닌card_객체를 전달하고 있음 — 이는 Stripe의 현재 API에서 서로 교환 가능하지 않음
추가 맥락:
-
활성 멤버 약 18,000명의 커뮤니티에서 월평균 약 2회 발생
-
이 플러그인은 호스트 레벨에서 수정할 수 없는 내장 플러그임 (Communiteq과 확인됨)
-
일반 체크아웃은 정상 작동하며, 실패는 고객이 유효하지 않거나 만료된 카드를 보유하고 있어 새 결제를 시도할 때 특정적으로 발생함
-
우회 방법은 호스트된 Stripe 인보이스를 수동으로 보내는 것이지만, 이는 사용자의 Discourse 그룹을 자동으로 할당하는 웹후크를 트리거하지 않아 두 번째 수동 단계를 생성함
요청 사항: 고객의 기존 카드가 만료되었거나 유효하지 않을 때의 결제 수단 핸드오프 수정. 새 카드 입력이 제출 전에 PaymentIntent에 올바르게 연결되는 적절한 pm_ 결제 수단 객체를 생성하도록 보장해야 함.