Stripeの単発決済を最短で作る方法|5分で完成する実装手順

目次

単発決済はStripeで最短5分。この記事のゴール

この記事では、Stripeを使って「単発決済」を最速で作る方法を解説します。Stripeは柔軟なAPIと管理画面を持つオンライン決済サービスで、初めての方でも短時間で導入できるのが特徴です。とくに単発決済は構造がシンプルなので、押さえるポイントさえ理解すれば、5分程度で決済ページまで作成できます。

対象読者は、Web制作の初心者・副業で小さなサービスを作りたい方・ITに詳しくない個人事業主です。この記事は専門用語を短く補足しながら、操作画面の流れと最小のコード例(PHP)だけを紹介しますので、初めてStripeを触る方でも安心して進められます。

また、Stripeは機能が多く「どこから手をつけたらいいのか分からない」状態になりがちです。そこで本記事では、最短のルートとして「DashboardでProduct/Priceを作成 → Payment IntentをPHPで生成 → Checkoutで決済完了」という一本道だけを扱います。まずは最短ルートを理解し、その後で必要に応じて機能を広げる形が効率的です。

この記事を読み終える頃には、あなた自身の環境で単発決済が動く状態になり、売上テストやメール通知などの応用も見据えられるようになります。

単発決済に必要な3つの要素(Product・Price・Payment Intent)

Stripeの単発決済は、大きく分けて3つの要素で構成されています。これらを理解すると、どの順番で設定すればいいかが自然と見えてきます。

Product(商品)

Productは「商品そのもの」を表すStripe上のデータです。教材、サービス、物販など、販売する対象の基本情報をまとめたものと考えてください。1つの商品に対して複数の料金を設定できるため、単発決済だけでなく、後からサブスクやキャンペーン価格を追加することもできます。

Price(金額)

Priceは「料金の設定」です。金額、通貨、課金方式(単発 or 定期)を決める場所で、Stripeの課金処理はこのPriceに紐づいて行われます。単発決済の場合は「one_time」という扱いになり、ユーザーのカードでは継続課金は発生しません。Productとは1対多の関係で、複数のPriceを作ることができます。

Payment Intent(決済の本体)

Payment Intentは「決済プロセス」そのものを管理するStripeの中心的な仕組みです。ユーザーがカード情報を入力し、支払いが成功するまでの状態を一本のIntent(意図)として管理します。Stripe側で不正検知(Fraudチェック)や3Dセキュア確認が行われるのも、このIntentが軸になります。

単発決済では、基本的に「金額を指定してPayment Intentを作る → Checkoutで支払ってもらう」という順番です。この記事では、初心者でも理解しやすい最小構成のコードで実装します。

最速でStripe単発決済を作る手順(全体フロー)

Stripeで単発決済を最短で作るためには、全体の流れを最初にイメージすることが大切です。Stripeは多機能なサービスですが、単発決済に必要なステップは実はとてもシンプルです。初心者の方でも迷わないよう、最短ルートだけに絞った全体フローを紹介します。

まず、Stripeの管理画面(Dashboard)で「Product(商品)」「Price(金額)」を作成します。これにより、販売したい商品とその料金がStripe上で定義されます。次に、サーバー側でPHPを使って「Payment Intent(決済本体)」を作成します。Intentを作ることで、Stripeは支払いを開始する準備が整い、カード情報の入力画面へ誘導できるようになります。

最後に、Stripeが提供する「Checkout」のURLを生成し、ユーザーを決済ページへ移動させます。CheckoutはUIが完成されたフォームなので、自前でカード決済画面を作る必要はありません。決済が完了すると、StripeのDashboardに履歴が記録され、売上データを確認できるようになります。

この流れを身につければ、単発決済の導入は5分程度で完了します。一度セットアップしてしまえば、商品の追加や金額変更も簡単に行えるため、小さなビジネスにとって扱いやすい仕組みになります。

DashboardでProductとPriceを作成する

Stripeの単発決済は、管理画面で「商品」と「金額」の設定を行うところから始まります。ここでは、初心者の方でも迷わないよう、最短で作るための最低限の設定だけを説明します。

まず、Stripe Dashboardにログインし、左メニューの「商品(Products)」を選択します。次に「商品を追加」をクリックし、商品の名前と説明(任意)を入力します。商品名はユーザーに表示されるため、分かりやすい名称にしておくと後の管理が楽になります。

商品を作成すると、そのまま「価格(Price)」の設定画面に進みます。ここで決済金額を入力し、課金方式は「定期ではなく単発」を選択します。単発の場合は自動的に「one-time」扱いとなり、ユーザーに継続課金は発生しません。価格は1つだけでも構いませんが、あとで複数の金額パターンを追加することも可能です。

