Search code examples
in-app-purchase

how receive data from apple server notification in spring boot project


how to define the endpoint on spring boot server to receive server notification after read the app doc, this is what I am doing now:

@Api
@RequestMapping("/post/notification")
@FeignClient(name = "dolphin-post-service")
@Validated
public interface IAppleServerNotificationController {

    /**
     * Receive Apple Server Notification
     * @param
     * @return
     */
    @PostMapping("/v1/appleSeverNotification")
    Response<Integer> handleNotification(@RequestBody @Valid ServerNotificationRequest request);
}

and this is the entity I am define:

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ServerNotificationRequest implements Serializable {

    @ApiModelProperty(value = "responseBody")
    @NonNull
    private String responseBody;

}

but It seems not work. where I am going wrong? Any suggestion?

@Override
    @NoCheck
    public Response<Integer> handleNotification(ServerNotificationRequest request) {
       
        JSONObject jsonResult = JSONObject.parseObject(request.getResponseBody());
        AppleServerNotificationRecord record = new AppleServerNotificationRecord();
        record.setResponseBody(request.getResponseBody());
        record.setNotificationType(jsonResult.getString("notification_type"));
        int result = notificationRecordService.saveNotificationRecord(record);
        return new Response<>(result);
    }

the responseBody is null!!!


Solution

  • define the request entity like this:

    @Data
    @NoArgsConstructor
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class ServerNotificationRequest implements Serializable {
    
        @ApiModelProperty(value = "auto_renew_adam_id")
        @JsonProperty("auto_renew_adam_id")
        private String autoRenewAdamId;
    
        @ApiModelProperty(value = "auto_renew_product_id")
        @JsonProperty("auto_renew_product_id")
        private String autoRenewProductId;
    
        @ApiModelProperty(value = "auto_renew_status")
        @JsonProperty("auto_renew_status")
        private String autoRenewStatus;
    
        @ApiModelProperty(value = "auto_renew_status_change_date")
        @JsonProperty("auto_renew_status_change_date")
        private String autoRenewStatusChangeDate;
    
        @ApiModelProperty(value = "auto_renew_status_change_date_ms")
        @JsonProperty("auto_renew_status_change_date_ms")
        private String autoRenewStatusChangeDateMs;
    
        @ApiModelProperty(value = "auto_renew_status_change_date_pst")
        @JsonProperty("auto_renew_status_change_date_pst")
        private String autoRenewStatusChangeDatePst;
    
        @ApiModelProperty(value = "environment")
        private String environment;
    
        @ApiModelProperty(value = "expiration_intent")
        @JsonProperty("expiration_intent")
        private Integer expirationIntent;
    
        @ApiModelProperty(value = "notification_type")
        @JsonProperty("notification_type")
        private String notificationType;
    
        @ApiModelProperty(value = "password")
        @JsonProperty("password")
        private String sharedSecret;
    
        //@ApiModelProperty(value = "unified_receipt")
        //@JsonProperty("unified_receipt")
        //private String unifiedReceipt;
    
        @ApiModelProperty(value = "bid")
        private String bid;
    
        @ApiModelProperty(value = "bvrs")
        private String bvrs;
    
    }