#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"];
Вероятно, это сработало бы