如何更改通过条纹结账付款后的 Rails 对象字段?



在我的应用程序中,用户可以创建一个对象的草稿,然后在"最终确定";查看他们可以检查他们是否只想要标准价格或两个额外功能中的一个(例如,他们的条目在平台上显示(-这些产品被存储为三个单独的产品,每个产品都有自己的价格,因为我希望将来能够单独跟踪它们。

我使用Checkout进行支付,我的后端是Rails。

我正在听webhook,但我不知道如何实际修改有问题的对象,因为我看不到任何包含我需要的信息的webhook请求体。

我想我需要的是这样的东西:;已经成功地对与id为123的对象相关的$x充电,并且该充电包括产品prod_asdfprod_sdfg";,然后我可以更新例如我的对象的CCD_ 5和CCD_。

这似乎是一个很容易的问题,因为产品和价格实际上是由Stripe处理的,并且它们被传递到结账环节,我不明白为什么我不能从webhook访问它们?

EDIT:我想知道将必要的元数据传递给Session对象,然后使用相同的元数据侦听checkout.session.completed事件是否是个好主意。

通过在元数据中包含相关的对象ID,可以将Checkout Session链接回Listing对象(https://stripe.com/docs/api/checkout/sessions/object#checkout_session_object-元数据(。当您侦听checkout.session.completed事件时,该事件将附带一个Checkout Session对象。通过检查元数据,您可以很容易地将Checkout Session链接回Listing对象,它还有一个amount_total字段,可以告诉您总付款金额。

您可以从line_items获取会话中包含的产品(https://stripe.com/docs/api/checkout/sessions/object#checkout_session_object-line_items(。不幸的是,默认情况下,line_items不包括在webhook事件中,因为它是可扩展的(https://stripe.com/docs/expand)。收到checkout.session.completed事件后,您可以使用ID来检索line_items展开的Checkout Session,如下所示:

session = Stripe::Checkout::Session.retrieve(
id: 'cs_test_xxx',
expand: ['line_items'],
)
line_items = session.line_items

或者,您也可以只检索"结账会话"的行项目(https://stripe.com/docs/api/checkout/sessions/line_items)像这样:

line_items = Stripe::Checkout::Session.list_line_items('cs_test_D3OF4MY1VGflR8idkewd795t8MLd4PwA3wxdLCHikdRFTIkBecH6FKij', {limit: 5})

最新更新