カスタムPHPウェブサイトにStripe Checkoutを追加する方法(プラグイン不要)
Stripe は利用できる中で最もクリーンな決済 API であり、それを PHP に直接組み込めば、月額の SaaS 費用も、WooCommerce の肥大も、Shopify のトランザクション手数料もありません。以下は、BuiltToWinWeb の実際のクライアントストアで稼働している、まさにその実装です。純粋な PHP、公式の Stripe SDK、安全な webhook、そして自動化されたメール確認です。チェックアウトセッション、リダイレクト、webhook 検証、注文処理といった各部品がどう噛み合うかが分かり、プラットフォームに分け前を渡すことなく実際の決済を受けられます。ここにあるのはすべて本番コードであり、使い捨てのデモではありません。
ネイティブPHP + Stripeがあらゆるページビルダーを上回る理由
ShopifyはStripe自身の手数料に加えて取引ごとに0.5〜2%を請求します。WooCommerceは14以上のプラグイン依存関係を追加し、チェックアウトページのLCPが3.8秒に遅くなります。カスタムPHP統合は0.6秒以下でロードするチェックアウトを実現します。
- プラットフォーム取引手数料ゼロ – Stripeの2.9% + 30¢のみ
- チェックアウトページLighthouseスコア:98対Shopifyの典型的な61
- 完全なWebhookコントロール – カスタム履行、在庫、メール
- 電子商取引プラットフォームの定期購読コストなし
- コードを所有し、どこでもホスト、自由に移行
ステップ1 — Stripe PHP SDKをインストール
Composerが最もクリーンなアプローチです。ホストがComposerをサポートしていない場合は、SDK ZIPをダウンロードしてプロジェクトルートに配置します。
composer require stripe/stripe-php
チェックアウトスクリプトの先頭でロードします:
require_once __DIR__ . '/vendor/autoload.php';
\Stripe\Stripe::setApiKey(getenv('STRIPE_SECRET_KEY'));
ステップ2 — チェックアウトセッションを作成(サーバー側)
ブラウザに秘密鍵を置かないでください。フロントエンドがPOSTするサーバー側エンドポイントを作成します。
<?php
require_once __DIR__ . '/vendor/autoload.php';
$session = \Stripe\Checkout\Session::create(['payment_method_types'=>['card'],'line_items'=>[['price_data'=>['currency'=>'usd','unit_amount'=>300000,'product_data'=>['name'=>'Business Pro Website']],'quantity'=>1]],'mode'=>'payment','success_url'=>'https://yoursite.com/success?session_id={CHECKOUT_SESSION_ID}','cancel_url'=>'https://yoursite.com/pricing']);
header('Content-Type: application/json');
echo json_encode(['url'=>$session->url]);
ステップ3 — フロントエンドからユーザーをリダイレクト
価格ページのボタンでのシンプルなfetch呼び出し:
document.getElementById('buy-btn').addEventListener('click', async () => {
const res = await fetch('/create-checkout-session.php', {method:'POST'});
const data = await res.json();
window.location.href = data.url;
});
ステップ4 — Webhookを処理(注文履行)
Stripeは支払いが成功するとWebhookエンドポイントにPOSTを送信します。ここでメール送信、在庫更新、注文記録を行います。
<?php
$payload = file_get_contents('php://input');
$event = \Stripe\Webhook::constructEvent($payload, $_SERVER['HTTP_STRIPE_SIGNATURE'], getenv('STRIPE_WEBHOOK_SECRET'));
if ($event->type === 'checkout.session.completed') { fulfill_order($event->data->object); }
http_response_code(200);
StripeダッシュボードでWebhook URLを登録してください:開発者 → Webhooks。
ステップ5 — PHPMailerで確認メールを送信
`fulfill_order()`関数内で、セッションから顧客のメールアドレスを取得しPHPMailerを実行します。
function fulfill_order($session) {
$email = $session->customer_details->email;
$mail = new PHPMailer\PHPMailer\PHPMailer(true);
$mail->isSMTP(); $mail->Host = 'smtp.yourhost.com';
$mail->setFrom('[email protected]', 'あなたのビジネス');
$mail->addAddress($email);
$mail->Subject = 'お支払い確認 – ありがとうございます!';
$mail->Body = 'ご注文が確認されました。';
$mail->send();
}
プラットフォーム比較 — カスタムPHP・Shopify・WooCommerce
実際のビジネスへの影響
月$50,000の売上があるストアでは、Stripeの2.9% + 30¢は避けられません。しかしShopifyの追加プラットフォーム料金0.5〜2%は月$250〜$1,000の余分なコストになります。
- Shopify Advanced ($399/月) + $50kの0.5% = $649/月のプラットフォームコスト
- カスタムPHP + Stripe = $0/月のプラットフォームコスト
- $8,000のカスタムビルドの損益分岐点:9ヶ月以内
- チェックアウトページが3倍速く読み込まれる = カート離脱率が低下
計算は単純:月$15,000以上処理するなら、カスタムPHPストアは1年以内に元が取れます。
セキュリティチェックリスト
- キーは環境変数に保存 – PHPファイルにハードコードしない
- 常に`constructEvent()`でStripe Webhookシグネチャを検証
- HTTPS必須 – Stripeが要求します
- 冪等性:処理前に注文がすでに存在するか確認
- `/create-checkout-session.php`にレート制限(IPごとに10リクエスト/時間)
よくある質問
PHPでStripeを使うにはComposerが必要ですか?
Composerは推奨されますが必須ではありません。Stripe PHP SDKをZIPファイルとしてダウンロードし、require_onceで手動で含めることができます。
Shopifyのようなプラットフォームなしで支払いを処理するのは安全ですか?
はい。StripeはPCI-DSSレベル1認定です。サーバーは生のカード番号を扱いません – StripeのJSがクライアント側でトークン化します。
実際のカードに課金せずにStripeをテストするには?
プレフィックスsk_test_のStripeテストモードを使用してください。テストカード4242 4242 4242 4242を任意の有効期限とCVCで使用できます。
このアプローチでサブスクリプションを追加できますか?
はい。Checkoutセッションモードを"payment"から"subscription"に変更し、price_dataの代わりに定期価格IDを渡します。
カスタムStripeストアを構築しましょうか?
BuiltToWinWebはネイティブStripe統合、Lighthouse 98+スコア、月額プラットフォーム料金ゼロのカスタムPHP Eコマースストアを構築します。
ストアは通常3〜4週間で納品されます。24時間以内の返信を保証。
同一のHostinger VPSホスティングでの管理テストのベンチマークデータ。