1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WordPress × Simple Membership × PayPay を連携して有料会員サイトを作る方法【PHP実装あり】

Posted at

WordPress × Simple Membership × PayPay を連携して有料会員サイトを作る方法【PHP実装あり】

🔰 はじめに

WordPress の会員管理プラグイン「Simple Membership」と、日本国内で普及している QR コード決済「PayPay」を連携し、
PayPay決済後に 自動で有料会員登録を行う仕組みを構築します。

  • ✅ 月額制・回数制限なし(都度払い方式)
  • ✅ 会員登録を自動化(メール認証リンク付き)
  • ✅ Webhook対応で決済後の処理を完全自動化

🧩 使用技術・前提条件


💳 1. PayPay決済フォームをショートコードで実装

add_shortcode('paypay_payment', 'paypay_payment_shortcode');

function paypay_payment_shortcode($atts) {
    ob_start();
    ?>
    <form method="POST">
        <label>メールアドレス:</label><br>
        <input type="email" name="email" required><br><br>
        <input type="hidden" name="paypay_payment" value="1">
        <button type="submit" name="amount" value="1000">1ヶ月プラン</button>
        <button type="submit" name="amount" value="3000">3ヶ月プラン</button>
    </form>
    <?php
    return ob_get_clean();
}


📤 2. フォーム送信時にQRコードを生成


add_action('template_redirect', 'handle_paypay_payment_form');

function handle_paypay_payment_form() {
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['paypay_payment'])) {
        $email = sanitize_email($_POST['email']);
        $amount = (int) $_POST['amount'];

        $merchantPaymentId = uniqid("pp_{$amount}_");

        require_once get_stylesheet_directory() . '/shortcodes/vendor/autoload.php';

        $client = new \PayPay\OpenPaymentAPI\Client([
            'API_KEY'     => 'API_KEY',
            'API_SECRET'  => 'API_SECRET',
            'MERCHANT_ID' => 'MERCHANT_ID'
        ], false); // 本番環境

        $payload = new \PayPay\OpenPaymentAPI\Models\CreateQrCodePayload();
        $payload->setMerchantPaymentId($merchantPaymentId);
        $payload->setRequestedAt(new DateTime());
        $payload->setCodeType("ORDER_QR");
        $payload->setAmount(["amount" => $amount, "currency" => "JPY"]);
        $payload->setRedirectType('WEB_LINK');
        $payload->setRedirectUrl(home_url('/thank-you/'));

        $result = $client->code->createQRCode($payload);

        if ($result['resultInfo']['code'] === 'SUCCESS') {
            $url = $result['data']['url'];

            // メールアドレスと紐づけてローカル保存
            $mapFile = $_SERVER['DOCUMENT_ROOT'] . '/paypay_payment_logs.json';
            $map = file_exists($mapFile) ? json_decode(file_get_contents($mapFile), true) : [];
            $map[$merchantPaymentId] = ['email' => $email, 'amount' => $amount];
            file_put_contents($mapFile, json_encode($map, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));

            wp_redirect($url);
            exit;
        }
    }
}

📩 3. PayPay Webhookで支払い完了を受信・会員登録

Webhook用ファイル(例:/paypay-webhook.php)を用意します。

✅ まとめ
• PayPayとSimple Membershipを連携することで、国内ユーザー向けの柔軟な会員サイト構築が可能です。
• QRコード払い+メール認証によるアクティベーション方式は、定期課金を使わず安全に導入できます。
• PayPay決済の導入により、会員数の増加を見込めます。
• 必要に応じて 返金処理、アカウント状態変更、通知メール強化も可能です。

📌 おまけ:今後の拡張案
• merchant_order_id による重複チェック強化
• Webhook署名検証(セキュリティ強化)
• 会員の延長更新(現在は新規登録のみ)

「Simple Membership + PayPayで会員サイト構築したい」という方、気軽にコメントください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?