Files
server/src/Core/Models/Business/AppleReceiptStatus.cs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

135 lines
4.5 KiB
C#
Raw Normal View History

using System.Text.Json.Serialization;
using Bit.Core.Entities;
using Bit.Core.Enums;
using Bit.Core.Utilities;
2019-09-16 09:22:22 -04:00
namespace Bit.Billing.Models;
2022-08-29 16:06:55 -04:00
2019-09-16 09:22:22 -04:00
public class AppleReceiptStatus
{
[JsonPropertyName("status")]
2019-09-16 09:22:22 -04:00
public int? Status { get; set; }
[JsonPropertyName("environment")]
2019-09-16 16:23:07 -04:00
public string Environment { get; set; }
[JsonPropertyName("latest_receipt")]
public string LatestReceipt { get; set; }
[JsonPropertyName("receipt")]
public AppleReceipt Receipt { get; set; }
[JsonPropertyName("latest_receipt_info")]
public List<AppleTransaction> LatestReceiptInfo { get; set; }
[JsonPropertyName("pending_renewal_info")]
public List<AppleRenewalInfo> PendingRenewalInfo { get; set; }
public string GetOriginalTransactionId()
{
return LatestReceiptInfo?.LastOrDefault()?.OriginalTransactionId;
}
public string GetLastTransactionId()
{
return LatestReceiptInfo?.LastOrDefault()?.TransactionId;
}
public AppleTransaction GetLastTransaction()
{
return LatestReceiptInfo?.LastOrDefault();
}
public DateTime? GetLastExpiresDate()
{
return LatestReceiptInfo?.LastOrDefault()?.ExpiresDate;
}
public string GetReceiptData()
{
return LatestReceipt;
}
public DateTime? GetLastCancellationDate()
{
return LatestReceiptInfo?.LastOrDefault()?.CancellationDate;
}
public bool IsRefunded()
2022-08-29 16:06:55 -04:00
{
var cancellationDate = GetLastCancellationDate();
var expiresDate = GetLastCancellationDate();
if (cancellationDate.HasValue && expiresDate.HasValue)
{
return cancellationDate.Value <= expiresDate.Value;
}
return false;
2022-08-29 16:06:55 -04:00
}
2019-09-16 09:22:22 -04:00
2019-09-16 16:23:07 -04:00
public Transaction BuildTransactionFromLastTransaction(decimal amount, Guid userId)
2022-08-29 16:06:55 -04:00
{
return new Transaction
2019-09-16 16:23:07 -04:00
{
Amount = amount,
2019-09-16 16:23:07 -04:00
CreationDate = GetLastTransaction().PurchaseDate,
Gateway = GatewayType.AppStore,
GatewayId = GetLastTransactionId(),
UserId = userId,
2019-09-16 16:23:07 -04:00
PaymentMethodType = PaymentMethodType.AppleInApp,
Details = GetLastTransactionId()
};
}
public class AppleReceipt
{
[JsonPropertyName("receipt_type")]
public string ReceiptType { get; set; }
[JsonPropertyName("bundle_id")]
public string BundleId { get; set; }
[JsonPropertyName("receipt_creation_date_ms")]
[JsonConverter(typeof(MsEpochConverter))]
public DateTime ReceiptCreationDate { get; set; }
[JsonPropertyName("in_app")]
public List<AppleTransaction> InApp { get; set; }
}
public class AppleRenewalInfo
{
[JsonPropertyName("expiration_intent")]
2019-09-16 16:23:07 -04:00
public string ExpirationIntent { get; set; }
[JsonPropertyName("auto_renew_product_id")]
public string AutoRenewProductId { get; set; }
[JsonPropertyName("original_transaction_id")]
public string OriginalTransactionId { get; set; }
[JsonPropertyName("is_in_billing_retry_period")]
public string IsInBillingRetryPeriod { get; set; }
[JsonPropertyName("product_id")]
public string ProductId { get; set; }
[JsonPropertyName("auto_renew_status")]
public string AutoRenewStatus { get; set; }
}
2019-09-16 16:23:07 -04:00
public class AppleTransaction
{
[JsonPropertyName("quantity")]
2019-09-16 16:23:07 -04:00
public string Quantity { get; set; }
[JsonPropertyName("product_id")]
2019-09-16 16:23:07 -04:00
public string ProductId { get; set; }
[JsonPropertyName("transaction_id")]
2019-09-16 16:23:07 -04:00
public string TransactionId { get; set; }
[JsonPropertyName("original_transaction_id")]
2019-09-16 16:23:07 -04:00
public string OriginalTransactionId { get; set; }
[JsonPropertyName("purchase_date_ms")]
[JsonConverter(typeof(MsEpochConverter))]
2019-09-16 09:22:22 -04:00
public DateTime PurchaseDate { get; set; }
[JsonPropertyName("original_purchase_date_ms")]
[JsonConverter(typeof(MsEpochConverter))]
2019-09-16 09:22:22 -04:00
public DateTime OriginalPurchaseDate { get; set; }
[JsonPropertyName("expires_date_ms")]
[JsonConverter(typeof(MsEpochConverter))]
2019-09-16 09:22:22 -04:00
public DateTime ExpiresDate { get; set; }
[JsonPropertyName("cancellation_date_ms")]
[JsonConverter(typeof(MsEpochConverter))]
public DateTime? CancellationDate { get; set; }
[JsonPropertyName("web_order_line_item_id")]
2019-09-16 09:22:22 -04:00
public string WebOrderLineItemId { get; set; }
[JsonPropertyName("cancellation_reason")]
public string CancellationReason { get; set; }
2019-09-16 09:22:22 -04:00
}
}