在 Spring Boot 应用程序中使用 Stripe 完成结帐后,如何从会话中检索产品元数据?

问题描述 投票:0回答:1

在 Spring Boot 中使用 Stripe SDK,创建会话并添加产品数据后,您可以选择使用 putAllMetadata,它接受 的地图。添加此元数据的目的是在成功付款后通过 Webhook 检索它。

我已经实现了 webhook 并从中收到了一个 Session 对象,但我无法找到检索此元数据的方法。

 paramsBuilder.addLineItem(
       SessionCreateParams.LineItem.builder()
              .setQuantity(1L)
              .setPriceData(
                  PriceData.builder()
                       .setProductData(
                           PriceData.ProductData
                                .builder()
                                .putAllMetadata(metadata)
                                .setName("Book "))
                                .build())
                       .setCurrency(myDTO.getCurrency())
                       .setUnitAmountDecimal(BigDecimal.valueOf(myDTO.getPrice()* 100))
                       .build())
              .build());
                Session session = Session.create(paramsBuilder.build());
                return session.getUrl();

我尝试从会话中检索它

 switch (event.getType()) {
                        case "payment_intent.succeeded": {
                                // System.out.println("done");
                                // System.out.println("succeeded " + stripeObject.toJson());

                                break;
                        }
                        case "charge.updated": {
                                // System.out.println("upda " + stripeObject.toJson());
                        }
                        case "checkout.session.completed":

                               
                                        Session sessionEvent = (Session) stripeObject;
                                        handleCheckoutSessionCompleted(sessionEvent);

                                // System.out.print("sessiom " + sessionEvent.toJson());
                                break;
                        // ... handle other event types
                        default:
                                System.out.println("Unhandled event type: " + event.getType());
                }

                return ResponseEntity.ok("");
        }

     

        private void handleCheckoutSessionCompleted(Session session) {
                try {
                        SessionListLineItemsParams params = SessionListLineItemsParams.builder().build();
                        List<LineItem> lineItems = session.listLineItems(params).getData();

                        for (LineItem item : lineItems) {
                        
                                String this = item.getPrice().getMetadata()
                                                .get("this");
                               

                                System.out.println("this is "+ this);
                           
                        }
                } catch (StripeException e) {
                        e.printStackTrace();
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }

// System.out.print("sessiom " + sessionEvent.toJson());
这行代码正确打印了会话对象。

我的代码将 this is null 打印到控制台。

java spring-boot stripe-payments
1个回答
0
投票

如果我理解正确的话,您有一个 Checkout Session 对象,并且想要检索关联产品上设置的

metadata
?如果是这样,您需要:

  1. 获取结账会话对象
  2. 获取结帐会话的行项目
  3. 获取订单项中的所有价格
  4. 对于每个价格,找到相应的产品(这是您缺少的步骤)
  5. 找到产品的
    metadata
© www.soinside.com 2019 - 2024. All rights reserved.