【stripe】Checkoutでmetadataを使いたい時

ツール

StripeでCheckoutを使った単発決済を行うだけだったらめちゃ簡単なんだけど、
決済済ステータスに会員情報などくっつけて、決済後に処理を入れる時なんかは苦労する。

単発決済のみ

stripe.redirectToCheckout({
lineItems: [
{price: 'price_123', quantity: 1},
],
mode: 'payment',
successUrl: 'https://your-website.com/success',
cancelUrl: 'https://your-website.com/canceled',
})
.then(function(result) {
});

 

メタ情報をくっつけたいとき

メタ情報は現在のjsバージョンでは扱えないらしいので、一旦checkout用のセッションをphp等サーバー側で別で作りjsで呼び出してあげる

$session = \Stripe\Checkout\Session::create([
'payment_method_types' => ['card'],
'line_items' => [[
    'price' => 'price_123',
    'quantity' => 1,
]],
'mode' => 'payment',
'payment_intent_data' => [
    'metadata' => [
        '{key}' => '{value}',
    ]
],
'success_url' => 'https://your-website.com/success?session_id={CHECKOUT_SESSION_ID}',
'cancel_url' => 'https://your-website.com/canceled',
]);
echo json_encode(['session_id' => $session->id]);

決済内容が入ったsessionをjsに与える

stripe.redirectToCheckout({
sessionId: さきほどのsession_id
})
.then(function(result) {
});

決済完了後にメタ情報を取る

で、決済後に返ってくるのはsession_idだけなので、メタ情報を取り出す為には手順が必要になる
まずセッション情報を取得

$session = \Stripe\Checkout\Session::retrieve($_GET['session_id']);
セッション情報から購入履歴を取得
$stripe = new \Stripe\StripeClient('sk_test_...');
$payment = $stripe->paymentIntents->retrieve(
$session->payment_intent
);

・・・なんか書き方が違うのだけど、ドキュメントどおりに読んだらこうなった^^;

購入履歴からメタ情報を取得
$value = $payment->metadata->{key};

 

コメント

タイトルとURLをコピーしました