백엔드 서비스와 함께 작동하는 Stripe 구독을 얻는 것은 까다로울 수 있으며 종종 개발자가 두려운 "두뇌 분할"이라고 부르는 상황으로 이어집니다. 즉, Stripe의 로직과 자체 백엔드 데이터를 동기화하여 관리하는 것입니다.
Vratix에서는 오픈 소스 Stripe Subscriptions API 모듈을 구축하면서 이 문제를 정면으로 해결했습니다. 간단하고 확장 가능하며 개발자 친화적인 상태를 유지하기 위해 Node.js에서 Stripe 구독 청구에 접근하는 방법은 다음과 같습니다.
핵심은 데이터베이스를 최소화하면서 논리를 Stripe로 최대한 전환하는 것입니다. 다음 항목만 저장합니다:
이렇게 하면 다음을 피할 수 있습니다.
이 접근 방식을 사용하면 단일 정보 소스로서 Stripe에 의존하면서 여전히 모든 기능을 갖춘 구독 청구 시스템을 사용할 수 있습니다.
이 가이드가 끝나면 다음을 지원하는 구독 기반 앱을 갖게 됩니다.
깔끔하고 최소한의 데이터베이스 테이블을 디자인하는 것부터 시작합니다.
CREATE TABLE user_subscriptions ( "id" SERIAL PRIMARY KEY, "plan" VARCHAR NOT NULL, "user_id" INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, "customer_id" VARCHAR, "subscription_id" VARCHAR NOT NULL, "is_owner" BOOLEAN NOT NULL DEFAULT TRUE, "created_at" TIMESTAMP NOT NULL DEFAULT NOW(), UNIQUE (user_id, subscription_id) );
핵심 포인트:
우리는 비즈니스 로직을 모듈화하고 테스트 가능하게 유지하기 위해 팩토리 기능을 사용합니다. 다음은 Stripe Subscription Controller의 스니펫입니다.
async getSubscriptions() { const stripePrices = await stripe.prices.list({ active: true, type: "recurring", expand: ["data.product"], }); return stripePrices.data.map((price) => { const product = price.product as Stripe.Product; return { plan: price.lookup_key || product.name.toLowerCase().replaceAll(" ", "_"), name: product.name, priceId: price.id, interval: price.recurring!.interval, price: { currency: price.currency, amount: price.unit_amount }, }; }); }
주요 하이라이트:
createCheckout 기능은 구독 체크아웃 세션을 설정합니다.
const checkout = await stripe.checkout.sessions.create({ line_items: [ { price: priceId, adjustable_quantity: { enabled: true }, quantity: seats || 1, }, ], mode: "subscription", subscription_data: { metadata: { userId } }, success_url: CHECKOUT_SUCCESS_URL, cancel_url: CHECKOUT_CANCEL_URL, }); return { url: checkout.url! };
우리는 모든 것을 바로 사용할 수 있는 오픈 소스 모듈에 담았습니다. 30초 이내에 다음을 설정할 수 있습니다.
다음을 실행하세요.
CREATE TABLE user_subscriptions ( "id" SERIAL PRIMARY KEY, "plan" VARCHAR NOT NULL, "user_id" INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, "customer_id" VARCHAR, "subscription_id" VARCHAR NOT NULL, "is_owner" BOOLEAN NOT NULL DEFAULT TRUE, "created_at" TIMESTAMP NOT NULL DEFAULT NOW(), UNIQUE (user_id, subscription_id) );
자세한 내용은 Stripe 구독 모듈 문서를 확인하세요.
전체 코드는 GitHub 저장소에서 확인할 수 있습니다.
여기에서 작동하는 UI를 사용하여 이 모든 작업을 수행하는 방법에 대한 데모 비디오를 확인하세요.
여러분의 생각을 듣고 싶습니다. 이렇게 하면 구독 API 구축이 더 쉬워지나요? 다음에 어떤 기능을 보고 싶은지 알려주세요!
위 내용은 Node.js의 스트라이프 구독 통합 [최종 가이드]의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!