Stripeの決済完了後にデータベースにデータを保存するためには、StripeのWebhookを利用して決済完了のイベントを受け取り、そのイベントデータをデータベースに保存する処理を実装する必要があります



### 必要なもの


1. **Stripeアカウント**: テストモードでの動作確認を行います。

2. **サーバー環境**: Webhookを受け取るためのサーバー。

3. **データベース**: MySQL, PostgreSQL, MongoDBなど、お好みのデータベース。

4. **プログラミング言語**: Node.js, Python, PHPなどのサーバーサイド言語。


### システム構成


1. **Stripeの設定**

    - 商品の登録

    - Webhookの設定


2. **サーバーサイド**

    - Webhookを受け取るエンドポイントの作成

    - Stripeのイベントデータをパースしてデータベースに保存する処理


### Stripeの設定


1. **Stripeダッシュボードで商品を登録**

    - 商品を作成し、必要に応じて価格や説明を設定します。


2. **Webhookの設定**

    - StripeダッシュボードでWebhookエンドポイントを設定します。

    - 「checkout.session.completed」イベントを受信するように設定します。


### サーバーサイドの実装


以下にNode.jsとExpressを使用したサンプルコードを示します。必要に応じて言語を変更してください。


#### サーバーサイド(Node.js)


1. **必要なパッケージをインストール**


```bash

npm install express body-parser stripe

```


2. **Webhookエンドポイントの作成**


```javascript

const express = require('express');

const bodyParser = require('body-parser');

const stripe = require('stripe')('your-stripe-secret-key');

const app = express();

const endpointSecret = 'your-webhook-signing-secret';


app.use(bodyParser.json());


app.post('/webhook', bodyParser.raw({ type: 'application/json' }), (req, res) => {

    const sig = req.headers['stripe-signature'];


    let event;


    try {

        event = stripe.webhooks.constructEvent(req.body, sig, endpointSecret);

    } catch (err) {

        console.log(`Webhook Error: ${err.message}`);

        return res.status(400).send(`Webhook Error: ${err.message}`);

    }


    // Handle the checkout.session.completed event

    if (event.type === 'checkout.session.completed') {

        const session = event.data.object;


        // Retrieve the session. If you require line items in the response, you may include them by expanding line_items.

        stripe.checkout.sessions.retrieve(

            session.id,

            {

                expand: ['line_items'],

            },

            (err, session) => {

                if (err) {

                    console.log(err);

                } else {

                    // Save session data to your database

                    saveSessionToDatabase(session);

                }

            }

        );

    }


    res.json({ received: true });

});


const saveSessionToDatabase = (session) => {

    // Implement your database saving logic here

    console.log('Session saved to database:', session);

};


app.listen(3000, () => console.log('Server is running on port 3000'));

```


### データベースへの保存


上記の`saveSessionToDatabase`関数内で、必要なデータをデータベースに保存します。以下は、MongoDBを使用した例です。


#### MongoDBの例


1. **必要なパッケージをインストール**


```bash

npm install mongoose

```


2. **MongoDB接続とデータ保存の実装**


```javascript

const mongoose = require('mongoose');


mongoose.connect('your-mongodb-connection-string', { useNewUrlParser: true, useUnifiedTopology: true });


const sessionSchema = new mongoose.Schema({

    sessionId: String,

    customerId: String,

    amountTotal: Number,

    currency: String,

    paymentStatus: String,

    lineItems: Array,

});


const Session = mongoose.model('Session', sessionSchema);


const saveSessionToDatabase = (session) => {

    const newSession = new Session({

        sessionId: session.id,

        customerId: session.customer,

        amountTotal: session.amount_total,

        currency: session.currency,

        paymentStatus: session.payment_status,

        lineItems: session.line_items.data,

    });


    newSession.save((err) => {

        if (err) {

            console.log('Error saving session to database:', err);

ここから先は

418字

¥ 1,500

期間限定!Amazon Payで支払うと抽選で
Amazonギフトカード5,000円分が当たる

この記事が気に入ったらチップで応援してみませんか?