設定が完了すると、Product ID と Price ID がStripe上に発行されます。後ほどPHPのコードでこのPrice IDを使うため、メモしておきましょう。Stripeの画面からいつでもコピーできるので慌てる必要はありませんが、実装時に確実に利用する重要な値です。

ここまでで、単発決済の準備は半分以上完了したと言ってよいでしょう。次のステップでは、このPriceを使って決済を開始するための「Payment Intent」を作成します。

PHPでPayment Intentを作成する(最短コード)

ここからは、Dashboardで作成したPriceを使って、実際に決済処理を開始するための「Payment Intent」をPHPで作成します。Payment Intentは、Stripe側で支払いを確定するまでの一連の流れ(カード情報の入力・3Dセキュア認証など)を管理する重要な仕組みです。難しいように見えますが、単発決済なら数行のPHPコードで実装できます。

以下のコードは、最短で動かすための基本形です。ComposerでStripe公式SDKをインストールした前提で進めています。


// composer require stripe/stripe-php

require 'vendor/autoload.php';

\Stripe\Stripe::setApiKey('sk_test_xxxxxx'); // 秘密鍵(環境変数で管理推奨)

$intent = \Stripe\PaymentIntent::create([
    'amount' => 2000,          // 金額(最小単位:例 2000 = 20円)
    'currency' => 'jpy',       // 日本円
    'metadata' => [
        'product_name' => 'サンプル商品'
    ],
]);

echo $intent->client_secret;

このコードは、決済金額と通貨を指定してPayment Intentを生成し、その結果として「client_secret」を返します。このclient_secretを後続のCheckoutやカード入力フローで使用します。実際には環境変数で秘密鍵を安全に管理することが推奨されますが、まずは最短ルートとしてコードを確認してください。

なお、金額をStripe DashboardのPriceに完全に連動させる場合は、Price ID を直接指定する方法もあります。この記事では「最速で動かす」ことを優先し、金額を直接指定するシンプルな書き方を使っています。

Payment Intentの作成はStripe側で不正検知や3Dセキュア判定にも利用されるため、決済の安全性を高める上でも重要なステップです。次の章では、このIntentを使って実際にユーザーが入力する決済ページ(Checkout)を作成します。

セキュリティ面の注意(鍵管理・検証)

Stripeを安全に運用するためには、秘密鍵(Secret Key)やWebhookの署名検証など、基本的なセキュリティのポイントを押さえておく必要があります。まず、秘密鍵はソースコードに直書きせず、環境変数(.env)で管理することが推奨されます。これは鍵の漏洩リスクを避けるための最も標準的な方法です。

次に、Webhookを利用する場合はStripeが送ってくるイベントに対して署名検証を行うことで、不正リクエストを防げます。単発決済の最短実装ではWebhookなしでも動かせますが、本番環境では売上確定を正確に処理するために検証が必須です。

また、StripeのSDKやAPIは随時アップデートされているため、定期的にバージョンを確認することも重要です。特に決済に関係する機能は仕様が更新されることがあるため、公式ドキュメントを参照しながら安全な実装を心がけましょう。

Checkoutで単発決済ページを作る方法

Stripe Checkoutを利用すると、カード情報の入力ページを自分で作らずに、Stripeが用意した安全なフォームをそのまま利用できます。UIも整っており、3Dセキュア対応やモバイル最適化も自動で行われるため、初心者が最速で決済システムを作る場合に最も適しています。

Checkoutは「Session」という仕組みで動き、決済に必要な情報(Price、成功URL、キャンセルURL)をまとめて生成します。以下は最短でCheckout Sessionを作成するためのPHPコード例です。


\Stripe\Stripe::setApiKey('sk_test_xxxxxx');

$session = \Stripe\Checkout\Session::create([
    'mode' => 'payment',
    'line_items' => [[
        'price' => 'price_xxxxxx', // Dashboardで作成したPrice ID
        'quantity' => 1,
    ]],
    'success_url' => 'https://example.com/success',
    'cancel_url'  => 'https://example.com/cancel',
]);

header('Location: ' . $session->url);
exit;

このコードはCheckout Sessionを作成し、そのURLにユーザーをリダイレクトして決済ページへ誘導します。ユーザーはStripeの安全な画面でカード情報を入力し、支払いを完了できます。成功後はsuccess_urlへ戻り、売上はDashboardの「Payments」に記録されます。

Checkoutを使うことで、自前のカード入力フォームを作る必要がなく、セキュリティやUIの実装コストを大幅に削減できます。初回構築はもちろん、個人事業レベルの運用でも十分な機能を備えています。

決済後の動作確認とログの見方

単発決済が完了したら、Stripe Dashboardで正しく動作しているかを確認します。Stripeはログが非常に充実しており、初心者でも状態を追いやすいのが特徴です。ここでは最速で確認するポイントだけをまとめます。

