在 Spring Boot 中使用 Stripe SDK,创建会话并添加产品数据后,您可以选择使用 putAllMetadata,它接受
我已经实现了 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 打印到控制台。
如果我理解正确的话,您有一个 Checkout Session 对象,并且想要检索关联产品上设置的
metadata
?如果是这样,您需要:
metadata