36716-vm/subscription-success.php
2025-12-07 05:00:42 +00:00

46 lines
1.8 KiB
PHP

<?php
session_start();
require_once 'db/config.php';
require_once 'stripe/init.php';
if (!isset($_SESSION['user_id']) || $_SESSION['user_role'] !== 'client' || !isset($_GET['session_id'])) {
header('Location: login.php');
exit;
}
try {
$checkout_session = \Stripe\Checkout\Session::retrieve($_GET['session_id'], ['expand' => ['subscription.discount.coupon']]);
$subscription = $checkout_session->subscription;
if ($subscription->status === 'active') {
if (isset($subscription->discount) && $subscription->discount->coupon) {
$coupon_code = $subscription->discount->coupon->name;
if ($coupon_code) {
$stmt = db()->prepare('UPDATE discounts SET times_used = times_used + 1 WHERE code = ?');
$stmt->execute([$coupon_code]);
}
}
$client_id = $_SESSION['user_id'];
$stripe_subscription_id = $subscription->id;
$stripe_product_id = $subscription->items->data[0]->price->product;
$status = $subscription->status;
$start_date = date('Y-m-d H:i:s', $subscription->current_period_start);
$end_date = date('Y-m-d H:i:s', $subscription->current_period_end);
$pdo = db();
$stmt = $pdo->prepare("INSERT INTO client_subscriptions (client_id, stripe_subscription_id, stripe_product_id, status, start_date, end_date) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->execute([$client_id, $stripe_subscription_id, $stripe_product_id, $status, $start_date, $end_date]);
header('Location: dashboard.php?subscription=success');
exit;
} else {
header('Location: subscription-cancel.php?reason=payment_not_complete');
exit;
}
} catch (\Stripe\Exception\ApiErrorException $e) {
// Handle error
header('Location: subscription-cancel.php?reason=invalid_session');
exit;
}