set billingCycleAnchor in play billing responses
This commit is contained in:
parent
3e51366921
commit
9fb4e2d272
|
@ -527,7 +527,7 @@ public class SubscriptionController {
|
||||||
long level,
|
long level,
|
||||||
|
|
||||||
@Schema(
|
@Schema(
|
||||||
description = "If present, UNIX Epoch Timestamp in seconds, can be used to calculate next billing date. May be absent for IAP subscriptions",
|
description = "If present, UNIX Epoch Timestamp in seconds, can be used to calculate next billing date.",
|
||||||
externalDocs = @ExternalDocumentation(description = "Calculate next billing date", url = "https://stripe.com/docs/billing/subscriptions/billing-cycle"))
|
externalDocs = @ExternalDocumentation(description = "Calculate next billing date", url = "https://stripe.com/docs/billing/subscriptions/billing-cycle"))
|
||||||
Instant billingCycleAnchor,
|
Instant billingCycleAnchor,
|
||||||
|
|
||||||
|
|
|
@ -230,6 +230,7 @@ public class GooglePlayBillingManager implements SubscriptionPaymentProcessor {
|
||||||
return subscriptionFuture.thenCombineAsync(priceFuture, (subscription, price) -> {
|
return subscriptionFuture.thenCombineAsync(priceFuture, (subscription, price) -> {
|
||||||
|
|
||||||
final SubscriptionPurchaseLineItem lineItem = getLineItem(subscription);
|
final SubscriptionPurchaseLineItem lineItem = getLineItem(subscription);
|
||||||
|
final Optional<Instant> billingCycleAnchor = getStartTime(subscription);
|
||||||
final Optional<Instant> expiration = getExpiration(lineItem);
|
final Optional<Instant> expiration = getExpiration(lineItem);
|
||||||
|
|
||||||
final SubscriptionStatus status = switch (SubscriptionState
|
final SubscriptionStatus status = switch (SubscriptionState
|
||||||
|
@ -246,7 +247,8 @@ public class GooglePlayBillingManager implements SubscriptionPaymentProcessor {
|
||||||
return new SubscriptionInformation(
|
return new SubscriptionInformation(
|
||||||
price,
|
price,
|
||||||
productIdToLevel(lineItem.getProductId()),
|
productIdToLevel(lineItem.getProductId()),
|
||||||
null, expiration.orElse(null),
|
billingCycleAnchor.orElse(null),
|
||||||
|
expiration.orElse(null),
|
||||||
expiration.map(clock.instant()::isBefore).orElse(false),
|
expiration.map(clock.instant()::isBefore).orElse(false),
|
||||||
lineItem.getAutoRenewingPlan() != null && lineItem.getAutoRenewingPlan().getAutoRenewEnabled(),
|
lineItem.getAutoRenewingPlan() != null && lineItem.getAutoRenewingPlan().getAutoRenewEnabled(),
|
||||||
status,
|
status,
|
||||||
|
@ -385,18 +387,27 @@ public class GooglePlayBillingManager implements SubscriptionPaymentProcessor {
|
||||||
"acknowledgementState", subscription.getAcknowledgementState());
|
"acknowledgementState", subscription.getAcknowledgementState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Optional<Instant> getStartTime(final SubscriptionPurchaseV2 subscription) {
|
||||||
|
return parseTimestamp(subscription.getStartTime());
|
||||||
|
}
|
||||||
|
|
||||||
private Optional<Instant> getExpiration(final SubscriptionPurchaseLineItem purchaseLineItem) {
|
private Optional<Instant> getExpiration(final SubscriptionPurchaseLineItem purchaseLineItem) {
|
||||||
if (StringUtils.isBlank(purchaseLineItem.getExpiryTime())) {
|
return parseTimestamp(purchaseLineItem.getExpiryTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Optional<Instant> parseTimestamp(final String timestamp) {
|
||||||
|
if (StringUtils.isBlank(timestamp)) {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return Optional.of(Instant.parse(purchaseLineItem.getExpiryTime()));
|
return Optional.of(Instant.parse(timestamp));
|
||||||
} catch (DateTimeParseException e) {
|
} catch (DateTimeParseException e) {
|
||||||
logger.warn("received an expiry time with an invalid format: {}", purchaseLineItem.getExpiryTime());
|
logger.warn("received a timestamp with an invalid format: {}", timestamp);
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// https://developers.google.com/android-publisher/api-ref/rest/v3/purchases.subscriptionsv2#SubscriptionState
|
// https://developers.google.com/android-publisher/api-ref/rest/v3/purchases.subscriptionsv2#SubscriptionState
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
enum SubscriptionState {
|
enum SubscriptionState {
|
||||||
|
|
Loading…
Reference in New Issue