サーバー統合によるストライプチェックアウトのドキュメントをフォローしています: https://stripe.com/docs/payments/checkout/server
例のコードは問題なく機能しますが、購入が完了したときにユーザーまたは注文を追跡できないという問題があります。
支払いが完了すると、Stripeがpingを実行するwebhook設定があります。ただし、Stripeからの応答セッションには、注文された製品の名前、説明、および画像以外の情報は含まれていません。製品名を使用してデータベースにクエリを実行することもできますが、どちらかというとIDやスラッグを使用したいと思います。
$app->post("/stripe-pingback", function(Request $request, Response $response, array $args) {
\Stripe\Stripe::setApiKey("xxxxx");
// You can find your endpoint's secret in your webhook settings
$endpoint_secret = 'xxxxx';
$payload = $request->getBody();
$sig_header = isset($_SERVER['HTTP_STRIPE_SIGNATURE']) ? $_SERVER['HTTP_STRIPE_SIGNATURE'] : null;
$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();
}
// Handle the checkout.session.completed event
if ($event->type == 'checkout.session.completed') {
$session = $event->data->object;
var_dump($session);
// Possible to get custom data from session?
$customer = $session->customer;
$customerEmail = $session->customer_email;
// Fulfill the purchase...
$this->db->insertAudioPurchase();
}
http_response_code(200); // PHP 5.4 or greater
});
Stripeが注文を検索してダウンロードリンクを生成するためにpingを返すことができるチェックアウト要求と共にIDを渡すことは可能ですか?
キーmetadata
を使用して配列を渡すことができます。 Stripeは、支払いが完了したときに送信したとおりにこのフィールドを返します。
この形式で渡すだけです。
"metadata": {}
ただし、ユーザーの作成とカードの保存に使用しました。ただし、チェックアウト時には使用していませんでしたが、すべてのAPIでこれをほとんど渡すことができるようです。
Stripe Doc から、
Account、Charge、Customer、PaymentIntent、Refund、Subscription、Transferなどの更新可能なStripeオブジェクトには、メタデータパラメーターがあります。このパラメーターを使用して、Key-ValueデータをこれらのStripeオブジェクトにアタッチできます。
メタデータは、オブジェクトに追加の構造化情報を格納するのに役立ちます。例として、システムのユーザーのフルネームと対応する一意の識別子をStripe Customerオブジェクト。 Stripeではメタデータは使用されません(たとえば、請求の承認または拒否には使用されません)。ユーザーに表示するように選択しない限り、ユーザーには表示されません。