Skip to content

Commit 6047135

Browse files
committed
RE1-T115 Paddle updates
1 parent fffa946 commit 6047135

6 files changed

Lines changed: 40 additions & 4 deletions

File tree

Core/Resgrid.Model/Billing/Api/CreatePaddleCheckoutResult.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public class CreatePaddleCheckoutResult : BillingApiResponseBase
77

88
public class CreatePaddleCheckoutData
99
{
10+
public string TransactionId { get; set; }
1011
public string PriceId { get; set; }
1112
public string CustomerId { get; set; }
1213
public string Environment { get; set; }

Core/Resgrid.Model/Services/ISubscriptionsService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ Task<CreateStripeBillingPortalSessionData> CreateStripeSessionForCustomerPortal(
250250

251251
Task<ChangeActiveSubscriptionData> ChangeActiveSubscriptionAsync(string stripeCustomerId, string stripePlanId);
252252

253-
Task<CreatePaddleCheckoutData> CreatePaddleCheckoutForSub(int departmentId, string paddleCustomerId, string paddlePriceId, int planId, string email, string departmentName, int count, string discountCode = null);
253+
Task<CreatePaddleCheckoutData> CreatePaddleCheckoutForSub(int departmentId, string paddleCustomerId, string paddleProductId, int planId, string email, string departmentName, int count, string discountCode = null);
254254

255255
Task<CreatePaddleCheckoutData> CreatePaddleCheckoutForUpdate(int departmentId, string paddleCustomerId, string email, string departmentName);
256256

Core/Resgrid.Services/SubscriptionsService.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1220,7 +1220,7 @@ public async Task<ChangeActiveSubscriptionData> ChangeActiveSubscriptionAsync(st
12201220
return null;
12211221
}
12221222

1223-
public async Task<CreatePaddleCheckoutData> CreatePaddleCheckoutForSub(int departmentId, string paddleCustomerId, string paddlePriceId, int planId, string email, string departmentName, int count, string discountCode = null)
1223+
public async Task<CreatePaddleCheckoutData> CreatePaddleCheckoutForSub(int departmentId, string paddleCustomerId, string paddleProductId, int planId, string email, string departmentName, int count, string discountCode = null)
12241224
{
12251225
if (!String.IsNullOrWhiteSpace(Config.SystemBehaviorConfig.BillingApiBaseUrl) && !String.IsNullOrWhiteSpace(Config.ApiConfig.BackendInternalApikey))
12261226
{
@@ -1233,7 +1233,8 @@ public async Task<CreatePaddleCheckoutData> CreatePaddleCheckoutForSub(int depar
12331233
request.AddHeader("Content-Type", "application/json");
12341234
request.AddParameter("paddleCustomerId", Uri.EscapeDataString(paddleCustomerId), ParameterType.QueryString);
12351235
request.AddParameter("departmentId", departmentId, ParameterType.QueryString);
1236-
request.AddParameter("paddlePriceId", paddlePriceId, ParameterType.QueryString);
1236+
request.AddParameter("paddleProductId", paddleProductId, ParameterType.QueryString);
1237+
request.AddParameter("paddlePriceId", paddleProductId, ParameterType.QueryString);
12371238
request.AddParameter("planId", planId, ParameterType.QueryString);
12381239
request.AddParameter("count", count, ParameterType.QueryString);
12391240
request.AddParameter("email", email, ParameterType.QueryString, true);

Web/Resgrid.Web/Areas/User/Controllers/SubscriptionController.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,11 @@ private static string GetPaddleConfigurationError(string paddleEnvironment, stri
112112
return null;
113113
}
114114

115+
private static string GetPaddleCheckoutProductId(Resgrid.Model.Plan plan)
116+
{
117+
return plan?.GetExternalKey() ?? string.Empty;
118+
}
119+
115120
[HttpGet]
116121
[Authorize]
117122
public async Task<IActionResult> SelectRegistrationPlan(string discountCode = null)
@@ -782,10 +787,15 @@ public async Task<IActionResult> GetPaddleCheckout(int id, int count, string dis
782787
return BadRequest("Invalid entity pack count.");
783788

784789
var plan = await _subscriptionsService.GetPlanByIdAsync(id);
790+
var paddleProductId = GetPaddleCheckoutProductId(plan);
791+
792+
if (string.IsNullOrWhiteSpace(paddleProductId))
793+
return StatusCode(StatusCodes.Status500InternalServerError, "Paddle checkout is not configured for this plan.");
794+
785795
var paddleCustomerId = await _departmentSettingsService.GetPaddleCustomerIdForDepartmentAsync(DepartmentId);
786796
var department = await _departmentsService.GetDepartmentByIdAsync(DepartmentId);
787797
var user = _usersService.GetUserById(UserId);
788-
var checkout = await _subscriptionsService.CreatePaddleCheckoutForSub(DepartmentId, paddleCustomerId, plan.GetExternalKey(), plan.PlanId, user.Email, department.Name, count, discountCode);
798+
var checkout = await _subscriptionsService.CreatePaddleCheckoutForSub(DepartmentId, paddleCustomerId, paddleProductId, plan.PlanId, user.Email, department.Name, count, discountCode);
789799

790800
bool hasActiveSub = false;
791801
if (!string.IsNullOrWhiteSpace(paddleCustomerId))
@@ -797,6 +807,7 @@ public async Task<IActionResult> GetPaddleCheckout(int id, int count, string dis
797807

798808
return Json(new
799809
{
810+
TransactionId = checkout?.TransactionId,
800811
PriceId = checkout?.PriceId,
801812
CustomerId = checkout?.CustomerId,
802813
Environment = checkout?.Environment,

Web/Resgrid.Web/Areas/User/Views/Subscription/Index.cshtml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,10 +606,22 @@
606606
return;
607607
}
608608
609+
if (data.TransactionId) {
610+
Paddle.Checkout.open({
611+
settings: { successUrl: resgrid.absoluteBaseUrl + '/User/Subscription/PaddleProcessing?planId=' + id },
612+
transactionId: data.TransactionId
613+
});
614+
return;
615+
}
616+
609617
if (!data.PriceId) {
610618
swal({ title: "Checkout Error", text: "Unable to create a checkout session. Please try again.", icon: "error", buttons: true, dangerMode: false });
611619
return;
612620
}
621+
if (!/^pri_/.test(data.PriceId)) {
622+
swal({ title: "Checkout Error", text: "Paddle checkout returned an unsupported checkout payload. Please contact support.", icon: "error", buttons: true, dangerMode: false });
623+
return;
624+
}
613625
614626
var checkoutSettings = {
615627
settings: { successUrl: resgrid.absoluteBaseUrl + '/User/Subscription/PaddleProcessing?planId=' + id },

Web/Resgrid.Web/Areas/User/Views/Subscription/SelectRegistrationPlan.cshtml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,10 +222,21 @@
222222
swal({ title: "Active Subscription", text: "You already have an active subscription.", icon: "warning", buttons: true, dangerMode: false });
223223
return;
224224
}
225+
if (data.TransactionId) {
226+
Paddle.Checkout.open({
227+
settings: { successUrl: resgrid.absoluteBaseUrl + '/User/Subscription/PaddleProcessing?planId=' + id },
228+
transactionId: data.TransactionId
229+
});
230+
return;
231+
}
225232
if (!data.PriceId) {
226233
swal({ title: "Checkout Error", text: "Unable to create a checkout session. Please try again.", icon: "error", buttons: true, dangerMode: false });
227234
return;
228235
}
236+
if (!/^pri_/.test(data.PriceId)) {
237+
swal({ title: "Checkout Error", text: "Paddle checkout returned an unsupported checkout payload. Please contact support.", icon: "error", buttons: true, dangerMode: false });
238+
return;
239+
}
229240
var checkoutSettings = {
230241
settings: { successUrl: resgrid.absoluteBaseUrl + '/User/Subscription/PaddleProcessing?planId=' + id },
231242
items: [{ priceId: data.PriceId, quantity: packs }]

0 commit comments

Comments
 (0)