"Also, I'm curious if ABP can generate payment module UI for the Backend (Back office), specifically for Blazor Server so Tenants can upgrade or subscribe after the trial version, directly from their admin panel, or is its UI generation feature exclusive to Public MVC websites only?"
Yes, it's possible but payment module doesn't provide any of these features. Payment module provides only a payment abstraction and recurring payments(subscriptions) only for Stripe. And payment status is updating periodically when stripe callbacks with webhooks. All the logic should be implemented by yourself in your application. You can connect pricing table to a following payment operation with payment module. But ABP doesn't generate pages or UI generation for payment. The payment module has UI only for gateway selection when you redirect to user a payment, all the configured payment gateways will be presented and user can choose one of them. Rest of the operations are done in the payment provider page and result will be get from callbacks and webhooks
Hi, Currently there is no a complete project example with recurring payments but in the source code, there is an example how to start a recurring payment and cancel it.
Have you checked the source code of Payment with the following command?
abp get-source Volo.Payment
When you follow the steps from the documentation, it should work properly. https://docs.abp.io/en/commercial/latest/modules/payment#subscriptions
If you face errors while implementing it, you can share your errors and problems or error codes from Stripe, then we can start discussing and figuring out what can be the problem
Hello,
I understand your concerns, but we can't solve the entire problem ourselves. Even the most popular javascript libraries aren't compatible with CSP. I agree we have some unsupported scripts in the framework, too. And we'll try to make it compatible in time. But it's not enoguth to make it fully compatible. All the javascript dependencies should update themselves to be compatible with your style-src CSP case.
We'll work on our side, but for third party libraries; I suggest you to create issues on their own github repositories. It seems you're working on a Blazor project, I'll check if we can do something for Blazorise. But I can't say something clear about rest of the dependencies, Thanks for your understanding
It seems there is still problem with the side-bar menu. Can you check if there is JS error in your browser console?
Hi,
Payment module doesn't provide any payment plans page or a pricing page. You should implement it yourself according to your requirements.
You can take use LeptonX HTML demo pages and get plain HTML to implement in your own project: https://x.leptontheme.com/side-menu/custom-pages/pricing
You can use leptonx demo pages in your application without adding extra CSS files
Currently we don't have a clear plan to implement Blazor SSR for CMS Kit Public side. We'll wait and see how the new Blazor Web App framework goes, than we decide. As we can see, even Microsoft makes it the default framework in the documentations, probably it'll be a fundamental option for web development in the future of Asp.Net Core. But we'll see in time.
But for SEO enhancements, we planned that issue but haven't started working on yet, I'll inform you when it's clear but it won't be included in v8.1 for sure.
Probably it happens because of SecureStorage
Have you configured it for production for each platform?
You have to take some action on your device, you can try following this topic: https://learn.microsoft.com/en-us/dotnet/maui/platform-integration/storage/secure-storage?view=net-maui-8.0&tabs=android
Hi,
Most of the problems came from Perfect Scrollbar on Blazor, because in the Blazor Logic, DOM is updated at runtime without page refresh. So PS can't handle it.
We removed the perfect scrollbar from Blazor UI in the LeptonX version 3.1 (compatible to ABP v8.1.0) and the native scrollbar will be visible in the newer versions.
Hi,
You can override the following sections to make it fit to your conditions:
Probably you're familiar with this but if you struggle in any topic you can follow Overriding Services steps to override services in your application.
Menu items are added in here:
https://github.com/abpframework/abp/blob/73cd37f06717d1f920d224e00c1e4380a1244cf3/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs#L32-L41
But as a better single-point approach you can override MenuItemPublicAppService
and add Host menu items always.
https://github.com/abpframework/abp/blob/73cd37f06717d1f920d224e00c1e4380a1244cf3/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs#L40
Even you show menu items from host, CMS Kit pages or blog post won't be opened, you should override PagePublicAppService
and modify logic and make it includes Host entities too:
https://github.com/abpframework/abp/blob/dev/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PagePublicAppService.cs
And same for BlogPostPublicAppService
https://github.com/abpframework/abp/blob/dev/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs
You can use Disabling Data Filters feature for disabling
IMultiTenant
feature in the queries.
Hi, AbpApplication can't be initialized without retrieving application-configuration. So, it's not possible to initialize the same application without application configuration. Here are 2 ways to go:
1 ) You can cache application-configuration once it's retrieved and read application-configuration from local storage if it's not available, and you have to implement offline cases on each page. It's tough and complex way.
2 ) You can handle it if the backend isn't reachable and show the error page. (In that way application can't be opened without restarting when backend is available again)
Here the steps to show error in your application:
MauiProgram.cs
, find the following code block and remove itapp.Services.GetRequiredService<IAbpApplicationWithExternalServiceProvider>().Initialize(app.Services);
App.xaml.cs
and initialize it in here and show an error page when it can't be initialized. Change the MainPage = serviceProvider.GetRequiredService<AppShell>()
section in theconstructor with the following pattern: try
{
serviceProvider.GetRequiredService<IAbpApplicationWithExternalServiceProvider>().Initialize(serviceProvider);
// Regular scenario, everything is fine:
MainPage = serviceProvider.GetRequiredService<AppShell>();
}
catch (Exception ex)
{
MainPage = new ContentPage { Content = new Label { Text = ex.Message } };
// Log the exception with your tracking tool, AppCenter, Sentry, etc.
// Crashes.TrackError(exception);
}