魔法とストライプで有料メンバーシップサイトを構築:PT.3 -ノードサーバ
13646 ワード
これは、マジックとストライプシリーズと有料のメンバーシップサイトを構築の第3部です.次の手順を必ず確認してください.
ストライプと魔法を設定します.
.
サーバ
クライアント側がどのように構築され、どのように動作するかを理解しているので、サーバー側コードについて学びましょう
ここでは、クライアントとシームレスに動作するサーバが必要です Authトークンを検証する ストライプを作る 顧客をマッチングさせるためにストライプ顧客を作る ユーザーが実際にあなたのプレミアムコンテンツへの生涯アクセスを持っている顧客であることを確認します.
Authトークン( didtoken )の検証
前述のように、ユーザーがログインするメールリンクをクリックすると、
私たちは
ストライプ支払い意図を作成し、ストライプ顧客
一度ユーザーが生涯のアクセスパスを購入することを決定当社のプレミアムコンテンツには、我々は顧客を考慮します.お客様の支払いサイクルを追跡するために、新しいサーバエンドポイントを追加する必要があります 顧客のメールアドレスを作成します. そして、 The
ストライプ顧客の情報を更新する
支払いが通過するとすぐに、クライアント側は要求を送ります
有料顧客の検証
ユーザーが正常に支払った今、彼らはプレミアムコンテンツページにアクセスできるようにする必要があります.ユーザーが承認されているかどうかを確認するには、
理想的には、お客様は一度だけ生涯のアクセスを購入することを知っている必要があります.このように、リスト
しかし、事故は起こります.🤷🏻♀️
ユーザーが2回生涯のアクセスを購入するのを防ぐために、私はあなたの
統合テスト
さて、我々はどのように有料メンバーシップのアプリは、クライアントとサーバー側の両方の作品を知っている、それを試してみましょう!以下にテストを提案します. ヘッドアッププレミアムコンテンツページにサインアップし、生涯のアクセスを支払う. 有料の顧客としてログインし、プレミアムコンテンツページにアクセスしようとします. 別のメールを使用して、未払いの顧客としてログインし、プレミアムコンテンツページにアクセスしようとします. ところで、このテストカード番号で支払いを行うことができます.
次は何
ああ!今、有料会員サイトがあります.Herokuにあなたのアプリを展開する方法を学ぶには、このシリーズの私たちをお読みください.
ストライプと魔法を設定します.
.
サーバ
クライアント側がどのように構築され、どのように動作するかを理解しているので、サーバー側コードについて学びましょう
server.js
). ここでは、クライアントとシームレスに動作するサーバが必要です
didToken
) 魔法の帰還loginWithMagicLink()
. PaymentIntent
顧客の支払いライフサイクルを追跡する.PaymentIntent
かどうかを顧客が正常に支払っているかどうかを追跡します.Authトークン( didtoken )の検証
前述のように、ユーザーがログインするメールリンクをクリックすると、
didToken
サーバのエンドポイントに/login
検証するには.を検証するのがベストプラクティスですDID Token
無効または不正なトークンを避けるために続行する前に.私たちは
didToken
魔法のようにvalidate
メソッド.If the 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 });
}
});
ストライプ支払い意図を作成し、ストライプ顧客
一度ユーザーが生涯のアクセスパスを購入することを決定当社のプレミアムコンテンツには、我々は顧客を考慮します.お客様の支払いサイクルを追跡するために、新しいサーバエンドポイントを追加する必要があります
/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
of { lifetimeAccess: true }
. 特別なユースケースがあるのでお客様に1回の手数料を請求し、このメタデータを設定することで、お客様が支払ったかどうかを確認できます./* 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()
リターンは、常に支払われた単一の顧客を持ちます.しかし、事故は起こります.🤷🏻♀️
ユーザーが2回生涯のアクセスを購入するのを防ぐために、私はあなたの
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
この問題について(魔法とストライプで有料メンバーシップサイトを構築: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