[新增功能]新增校验苹果支付凭证验签功能

This commit is contained in:
Lys 2025-12-12 10:15:44 +08:00
parent b58085fde1
commit e55634e987
1 changed files with 52 additions and 0 deletions

View File

@ -0,0 +1,52 @@
package org.dromara.net.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import com.apple.itunes.storekit.model.Environment;
import com.apple.itunes.storekit.model.JWSTransactionDecodedPayload;
import com.apple.itunes.storekit.verification.SignedDataVerifier;
import com.apple.itunes.storekit.verification.VerificationException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Set;
/**
* 苹果验签工具为旧版本后台提供支持
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/appleVerify")
@Slf4j
public class AppleVerifySignController {
@SaIgnore
@GetMapping("/verifyPaySign")
public R<JWSTransactionDecodedPayload> verifyPaySign(@RequestParam("jws") String jws, @RequestParam("bundleId") String bundleId, @RequestParam("appAppleId") Long appAppleId) {
Environment environment = Environment.PRODUCTION;
try {
Set<InputStream> rootCAs = Set.of(
new FileInputStream("/opt/AppleRootCA-G3.cer"),
new FileInputStream("/opt/AppleRootCA-G2.cer"),
new FileInputStream("/opt/AppleIncRootCertificate.cer")
);
SignedDataVerifier signedPayloadVerifier = new SignedDataVerifier(rootCAs, bundleId, appAppleId, environment, false);
JWSTransactionDecodedPayload jwsTransactionDecodedPayload = signedPayloadVerifier.verifyAndDecodeTransaction(jws);
return R.ok(jwsTransactionDecodedPayload);
} catch (Exception e) {
log.error("苹果验签异常:", e);
return R.fail();
}
}
}