魔法とストライプで有料メンバーシップサイトを構築:PT.3 -ノードサーバ


これは、マジックとストライプシリーズと有料のメンバーシップサイトを構築の第3部です.次の手順を必ず確認してください.

  • ストライプと魔法を設定します.

  • .

  • サーバ
    クライアント側がどのように構築され、どのように動作するかを理解しているので、サーバー側コードについて学びましょうserver.js ).
    ここでは、クライアントとシームレスに動作するサーバが必要です
  • Authトークンを検証する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 それはこの顧客にリンクされます.
  • The 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にあなたのアプリを展開する方法を学ぶには、このシリーズの私たちをお読みください.