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);
ここから先は
¥ 1,500
Amazonギフトカード5,000円分が当たる
この記事が気に入ったらチップで応援してみませんか?