Spring Boot 集成 Adyen 支付:一站式支付解决方案

731 阅读2分钟

前言

在当今全球化的商业环境中,支付方式的多样性和支付流程的便捷性对于电子商务的成功至关重要。Adyen 是一个全球性的支付平台,它提供了一个统一的 API 来处理所有支付方式,包括信用卡、借记卡、电子钱包等。在本篇文章中,我们将详细介绍如何在 Spring Boot 应用程序中集成 Adyen 支付,并实现其常用支付 API。

为什么选择 Adyen

Adyen 提供了一个端到端的支付解决方案,支持多种支付方法和货币,帮助商家轻松处理国际支付。Adyen 的优势在于:

  • 全球覆盖:支持 250 多种支付方式和 187 种货币。
  • 单一 API:一个 API 处理所有支付方式,简化了集成过程。
  • 可靠性:提供 24/7 的客户支持和技术支持。
  • 安全性:符合最高安全标准,包括 PCI DSS 合规性。

集成步骤

1. 添加 Adyen 依赖

首先,在你的 Spring Boot 项目的 pom.xml 文件中添加 Adyen 的 Java 库依赖:

<dependency>
    <groupId>com.adyen</groupId>
    <artifactId>adyen-java-api-library</artifactId>
    <version>最新版本</version>
</dependency>

2. 配置 Adyen API 密钥

application.propertiesapplication.yml 中配置 Adyen 的 API 密钥:

adyen.api.key=你的密钥
adyen.merchantAccount=你的商家账号

3. 创建 Adyen 服务

创建一个服务类,用于封装 Adyen API 的调用:

@Service
public class AdyenService {
    private final String apiKey;
    private final String merchantAccount;

    @Autowired
    public AdyenService(@Value("${adyen.api.key}") String apiKey,
                         @Value("${adyen.merchantAccount}") String merchantAccount) {
        this.apiKey = apiKey;
        this.merchantAccount = merchantAccount;
    }

    public PaymentRequest createPaymentRequest(Amount amount, String reference) {
        PaymentRequest paymentRequest = new PaymentRequest();
        paymentRequest.setMerchantAccount(merchantAccount);
        paymentRequest.setAmount(amount);
        paymentRequest.setReference(reference);
        paymentRequest.setShopperInteraction(PaymentRequest.ShopperInteractionEnum.ECOMMERCE);
        // 其他支付参数...
        return paymentRequest;
    }

    public PaymentResponse createPayment(PaymentRequest paymentRequest) throws Exception {
        Client client = new Client(apiKey);
        PaymentsApi paymentsApi = new PaymentsApi(client);
        return paymentsApi.payments(paymentRequest);
    }

    // 其他支付 API 的实现...
}

4. 创建控制器

创建一个控制器,用于处理支付请求:

@RestController
@RequestMapping("/api/payments")
public class PaymentController {
    private final AdyenService adyenService;

    @Autowired
    public PaymentController(AdyenService adyenService) {
        this.adyenService = adyenService;
    }

    @PostMapping("/create-payment")
    public ResponseEntity<?> createPayment(@RequestBody Map<String, Object> payload) {
        try {
            Amount amount = new Amount().currency("EUR").value((new BigDecimal(payload.get("amount").toString())));
            PaymentRequest paymentRequest = adyenService.createPaymentRequest(amount, "ORDER_REFERENCE");
            PaymentResponse paymentResponse = adyenService.createPayment(paymentRequest);
            return ResponseEntity.ok(paymentResponse);
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
        }
    }

    // 其他支付 API 的端点...
}

5. 处理回调

Adyen 通过 Webhook 发送支付事件通知。你需要创建一个端点来接收这些事件:

@RestController
public class WebhookController {
    private final AdyenService adyenService;

    @Autowired
    public WebhookController(AdyenService adyenService) {
        this.adyenService = adyenService;
    }

    @PostMapping("/webhook")
    public ResponseEntity<String> handleWebhook(@RequestBody String payload, @RequestParam String signature) {
        try {
            boolean valid = adyenService.verifyWebhookSignature(payload, signature);
            if (valid) {
                // 处理事件
                NotificationRequestItem notificationItem = adyenService.parseWebhookEvent(payload);
                adyenService.handleEvent(notificationItem);
                return ResponseEntity.ok("Event processed successfully");
            } else {
                return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Invalid signature");
            }
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
        }
    }
}

总结

通过以上步骤,你可以在 Spring Boot 应用程序中集成 Adyen 支付,并实现其常用支付 API。这将为你的用户提供一个无缝、安全的支付体验,并帮助你的业务扩展到全球市场。记得在开发过程中,充分利用 Adyen 提供的文档和资源,以确保支付流程的顺利进行。