まず、左メニューの「Payments(支払い)」を開くと、最新の決済一覧が表示されます。決済が成功していればステータスが「Succeeded」となり、金額・購入者・決済手段などの情報が確認できます。もし決済が失敗している場合は「Requires payment method」などのエラー表示があり、カード情報の不備や3Dセキュア認証の失敗が原因であることが多いです。

次に、より詳細な開発者向け情報を確認するには「イベント(Events)」や「ログ(Logs)」を使用します。特にLogsには、Webhookの受信内容やAPIリクエストの履歴が時系列で記録されており、コードの動作確認に役立ちます。Payment Intentのステータスがどの段階で変化したかも追跡できるため、不正な通信やエラーの原因特定にも便利です。

Stripeはテストモードと本番モードを切り替えられるため、まずはテストカードを使って複数パターンの決済挙動を試すことをおすすめします。運用前にテストケースを確認しておくことで、ユーザーが実際に利用する際のトラブルを最小限に抑えられます。

よくあるつまずきポイントFAQ

Stripeの単発決済はシンプルとはいえ、初めて実装すると細かな部分でつまずくことがあります。ここでは、初心者の方からよく寄せられる質問をまとめて解説します。必要な箇所だけ読みながら解決に役立ててください。

Checkoutで金額を変更したいのですが?

CheckoutではPrice IDに基づいて金額が決まるため、PHPコード側で金額を直接変更することはできません。金額を変えたい場合は、Dashboardで新しいPriceを作成し、そのIDをコードに設定してください。単発決済はこの方法が最も確実で安全です。

「Invalid API Key」エラーが出る

もっとも多い原因は、秘密鍵(sk_test_…)を公開鍵(pk_test_…)と取り違えているケースです。また、コピーミスや余分なスペースが含まれている場合もあります。APIキーは環境変数で管理することでミスを防げます。

決済後の完了ページにデータを渡したい

Checkoutのsuccess_urlにクエリパラメータを付与する方法があります。また、本番運用ではWebhookを使って決済完了イベントを受信し、自動処理する方法が推奨です。Webhookを使う場合は署名検証が必須です。

日本円での決済がうまくいかない

currencyを「jpy」に設定しているか確認してください。また、amountは最小単位(円ではなく「100円なら100」)で指定する必要があります。小数は使えないため注意が必要です。

テストカードはどれを使う?

Stripeはテストモード専用のカード番号(例:4242 4242 4242 4242)を提供しています。3Dセキュアのテストが必要な場合は専用のカード番号も用意されていますので、公式ドキュメントで最新の一覧を確認してください。

運用Tips(売上管理・返品・メール通知)

単発決済が完成したら、日々の運用がスムーズに進むように、基本的な管理ポイントを押さえておくと安心です。Stripeは個人事業主やスモールビジネスにも使いやすいUIを提供しており、売上管理から返金処理、メール通知まで一通りの機能が揃っています。ここでは実務で役立つ運用Tipsをまとめました。

まず、売上管理はDashboardの「Payments」画面が中心になります。支払い状況・金額・決済手段が一覧で確認でき、日付やステータスで絞り込み検索も可能です。売上が一定数を超えると履歴が増えて管理が大変になりますが、StripeはCSVエクスポート機能も備えており、会計ソフトへの取り込みにも活用できます。

次に、返金(Refund)は決済履歴の詳細画面からワンクリックで行えます。部分返金・全額返金のどちらも対応しており、処理が完了するとユーザーへ自動でメールが送られます。本番運用では、返金時に在庫や会員権限を連動させる必要がある場合、Webhookを活用することで自動化が可能です。

最後に、メール通知の活用です。Stripeでは決済成功時のメール送信設定が用意されており、個人でも手軽に取引メールを送れます。さらに本格的な仕組みを作りたい場合は、SendGridなどの外部サービスと組み合わせることで柔軟なカスタマイズもできます。ただし、外部サービスの設定には多少の技術的な知識が必要なため、まずはStripe内の標準メール機能から始めるのがおすすめです。

これでStripeの単発決済を最短で作り、運用するための基本ポイントは一通りカバーできました。最速で動く仕組みを作ったうえで、必要になったタイミングでWebhookや在庫管理などを拡張していくと、無理なく安全に成長させていけます。実際に手を動かしながら、自分のビジネスに合った形へ育てていきましょう。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

システム開発やWeb制作をして15年以上。
このブログでは、これから起業したい人や小さくビジネスを始めたい人に役立つ情報を発信しています。
Stripeを使った販売方法や、ノーコードでサブスクを作るコツなど、
「やってみたい」を形にするためのヒントをお届けしています。

コメント

コメントする

目次