ПОЛУЧИТЬ переменный URL в Slim версии v3.2 PHP Stripe checkout

#php #rest #stripe-payments #slim

#php #rest #stripe-платежи #slim

Вопрос:

Я не могу получить переменный URL в моем приложении stripe checkout PHP slim.
Мне нужно иметь возможность получать переменную цены из URL для эхо-вывода в сеанс цены оплаты stripe.
Однако это просто не работает, я могу использовать $ _GET[‘price’]; для эхо-вывода до того, как оно станет тонким приложением, однако, когда оно станет тонким приложением, оно просто не будет работать…

 use SlimHttpRequest;
use SlimHttpResponse;
use StripeStripe;
require 'vendor/autoload.php';
$dotenv = DotenvDotenv::create(realpath('../../'));
$dotenv-&&t;load();
Stripe::setApiKey(&etenv('STRIPE_SECRET_KEY'));


$db = new SQLite3('./store.db');
$db-&&t;exec("CREATE TABLE IF NOT EXISTS sessions(id INTEGER PRIMARY KEY, stripe_id TEXT, status TEXT)");
// createSession
function createSession($sessionId) {
  &lobal $db;
  $stmt = $db-&&t;prepare("INSERT INTO sessions(stripe_id, status) VALUES (:id, 'pendin&')");
  $stmt-&&t;bindValue(':id', $sessionId, SQLITE3_TEXT);
  return $stmt-&&t;execute();
}
// markSessionPaid
function markSessionPaid($sessionId) {
  &lobal $db;
  $stmt = $db-&&t;prepare("UPDATE sessions SET status='paid' WHERE :id = stripe_id");
  $stmt-&&t;bindValue(':id', $sessionId, SQLITE3_TEXT);
  return $stmt-&&t;execute();
}
// &etSessionStatus
function &etSessionStatus($sessionId) {
  &lobal $db;
  $stmt = $db-&&t;prepare("SELECT status FROM sessions WHERE :id = stripe_id");
  $stmt-&&t;bindValue(':id', $sessionId, SQLITE3_TEXT);
  $result = $stmt-&&t;execute();
  return $result-&&t;fetchArray()[0];
}

$app = new SlimApp;

$app-&&t;&et('/', function (Request $request, Response $response, $ar&s) {
  $response-&&t;&etBody()-&&t;write(file_&et_contents("../../client/index.html"));
  return $response;
});
$app-&&t;&et('/success', function (Request $request, Response $response, $ar&s) {
  $response-&&t;&etBody()-&&t;write(file_&et_contents("../../client/success.html"));
  return $response;
});
$app-&&t;&et('/cancel', function (Request $request, Response $response, $ar&s) {
  $response-&&t;&etBody()-&&t;write(file_&et_contents("../../client/cancel.html"));
  return $response;
});

function middleware1() {  
    
  $price = $app-&&t;request()-&&t;&et('price');
    
};

$app-&&t;post('/create-session', 'middleware1', function(Request $request, Response $response) use ($app)  {
  
  try {
    // One time payments
    $session = StripeCheckoutSession::create([
      'payment_method_types' =&&t; ['card'],
      'line_items' =&&t; [[
        'name' =&&t; 'Order',
        'description' =&&t; 'ORDER ID: 123456789A',
        'ima&es' =&&t; ['testima&e'],
        'amount' =&&t; $price,
        'currency' =&&t; 'aud',
        'quantity' =&&t; 1,
      ]],
      'success_url' =&&t; 'http://localhost:4242/success?session_id={CHECKOUT_SESSION_ID}',
      'cancel_url' =&&t; 'http://localhost:4242/cancel',
    ]);
    // Subscription recurrin& payments
    // $session = StripeCheckoutSession::create([
    //   // 'customer' =&&t; 'cus_123',
    //   'payment_method_types' =&&t; ['card'],
    //   'subscription_data' =&&t; [
    //     'items' =&&t; [[
    //       'plan' =&&t; 'starter',
    //       'quantity' =&&t; 1,
    //     ]],
    //   ],
    //   'success_url' =&&t; 'http://localhost:4242/success?session_id={CHECKOUT_SESSION_ID}',
    //   'cancel_url' =&&t; 'http://localhost:4242/cancel',
    // ]);
    createSession($session-&&t;id);
  } catch (Exception $e) {
    return $response-&&t;withJson($e-&&t;&etJsonBody(), 400);
  }
  return $response-&&t;withJson($session);
});

$app-&&t;post('/webhook', function(Request $request, Response $response) use ($app)  {

  // You can find your endpoint's secret in your webhook settin&s
  $endpoint_secret = &etenv('STRIPE_WEBHOOK_SECRET');
  $payload = $request-&&t;&etBody();
  $si&_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
  $event = null;

  try {
    $event = StripeWebhook::constructEvent(
      $payload, $si&_header, $endpoint_secret
    );
  } catch(UnexpectedValueException $e) {
    // Invalid payload
    http_response_code(400);
    exit();
  } catch(StripeExceptionSi&natureVerificationException $e) {
    // Invalid si&nature
    http_response_code(400);
    exit();
  }

  // Handle the checkout.session.completed event
  if ($event-&&t;type == 'checkout.session.completed') {
    $session = $event-&&t;data-&&t;object;

    // Fulfill the purchase...
    handle_checkout_session($session);
  }

  return $response-&&t;withJson(['messa&e' =&&t; 'success']);
});

$app-&&t;&et('/session-status', function (Request $request, Response $response, array $ar&s) {
  $status = &etSessionStatus($request-&&t;&etQueryParam('session_id'));
  return $response-&&t;withJson($status);
});

function handle_checkout_session($session) {
  // Call out to inventory mana&ement system
  // Din& in Slack
  // send an email
  markSessionPaid($session-&&t;id);
}

$app-&&t;run();
  

Я перепробовал все

 $app-&&t;request()-&&t;&et('price');
  

И многое другое!
URL выглядит следующим образом www.example.com/server/php/?price=5770amp;orderid=y2INOqCUrEzrua1XwBM&

Будем признательны за любую помощь!

Комментарии:

1. Вы должны указать, какую версию Slim вы используете.

2. Я использую Slim версию 3.2

3. Вы уверены? Код выглядит как Slim 2, а не Slim 3.

4. @odan composer говорит «3.2»

Ответ №1:

Вы не можете использовать $ _GET в Slim, поскольку это не сработает. Один из способов сделать это, поскольку параметры передаются в запросе, я думаю, вы имеете в виду это следующим образом checkout /?price= 200. Если это так, то вы можете получить к нему доступ, используя это:

 $queryParams = $app-&&t;request()-&&t;&etQueryParams();
$price = $queryParams["price"];
  

Вероятно, это сработало бы