feat(apple): 新增苹果订阅通知接口并补充测试

- AppleReceiptController 新增 /apple/notification 端点,用于接收苹果服务器通知
- 调整路径前缀为 /apple,开放 /apple/receipt 与 /apple/notification 免登录
This commit is contained in:
2025-12-12 20:37:43 +08:00
parent a24a795887
commit c1dd4faf0e
2 changed files with 18 additions and 8 deletions

View File

@@ -98,7 +98,9 @@ public class SaTokenConfigure implements WebMvcConfigurer {
"/products/detail", "/products/detail",
"/products/inApp/list", "/products/inApp/list",
"/products/subscription/list", "/products/subscription/list",
"/purchase/handle" "/purchase/handle",
"/apple/notification",
"/apple/receipt"
}; };
} }

View File

@@ -8,15 +8,18 @@ import com.yolo.keyborad.exception.BusinessException;
import com.yolo.keyborad.model.dto.AppleReceiptValidationResult; import com.yolo.keyborad.model.dto.AppleReceiptValidationResult;
import com.yolo.keyborad.service.ApplePurchaseService; import com.yolo.keyborad.service.ApplePurchaseService;
import com.yolo.keyborad.service.AppleReceiptService; import com.yolo.keyborad.service.AppleReceiptService;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import lombok.extern.slf4j.Slf4j;
import java.util.Map; import java.util.Map;
@RestController @RestController
@RequestMapping("/api/apple") @RequestMapping("/apple")
@Slf4j
public class AppleReceiptController { public class AppleReceiptController {
private final AppleReceiptService appleReceiptService; private final AppleReceiptService appleReceiptService;
@@ -28,11 +31,11 @@ public class AppleReceiptController {
this.applePurchaseService = applePurchaseService; this.applePurchaseService = applePurchaseService;
} }
// @PostMapping("/validate-receipt") @PostMapping("/receipt")
// public AppleReceiptValidationResult validateReceipt(@RequestBody Map<String, String> body) { public AppleReceiptValidationResult validateReceipt(@RequestBody Map<String, String> body) {
// String receipt = body.get("receipt"); String receipt = body.get("receipt");
// return appleReceiptService.validateReceipt(receipt); return appleReceiptService.validateReceipt(receipt);
// } }
@PostMapping("/validate-receipt") @PostMapping("/validate-receipt")
public BaseResponse<Boolean> handlePurchase(@RequestBody Map<String, String> body) { public BaseResponse<Boolean> handlePurchase(@RequestBody Map<String, String> body) {
@@ -46,6 +49,11 @@ public class AppleReceiptController {
return ResultUtils.success(Boolean.TRUE); return ResultUtils.success(Boolean.TRUE);
} }
@PostMapping("/notification")
public BaseResponse<Boolean> receiveNotification(@RequestBody Map<String, Object> body, HttpServletRequest request) {
log.info(request.getQueryString());
log.info("Apple server notification: {}", body);
return ResultUtils.success(Boolean.TRUE);
}
} }