70 lines
2.5 KiB
Java
70 lines
2.5 KiB
Java
package de.szut.casino.deposit;
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
|
import com.stripe.Stripe;
|
|
import com.stripe.exception.SignatureVerificationException;
|
|
import com.stripe.exception.StripeException;
|
|
import com.stripe.model.*;
|
|
import com.stripe.model.checkout.Session;
|
|
import com.stripe.net.Webhook;
|
|
import com.stripe.param.checkout.SessionRetrieveParams;
|
|
import de.szut.casino.user.UserEntity;
|
|
import de.szut.casino.user.UserRepository;
|
|
import jakarta.annotation.PostConstruct;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.util.Objects;
|
|
import java.util.Optional;
|
|
|
|
@RestController
|
|
public class WebhookController {
|
|
private static final Logger logger = LoggerFactory.getLogger(WebhookController.class);
|
|
@Value("${stripe.secret.key}")
|
|
private String stripeSecretKey;
|
|
|
|
@Value("${stripe.webhook.secret}")
|
|
private String webhookSecret;
|
|
|
|
private final TransactionService transactionService;
|
|
|
|
public WebhookController(TransactionService transactionService) {
|
|
this.transactionService = transactionService;
|
|
}
|
|
|
|
@PostConstruct
|
|
public void init() {
|
|
Stripe.apiKey = stripeSecretKey;
|
|
}
|
|
|
|
@PostMapping("/webhook")
|
|
public ResponseEntity<String> webhook(@RequestBody String payload, @RequestHeader("Stripe-Signature") String sigHeader) throws StripeException {
|
|
Event event = Webhook.constructEvent(payload, sigHeader, webhookSecret);
|
|
|
|
System.out.println(event.getType());
|
|
|
|
switch (event.getType()) {
|
|
case "checkout.session.completed":
|
|
case "checkout.session.async_payment_succeeded":
|
|
EventDataObjectDeserializer dataObjectDeserializer = event.getDataObjectDeserializer();
|
|
|
|
if (dataObjectDeserializer.getObject().isPresent()) {
|
|
Session session = (Session) dataObjectDeserializer.getObject().get();
|
|
this.transactionService.fulfillCheckout(session.getId());
|
|
} else {
|
|
logger.error("Failed to deserialize webhook event data");
|
|
}
|
|
break;
|
|
default:
|
|
// No action needed for other event types
|
|
break;
|
|
}
|
|
|
|
return ResponseEntity.ok().body(null);
|
|
}
|
|
}
|