From 7b75e134d854cd5cbfcf2ace7d3e8fd2ae412013 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Wed, 25 Sep 2019 10:12:42 -0400 Subject: [PATCH] AppleReceiptNotification class --- .../Models/AppleReceiptNotification.cs | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 src/Billing/Models/AppleReceiptNotification.cs diff --git a/src/Billing/Models/AppleReceiptNotification.cs b/src/Billing/Models/AppleReceiptNotification.cs new file mode 100644 index 0000000000..454cbaad98 --- /dev/null +++ b/src/Billing/Models/AppleReceiptNotification.cs @@ -0,0 +1,105 @@ +using System; +using Bit.Core.Utilities; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace Bit.Billing.Models +{ + public class AppleReceiptNotification + { + [JsonProperty("notification_type")] + public string NotificationType { get; set; } + [JsonProperty("environment")] + public string Environment { get; set; } + [JsonProperty("auto_renew_status")] + public string AutoRenewStatus { get; set; } + [JsonProperty("auto_renew_product_id")] + public string AutoRenewProductId { get; set; } + [JsonProperty("auto_renew_status_change_date_ms")] + [JsonConverter(typeof(MsEpochConverter))] + public DateTime? AutoRenewStatusChangeDate { get; set; } + [JsonProperty("latest_receipt")] + public string LatestReceipt { get; set; } + [JsonProperty("latest_receipt_info")] + public AppleReceiptNotificationInfo LatestReceiptInfo { get; set; } + [JsonProperty("latest_expired_receipt")] + public string LatestExpiredReceipt { get; set; } + [JsonProperty("latest_expired_receipt_info")] + public AppleReceiptNotificationInfo LatestExpiredReceiptInfo { get; set; } + + public string GetOriginalTransactionId() + { + if(LatestReceiptInfo != null) + { + return LatestReceiptInfo.OriginalTransactionId; + } + return LatestExpiredReceiptInfo?.OriginalTransactionId; + } + + public string GetTransactionId() + { + if(LatestReceiptInfo != null) + { + return LatestReceiptInfo.TransactionId; + } + return LatestExpiredReceiptInfo?.TransactionId; + } + + public DateTime? GetExpiresDate() + { + if(LatestReceiptInfo != null) + { + return LatestReceiptInfo.ExpiresDate; + } + return LatestExpiredReceiptInfo?.ExpiresDate; + } + + public string GetReceiptData() + { + return string.IsNullOrWhiteSpace(LatestReceipt) ? LatestExpiredReceipt : LatestReceipt; + } + + public class AppleReceiptNotificationInfo + { + [JsonProperty("bid")] + public string Bid { get; set; } + public string ProductId { get; set; } + [JsonProperty("original_purchase_date_ms")] + [JsonConverter(typeof(MsEpochConverter))] + public DateTime? OriginalPurchaseDate { get; set; } + [JsonProperty("expires_date")] + [JsonConverter(typeof(MsEpochConverter))] + public DateTime? ExpiresDate { get; set; } + [JsonProperty("purchase_date_ms")] + [JsonConverter(typeof(MsEpochConverter))] + public DateTime? PurchaseDate { get; set; } + [JsonProperty("subscription_group_identifier")] + public string SubscriptionGroupIdentifier { get; set; } + [JsonProperty("unique_identifier")] + public string UniqueIdentifier { get; set; } + [JsonProperty("original_transaction_id")] + public string OriginalTransactionId { get; set; } + [JsonProperty("transaction_id")] + public string TransactionId { get; set; } + [JsonProperty("quantity")] + public string Quantity { get; set; } + [JsonProperty("web_order_line_item_id")] + public string WebOrderLineItemId { get; set; } + [JsonProperty("item_id")] + public string ItemId { get; set; } + } + + public class MsEpochConverter : DateTimeConverterBase + { + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + writer.WriteRawValue(CoreHelpers.ToEpocMilliseconds((DateTime)value).ToString()); + } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + return CoreHelpers.FromEpocMilliseconds(long.Parse(reader.Value.ToString())); + } + } + } +}