Magic and Stripe: Pt로 유료 회원 사이트를 만듭니다.3노드 서버
13687 단어 stripepasswordlessmagicauth
스트라이프와 마법을 설정합니다.
.
서버
현재 우리는 클라이언트가 어떻게 구축되었는지, 그리고 클라이언트가 어떻게 작동하는지 알고 있으며, 서버 사이드 코드
server.js
를 알고 있습니다.다음은 서버와 클라이언트의 원활한 협업에 필요한 주요 기능입니다.
didToken
가 반환한 신분검증 영패loginWithMagicLink()
.PaymentIntent
를 생성합니다.PaymentIntent
에 귀속시키고 고객이 성공적으로 지불했는지 추적할 수 있습니다.인증 토큰(didToken)
앞에서 말한 바와 같이 사용자가 전자 우편 링크를 클릭하여 로그인할 때, 우리는
didToken
라는 서버 포트에 /login
를 보내서 이를 검증할 수 있도록 할 것입니다.무효나 형식이 잘못된 영패를 계속 피하기 전에 먼저 검증하는 것이 좋다DID Token
.우리는 매직
didToken
방법으로 검증했다validate
.didToken
가 유효하면 200
상태 코드를 클라이언트에게 보냅니다./* File: server.js */
// Import, then initiate Magic instance for server-side methods
const { Magic } = require("@magic-sdk/admin");
const magic = new Magic(process.env.MAGIC_SECRET_KEY);
// Route to validate the user's DID token
app.post("/login", async (req, res) => {
try {
const didToken = req.headers.authorization.substr(7);
await magic.token.validate(didToken);
res.status(200).json({ authenticated: true });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
스트라이프 결제 의도 및 스트라이프 고객 작성
사용자가 Google의 고급 콘텐츠에 대한 평생 접근 허가증을 구매하기로 결정하면 Google은 이를 고객으로 간주합니다.고객의 결제 주기를 추적하려면
/create-payment-intent
에 server.js
라는 새 서버 엔드포인트를 추가해야 합니다.PaymentIntent
.PaymentIntent
는 실패한 결제 시도를 추적하여 고객이 한 번만 비용을 받도록 합니다./* File: server.js */
// Import & initiate Stripe instance
const stripe = require("stripe")(process.env.STRIPE_SECRET_KEY);
// Add the user to your list of customers
// Then create a PaymentIntent to track the customer's payment cycle
app.post("/create-payment-intent", async (req, res) => {
const { email } = req.body;
const paymentIntent = await stripe.customers
.create({
email,
})
.then((customer) =>
stripe.paymentIntents
.create({
amount: 50000, // Replace this constant with the price of your service
currency: "usd",
customer: customer.id,
})
.catch((error) => console.log("error: ", error))
);
res.send({
clientSecret: paymentIntent.client_secret,
customer: paymentIntent.customer,
});
});
보시다시피 우리는 고객에게 500달러의 평생 방문비를 받아서 우리의 훌륭한 고급 내용을 얻을 것입니다.😎고객 정보 업데이트
결제가 완료되면 클라이언트는
/update-customer
에 요청하여 metadata
{ lifetimeAccess: true }
에 고객 정보를 업데이트합니다.우리는 특별한 용례가 있기 때문이다.고객에게 일회성 비용을 받습니다. 이 메타데이터를 설정하면 고객이 지불했는지 확인하는 데 도움이 될 것입니다./* File: server.js */
// Update the customer's info to reflect that they've
// paid for lifetime access to your Premium Content
app.post("/update-customer", async (req, res) => {
const { customerID } = req.body;
const customer = await stripe.customers.update(customerID, {
metadata: { lifetimeAccess: true },
});
res.send({
customer,
});
});
유료 고객 확인
현재 사용자는 비용을 성공적으로 지불했기 때문에 프리미엄 콘텐츠 페이지를 방문할 수 있을 것이다.사용자가 권한을 부여받았는지 확인하기 위해서, 우리는
/validate-customer
단점을 사용할 것입니다.사용자의 이메일 주소가 필요하며 해당 이메일을 소유한 고객 목록을 반환해야 합니다.고객은 평생 액세스를 한 번만 구매하는 것이 이상적입니다.이렇게 되면
stripe.customers.list()
되돌아오는 목록에는 시종일관 비용을 지불하는 고객이 있을 것이다.그러나 사고는 실제로 발생할 것이다.🤷🏻♀️
사용자가 평생 방문을 두 번 구매하는 것을 방지하기 위해서, 나는
SignUp
구성 요소에 논리를 추가하여 등록을 시도한 사용자가 평생 방문한 스트라이프 고객인지 확인하는 것을 권장합니다.해당하는 경우 고급 컨텐트 페이지로 보냅니다.그렇지 않으면, 그들은 계속 지불 페이지로 들어갈 수 있다./* File: server.js */
// Collect the customer's information to help validate
// that they've paid for lifetime access
app.post("/validate-customer", async (req, res) => {
const { email } = req.body;
const customer = await stripe.customers.list({
limit: 1,
email,
});
res.send({
customer: customer.data,
});
});
테스트 통합
자, 이제 유료 회원 응용 프로그램이 클라이언트와 서버 쪽에서 작동하는 원리를 알았으니 한번 테스트해 봅시다!다음은 테스트를 제안하는 몇 가지 사용자 경험 절차입니다.
4242 4242 4242 4242
다음
예!너는 지금 유료 회원 사이트가 하나 생겼다.이 시리즈를 읽고 Heroku에 응용 프로그램을 배치하는 방법을 알아보세요.
Reference
이 문제에 관하여(Magic and Stripe: Pt로 유료 회원 사이트를 만듭니다.3노드 서버), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/magiclabs/build-a-paid-membership-site-with-magic-and-stripe-pt-3-node-server-1f73텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)