能否为Stripe的Session::create添加自定义标识以在Webhook中识别用户?
解决Stripe Checkout Session关联自有系统用户的问题
当然可以,你只需要在创建Checkout Session时通过metadata字段附加自定义数据(比如你的系统用户ID),就能在Webhook监听器里拿到这些信息,从而关联到对应的用户。
修改后的创建Session代码如下:
// 假设$current_user_id是你自有系统里的用户ID $checkout_session = \Stripe\Checkout\Session::create([ 'line_items' => [[ 'price' => $prices->data[0]->id, 'quantity' => 1, ]], 'mode' => 'subscription', 'success_url' => $YOUR_DOMAIN . '/success.html?session_id={CHECKOUT_SESSION_ID}', 'cancel_url' => $YOUR_DOMAIN . '/cancel.html', // 附加自定义用户标识数据 'metadata' => [ 'user_id' => $current_user_id ] ]);
当Webhook触发(比如checkout.session.completed事件)时,你可以从事件对象里提取metadata中的数据:
// 解析Webhook事件 $event = \Stripe\Event::constructFrom(json_decode($payload, true)); // 获取Checkout Session对象 $session = $event->data->object; // 拿到你之前附加的用户ID $user_id = $session->metadata->user_id; // 接下来就可以用这个user_id关联到你系统里的用户,做后续处理
注意:metadata字段支持存储键值对,单个值最多500字符,用来存用户ID这类标识完全足够。
内容的提问来源于stack exchange,提问作者RDU
相关产品推荐
相关产品推荐

