Я настраиваю подписку на наш веб-сайт Stripe. Я просмотрел документацию, и теперь на моем веб-сайте установлен веб-крючок.
Теперь я хочу обновить запись в базе данных моего веб-сайта, где столбцу записи будет присвоено другое значение после того, как один из моих пользователей подпишется на мой план членства. Я попытался получить значение сеанса в сеансе PHPSESSID, где он содержит адрес электронной почты.
Используя предложение SQL "WHERE", я попробовал следующее:
$sql = "UPDATE xxxxxx SET Plan = 'Professional' WHERE EmailAddress = '$email'";
if ($conn->query($sql) === TRUE)
{
echo "You have subscribed to the professional plan";
}
else
{
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
Обратите внимание, что:
- Синтаксис SQL отлично работает на моем сайте phpmyadmin.
- mysqli подключен к базе данных моего сайта.
- Веб-крючок также работает без проблем.
Единственная проблема заключается в том, что я не могу запустить SQL-запрос на веб-крюке после обработки платежа. После небольшой отладки я обнаружил, что переменная электронной почты в сеансе PHPSESSID не передается в строку "UPDATE xxxxxx SET Plan = 'Professional" ".
<?php
session_name("PHPSESSID");
session_start();
$email = $_SESSION["email_address"];
require_once('stripe-php/init.php');
\Stripe\Stripe::setApiKey('xxxxxx');
$endpoint_secret = 'xxxxxx';
$payload = @file_get_contents('php://input');
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
$event = null;
try {
$event = \Stripe\Webhook::constructEvent(
$payload, $sig_header, $endpoint_secret
);
} catch(\UnexpectedValueException $e) {
http_response_code(400);
exit();
} catch(\Stripe\Error\SignatureVerification $e) {
http_response_code(400);
exit();
}
// Handle the checkout.session.completed event
if ($event->type == 'checkout.session.completed')
{
$servername = "localhost";
$username = "xxxxxx";
$password = "xxxxxxx";
$dbname = "xxxxxxx";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error)
{
die("Connection failed: " . $conn->connect_error);
}
$amount = $event['data']['object']['display_items'][0]['amount'];
switch ($amount)
{
case 499:
{
$sql = "UPDATE xxxxxx SET Plan = 'Professional' WHERE EmailAddress = '$email'";
if ($conn->query($sql) === TRUE)
{
echo "You have subscribed to the professional plan";
}
else
{
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
break;
case 899:
{
$sql = "UPDATE xxxxxx SET Plan = 'Premium' WHERE EmailAddress = 'xxxxxx'";
if ($conn->query($sql) === TRUE)
{
echo "You have subscribed to the Premium plan";
}
else
{
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
break;
default:
{
$sql = "UPDATE xxxxxx SET Plan = 'Premium' WHERE EmailAddress = '$email'";
if ($conn->query($sql) === TRUE)
{
echo "You have subscribed to the Premium plan on free trial.";
}
else
{
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
}
}
http_response_code(200);
?>
Есть предложения о том, как передать значение в переменную? Или я тут все делаю неправильно?