Php 收到“成功”后,如何重定向到“成功”屏幕;付款意向“成功”;通过webhook的事件?

Php 收到“成功”后,如何重定向到“成功”屏幕;付款意向“成功”;通过webhook的事件?,php,stripe-payments,Php,Stripe Payments,在通过webhook收到“payment\u intent.successed”事件后,如何重定向到成功屏幕? ・ 使用PaymentIntent付款后,如何显示成功屏幕 ・Checkout new允许您指定“success\u url”,如下所示,但是如果不使用Checkout,如何指定“success\u url” $checkoutSession = \Stripe\Checkout\Session::create([ 'customer_email' => 'customer@ex

在通过webhook收到“payment\u intent.successed”事件后,如何重定向到成功屏幕?

・ 使用PaymentIntent付款后,如何显示成功屏幕

・Checkout new允许您指定“success\u url”,如下所示,但是如果不使用Checkout,如何指定“success\u url”

$checkoutSession = \Stripe\Checkout\Session::create([
'customer_email' => 'customer@example.com',
'success_url' => 'https://xxxx/thanks.php',

代码尝试(PHP)

・ 我可以通过webhook接收“payment\u intent.successed”事件

・ 我不会重定向到成功屏幕

▼index.php

<?php
\Stripe\Stripe::setApiKey("sk_test_xxxx");
$paymentintent = \Stripe\PaymentIntent::create([
  "amount" => 1099,
  "currency" => "jpy",
]);
?>
<input id="cardholder-name" type="text">
<div id="card-element"></div>
<button id="card-button" data-secret="<?php echo $paymentintent->client_secret; ?>">
  Submit Payment
</button>

<script src="https://js.stripe.com/v3/"></script>
<script>
const stripe = Stripe('pk_test_xxxx');

const elements = stripe.elements();
const cardElement = elements.create('card');
cardElement.mount('#card-element');

const cardholderName = document.getElementById('cardholder-name');
const cardButton = document.getElementById('card-button');
const clientSecret = cardButton.dataset.secret;

cardButton.addEventListener('click', async (ev) => {
  const {paymentIntent, error} = await stripe.handleCardPayment(
    clientSecret, cardElement, {
      payment_method_data: {
        billing_details: {name: cardholderName.value}
      }
    }
  );

  if (error) {
    // Display error.message in your UI.
    console.log(error)
  } else {
    // The payment has succeeded. Display a success message.
    console.log("ok")
  }
});
</script>

不能在webhook中重定向用户,因为它是由条带服务器触发的

您应该做的是,当支付成功时(在javascript中),将用户重定向到页面,同时等待事件处理


当您收到webhook时,更改购物车/订单/etc的“状态”,然后等待页面会收到websocket事件或更简单的拉取请求,指示已处理付款并显示订单确认页面。

您无法在webhook中重定向用户,因为它是由条带服务器触发的

您应该做的是,当支付成功时(在javascript中),将用户重定向到页面,同时等待事件处理


当您收到webhook时,更改购物车/订单/etc的“状态”,然后等待页面会收到websocket事件或更简单的拉取请求,指示已处理付款并显示订单确认页面。

您是否已尝试过标题(“位置:);?我在哪里写?index.php?或者webhook.php。我在问题文本中添加了我尝试过的内容。您已经尝试过标题(“位置:);?我在哪里写字?index.php?或者,webhook.php。我在问题文本中添加了我尝试的内容。
  if (error) {
    console.log(error)
  } else {
    <?php
      header('Location: http://example.com/');
      exit();
    ?>
  }
$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) {
  // Invalid payload
  http_response_code(400); // PHP 5.4 or greater
  exit();
} catch(\Stripe\Error\SignatureVerification $e) {
  // Invalid signature
  http_response_code(400); // PHP 5.4 or greater
  exit();
}

if ($event->type == "payment_intent.succeeded") {
  $intent = $event->data->object;
  header('Location: http://example.com/');
  exit();