ܠܡܳܢܐ ܬܘܣܦ̈ܬܐ ܕ nopCommerce ܐܝܬ ܠܗܶܝܢ ܛܝܡܐ
nopCommerce ܡܕܰܒܰܪ ܝܰܬܝܪ ܡܶܢ 60,000 ܚܳܢ̈ܘܳܬܐ ܕܥܰܠ ܐܰܢܛܘܢܝܐ ܒܟܠܶܗ ܥܳܠܡܐ. ܐܝܬܘܗܝ ܪܝܫܳܝܐ ܡܶܢ ܟܶܢܫ̈ܐ ܕܬܶܓܘܪܬܐ ܐܶܠܶܩܛܪܘܢܳܝܬܐ ܦܬܝ̈ܚܝ ܡܰܒܘܥܐ ܕܥܰܠ .NET — ܘܒܶܢܝܳܢ ܬܘܣܦ̈ܬܐ ܕܝܠܶܗ ܐܝܬܘܗܝ ܡܟܘܢܐ ܕܗܰܘ ܟܶܢܫܐ. ܟܠ ܫܘܬܳܦܘܬ ܬܰܪܥܳܐ ܕܦܘܪܥܳܢܐ، ܘܟܠ ܡܰܘܒܠܳܢ ܫܘܕܳܪܐ، ܘܟܠ widget، ܘܟܠ ܡܘܙܳܓܐ ܡܥܳܕܐ ܚܳܝܶܐ ܐܰܝܟ ܬܘܣܦܬܐ.
ܐܶܢ ܡܶܣܬܰܟܰܠ ܐܰܢ̱ܬ ܐܰܝܟܰܢ ܬܶܒܢܶܐ ܬܘܣܦ̈ܬܐ ܕ nopCommerce، ܡܶܫܟܰܚ ܐܰܢ̱ܬ ܠܡܰܘܪܳܒܘ ܚܰܕ ܡܶܢ ܟܶܢܫ̈ܐ ܡܝܰܬܪ̈ܐ ܕܬܶܓܘܪܬܐ ܐܶܠܶܩܛܪܘܢܳܝܬܐ ܕܒܫܘܩܐ — ܘܠܡܶܒܢܳܐ ܡܰܣܩܳܢܐ ܡܶܢܶܗ. ܗܳܢܐ ܡܰܕܪܟܳܢܐ ܟܳܢܶܫ ܟܠ ܡܶܕܶܡ ܡܶܢ ܣܶܟܡܐ ܩܰܕܡܳܝܐ ܕܬܘܣܦܬܐ ܥܕܰܡܐ ܠܛܘܦܣ̈ܶܐ ܕܡܰܫܪܝܘܬ ܡܰܥܒܕܳܢܘܬܐ.
ܒܳܢܶܝܢܢ ܬܘܣܦ̈ܬܐ ܕ nopCommerce ܡܶܢ ܫܢܰܬ 2009، ܥܰܡ ܝܰܬܝܪ ܡܶܢ 38 ܬܘܣܦ̈ܬܐ ܒܟܘܪܳܣܰܢ — ܟܝܬ 12 ܫܘܬܳܦ̈ܘܳܬܐ ܕܬܰܪ̈ܥܶܐ ܕܦܘܪܥܳܢܐ ܒܪܰܙܝܠܳܝ̈ܐ ܘܦܘܪܩܳܢܐ ܕ PIX ܓܡܝܪܐ ܝܚܝܕܳܝܐ ܕܥܰܠ ܟܶܢܫܐ. ܗܳܢܐ ܡܰܕܪܟܳܢܐ ܡܚܰܘܶܐ ܡܶܕܶܡ ܕܝܠܶܦܢ ܟܰܕ ܒܳܢܶܝܢܢ ܬܘܣܦ̈ܬܐ ܕܡܥܰܒܕ̈ܢ ܡܶܠܝܘܢ̈ܶܐ ܕܥܘܪ̈ܥܳܢܶܐ.
ܒܶܢܝܳܢ ܬܘܣܦܬܐ: ܫܶܬܶܐܣܬܐ
ܕܰܪܓܳܢܘܬ ܩܝ̈ܡܶܐ ܕܬܘܣܦܬܐ
ܟܠ ܬܘܣܦܬܐ ܕ nopCommerce ܡܫܰܪܝܐ ܥܰܡ ܩܝܳܡܐ IPlugin ܒ Nop.Services.Plugins. ܚܠܳܦ ܕܢܶܥܒܶܕ ܠܳܟ ܟܠ ܡܶܕܶܡ ܡܶܢ ܪܝܫܐ، nopCommerce ܝܳܗܶܒ BasePlugin — ܟܘܪܟܐ ܡܘܦܪܫܐ ܕܡܕܰܒܰܪ boilerplate — ܘܟܶܢܫܐ ܕܩܝ̈ܡܶܐ ܡܘܦܪ̈ܫܶܐ ܠܙܢ̈ܝܐ ܡܥܳܕ̈ܶܐ ܕܬܘܣܦ̈ܬܐ:
| ܩܝܳܡܐ | ܢܝܫܐ | ܛܘܦܣܐ |
|---|---|---|
| IPaymentMethod | ܡܥܰܒܕܳܢܘܬ ܦܘܪܥܳܢܐ (ܫܘܪܳܪܐ، ܐܶܚܝܳܕܐ، ܬܰܦܢܝܬܐ، ܒܘܛܳܠܐ) | PayPal، Stripe، PIX، MercadoPago |
| IShippingRateComputationMethod | ܚܘܫܳܒ ܙܶܕܩ̈ܶܐ ܕܫܘܕܳܪܐ ܡܶܢ ܡܰܘܒܠ̈ܢܐ | UPS، FedEx، Correios (Brazil) |
| ITaxProvider | ܚܘܫܳܒ ܙܶܕܩ̈ܶܐ ܕܡܰܟܣܐ ܠܦܘܬ ܫܘܠܛܳܢܐ | Avalara، TaxJar |
| IWidgetPlugin | ܡܰܥܒܕܳܢܘܬ widgets ܕ UI ܒܐܶܣܛܪ̈ܶܐ ܡܚܰܘ̈ܝܶܐ | ܡܰܡܠܠܐ ܚܰܝܐ، ܢܘܦܳܩ ܬܶܒܪܐ، ܛܶܟ̈ܣܶܐ ܕ Trello |
| IExchangeRateProvider | ܢܣܝܒܘܬ ܙܶܕܩ̈ܶܐ ܕܫܘܚܠܳܦ ܥܘܡܠ̈ܶܐ | ECB، ܒܶܝܬ ܓܰܙܐ ܡܶܨܥܳܝܐ ܕ Brazil |
| IDiscountRequirementRule | ܡܶܠܟܐ ܡܥܳܕܐ ܕܒܘܨܳܪܐ | "ܙܳܒܘܢܐ ܡܶܢ Brazil ܢܳܣܶܒ ܒܘܨܳܪ 10%" |
| IExternalAuthenticationMethod | ܡܥܰܠܝܳܢܘܬ ܟܶܢܫܐ ܘ SSO | Google، Facebook، Azure AD |
| IMultiFactorAuthenticationMethod | ܬܘܣܦ̈ܬܐ ܕ MFA (ܡܶܢ 4.40) | Google Authenticator، SMS OTP |
| IPickupPointProvider | ܕܘܟ̈ܝܳܬܐ ܕܢܣܝܒܘܬܐ ܒܚܳܢܘܬܐ | ܢܶܩܫ ܚܳܢܘܬܐ ܡܳܪܳܢܝܬܐ، ܛܶܟܣ̈ܶܐ ܕܓܘܙܘ̈ܢܐ |
| IMiscPlugin | ܡܰܘܪ̈ܒܳܢܐ ܡܥܳܕ̈ܶܐ | ܡܕܰܒܪܳܢܘܬ DNS، ܒܘܚܪ̈ܳܢܐ، ܫܘܬܳܦ̈ܘܳܬܐ |
ܓܒܝ ܩܝܳܡܐ ܡܘܦܪܫܐ ܛܳܒ ܠܚܘܫܳܚܟ. IPaymentMethod ܝܳܗܶܒ ܠܳܟ ܟܠܗܘܢ ܚܰܝ̈ܶܐ ܕܦܘܪܥܳܢܐ — ProcessPaymentAsync، PostProcessPaymentAsync، RefundAsync، VoidAsync، CaptureAsync — ܟܰܕ IMiscPlugin ܐܝܬܘܗܝ ܬܰܪܥܐ ܕܥܪܘܩܝܐ ܠܟܠ ܡܶܕܶܡ ܕܠܐ ܢܳܩܶܦ ܙܢܐ ܡܥܳܕܐ.
ܢܶܩܫ ܥܒܳܕܐ: ܦܣܘܥܬܐ ܒܳܬܰܪ ܦܣܘܥܬܐ
1. ܒܪܝ ܥܒܳܕܐ ܕ Class Library
ܒܪܝ ܥܒܳܕܐ ܚܰܕܬܐ ܕ Class Library ܕܟܳܘܶܢ ܥܰܠ .NET 9. ܥܝܳܕܐ ܕܫܘܡ̈ܗܶܐ ܡܰܡܠܟܐ ܐܝܬܘܗܝ Nop.Plugin.{Group}.{Name}:
Nop.Plugin.Payments.PayPalCommerce
Nop.Plugin.Shipping.FedEx
Nop.Plugin.Widgets.WhatsApp
Nop.Plugin.Misc.GoDaddy
ܣܝܡ ܥܒܳܕܐ ܒܟܘܪܟܐ \Plugins ܒܪܝܫ ܦܘܪܩܳܢܐ (ܠܰܘ ܒܓܰܘ \Nop.Web\Plugins، ܗܰܘ ܕܐܝܬܘܗܝ ܢܝܫ ܡܰܫܪܝܘܬܐ). ܩܝܡ ܐܘܪܚ ܢܶܦܩܬܐ ܕ .csproj ܠ $(SolutionDir)\Presentation\Nop.Web\Plugins\{PluginOutputDirectory} ܘܐܰܥܝܪ CopyLocalLockFileAssemblies ܡܶܛܠ ܕܢܶܬܢܰܣ̈ܟܢ ܬܰܠܝ̈ܳܬܐ ܕ NuGet ܠܢܶܦܩܬܐ.
2. ܒܪܝ plugin.json
ܟܠ ܬܘܣܦܬܐ ܣܢܝܩܐ ܥܰܠ ܛܘܥܡܐ plugin.json ܥܰܡ ܪ̈ܶܡܙܶܐ:
{
"Group": "Payment methods",
"FriendlyName": "My Payment Gateway",
"SystemName": "Payments.MyGateway",
"Version": "1.00",
"SupportedVersions": [ "4.90" ],
"Author": "SplatDev",
"DisplayOrder": 1,
"FileName": "Nop.Plugin.Payments.MyGateway.dll",
"Description": "Process payments via My Gateway"
}
ܗܘ SystemName ܙܳܕܶܩ ܕܢܶܢܩܘܦ ܫܘܡ assembly ܕܝܠܟ. SupportedVersions ܡܬܰܚܶܡ ܐܰܝܠܶܝܢ ܢܘܣ̈ܟܶܐ ܕ nopCommerce ܡܶܫܟܚܝܢ ܠܡܰܥܡܪܘ ܬܘܣܦܬܐ. ܐܶܢ ܡܪܰܡܪܶܡ ܐܰܢ̱ܬ nopCommerce ܘܬܘܣܦܬܐ ܡܶܬܬܰܒܪܐ، ܒܘܩ ܗܳܢܐ ܚܰܩܠܐ ܩܰܕܡܳܝܳܐܝܬ — ܣܘܓܐܐ ܕܬܘܣܦ̈ܬܐ ܒܰܠܚܘܕ ܣܢܝ̈ܩܢ ܥܰܠ ܚܘܕܳܬ ܢܘܣ̈ܟܝܗܶܝܢ ܡܶܣܬܰܡ̈ܟܢܐ.
3. ܡܰܥܒܶܕ ܟܘܪܟ ܬܘܣܦܬܐ
ܒܪܝ ܟܘܪܟܐ ܕܡܰܥܒܶܕ ܩܝܳܡ ܬܘܣܦܬܐ ܙܳܕܩܳܢܐ ܘܢܳܦܶܩ ܡܶܢ BasePlugin:
public class MyPaymentProcessor : BasePlugin, IPaymentMethod
{
public override Task InstallAsync()
{
// Insert settings, locale resources, or database tables
return base.InstallAsync();
}
public override Task UninstallAsync()
{
// Clean up settings, locale resources, or database tables
return base.UninstallAsync();
}
public override Task UpdateAsync(string currentVersion, string targetVersion)
{
// Handle version migrations
return base.UpdateAsync(currentVersion, targetVersion);
}
public Task<ProcessPaymentResult> ProcessPaymentAsync(ProcessPaymentRequest request)
{
// Your payment logic here
}
public override string GetConfigurationPageUrl()
{
return _nopUrlHelper.RouteUrl(MyDefaults.Route.Configuration);
}
}
ܗܳܠܶܝܢ ܕܪܘܣܳܡ̈ܐ InstallAsync، UninstallAsync، ܘ UpdateAsync ܐܝܬܝܗܘܢ ܢܘܩ̈ܙܶܐ ܕܚܰܝ̈ܝܟ. ܩܪܝ ܐܰܡܝܢܳܐܝܬ ܡܰܥܒܕܳܢܘܬ ܫܶܬܶܐܣܬܐ — base.InstallAsync() ܡܕܰܒܰܪ ܟܬܝܒܬܐ ܒܛܶܟܣ ܬܘܣܦ̈ܬܐ.
4. ܐܰܘܣܶܦ ܛܘܟܳܣܐ (Admin UI)
ܠܬܘܣܦ̈ܬܐ ܥܰܡ ܛܘܟ̈ܣܶܐ، ܒܪܝ ܡܕܰܒܪܳܢܐ ܕ MVC، ܘܛܘܦܣܐ، ܘܚܙܳܝ ܕ Razor:
- Controllers/{Name}Controller.cs — ܡܨܰܒܰܬ ܒ
[AuthorizeAdmin]ܘ[Area(AreaNames.ADMIN)]. ܢܦܘܩ ܡܶܢBasePluginController. - Models/ConfigurationModel.cs — ܟܘܪܟܐ ܦܫܝܛܐ ܥܰܡ ܕܝ̈ܠܳܝܳܬܐ ܕܛܘܟ̈ܣܟ ܘܪ̈ܘܫܡܶܐ
[NopResourceDisplayName]ܠܡܘܟܢܳܝܘܬܐ. - Views/Configure.cshtml — ܡܶܬܚܰܫܰܚ ܒܣܶܕܪܐ
_ConfigurePlugin. ܐܰܘܣܶܦ ܐܳܦ_ViewImports.cshtml(ܢܣܘܟ ܡܶܢ ܬܘܣܦܬܐ ܩܰܝܳܡܬܐ).
ܟܬܘܒ ܐܘܪܚ ܛܘܟܳܣܐ ܒ RouteProvider.cs ܕܡܰܥܒܶܕ IRouteProvider:
public class RouteProvider : IRouteProvider
{
public void RegisterRoutes(IEndpointRouteBuilder endpointRouteBuilder)
{
endpointRouteBuilder.MapControllerRoute(
name: MyDefaults.Route.Configuration,
pattern: "Admin/MyGateway/Configure",
defaults: new { controller = "MyGateway", action = "Configure", area = AreaNames.ADMIN });
}
public int Priority => 0;
}
ܒܶܢܝܳܢ ܬܘܣܦܬܐ ܕܦܘܪܥܳܢܐ: ܛܘܦܣܐ ܕܥܳܠܡܐ ܫܰܪܝܪܐ
ܬܘܣܦ̈ܬܐ ܕܦܘܪܥܳܢܐ ܐܝܬܝܗܶܝܢ ܡܥܳܕ̈ܳܬܐ ܛܳܒ — ܘܥܘܡ̈ܩܳܢܝܳܬܐ ܛܳܒ — ܡܶܢ ܙܢ̈ܝܐ ܕܬܘܣܦ̈ܬܐ. ܗܳܐ ܛܘܦܣ ܡܰܥܒܕܳܢܘܬܐ ܕܡܶܬܚܰܫܚܝܢܢ ܒܶܗ ܒ SplatDev:
ܡܢܰܘ̈ܳܬܐ ܪ̈ܝܫܳܝܳܬܐ
- ܟܘܪܟ ܛܘܟ̈ܣܶܐ: ܟܘܪܟܐ ܕܡܰܥܒܶܕ
ISettingsܥܰܡ ܕܝ̈ܠܳܝܳܬܐ ܠܩܘܠܝ̈ܕܶܐ ܕ API، ܘ URLs، ܘܙܢ̈ܝܐ (sandbox/production)، ܘܡܶܬܓܰܢܒܪ̈ܢܝܳܬܐ ܕܡܘܙܳܓ̈ܶܐ. ܣܝܡ ܛܘܫܝ̈ܶܐ ܒISettingService— ܠܐ ܡܬܘܡ ܢܩܘܫ ܩܰܫܝܳܐܝܬ ܗܶܝܡ̈ܢܘܳܬܐ. - ܟܘܪܟ ܣܶܟܡ̈ܐ: ܟܘܪܟܐ ܩܰܝܳܡܐ ܥܰܡ ܩܘܝ̈ܡܶܐ — ܫܘܡ̈ܗܶܐ ܕܐܘܪܚܳܐ، ܘܫܘܡ ܛܶܟܣܐ، ܘ URLs ܕܛܘܟܳܣܐ، ܘܢܘܩ̈ܙܶܐ ܕ API. ܢܳܛܰܪ ܩܛܝܪ̈ܶܐ ܟܫܝ̈ܦܶܐ ܠܒܰܪ ܡܶܢ ܡܶܠܟܟ.
- ܟܘܪܟ ܬܶܫܡܶܫܬܐ: ܡܶܠܟܟ ܫܰܪܝܪܐ ܕܫܘܬܳܦܘܬܐ — ܩܪ̈ܝܳܬܐ ܕ HTTP ܠܬܰܪܥ ܦܘܪܥܳܢܐ، ܘܦܘܪܳܫ ܪܘܟܳܢܐ، ܘܡܕܰܒܪܳܢܘܬ webhook. ܐܰܥܶܠ ܒܝܰܕ DI ܘܛܰܪ ܡܶܬܒܰܚܪܳܢܐ (ܩܝܳܡܐ + ܡܰܥܒܕܳܢܘܬܐ).
- ܣܳܦܘܩ̈ܶܐ ܕܓܶܕܫ̈ܶܐ: ܡܰܥܒܶܕ
IConsumer<OrderPlacedEvent>ܘܩܝ̈ܡܶܐ ܕܳܡ̈ܝܶܐ ܠܡܶܬܢܰܥܳܝܘ ܥܰܠ ܓܶܕܫ̈ܶܐ ܕܚܳܢܘܬܐ — ܫܰܕܰܪ ܫܘܪ̈ܳܪܶܐ ܕܥܘܪ̈ܥܳܢܶܐ، ܘܥܝܪ ܟܘܪ̈ܟܶܐ ܕܒܶܣܬܪ ܦܘܪܥܳܢܐ.
ܪܶܗܛ ܦܘܪܥܳܢܐ: ܢܶܩܦ̈ܶܐ ܕܘܳܠܶܐ ܠܳܟ ܠܡܰܥܒܳܕܘ
| ܢܶܩܦܐ | ܐܶܡܰܬܝ ܡܶܬܩܪܶܐ | ܡܳܢܐ ܙܳܕܶܩ ܕܢܶܥܒܶܕ |
|---|---|---|
ProcessPaymentAsync |
ܙܳܒܘܢܐ ܢܳܩܶܫ "ܦܪܘܥ" | ܫܰܪܶܪ ܐܰܘ ܐܶܚܘܕ ܦܘܪܥܳܢܐ. ܐܰܗܦܶܟ ܟܘܫܳܪܐ/ܢܘܦܳܠܐ ܘܡܶܢܝܳܢ ܥܘܪܥܳܢܐ. |
PostProcessPaymentAsync |
ܒܶܣܬܪ ܕܓܳܡܰܪ ܡܥܰܒܕܳܢܘܬ ܦܘܪܥܳܢܐ | ܐܰܗܦܶܟ ܠܬܰܪܥ ܒܰܪܳܝܐ (PayPal، PagSeguro) ܐܰܘ ܚܰܘܳܐ ܐܰܦܐ ܕܫܘܪܳܪܐ. |
RefundAsync |
ܡܕܰܒܪܳܢܐ ܡܫܰܪܶܐ ܬܰܦܢܝܬܐ | ܡܰܥܒܶܕ ܬܰܦܢܝܬܐ ܒܝܰܕ ܬܰܪܥܐ. ܐܰܗܦܶܟ ܟܘܫܳܪܐ/ܢܘܦܳܠܐ. |
VoidAsync |
ܡܕܰܒܪܳܢܐ ܡܒܰܛܶܠ ܫܘܪܳܪܐ | ܒܰܛܶܠ ܫܘܪܳܪܐ ܕܦܳܐܶܫ. ܒܰܠܚܘܕ ܡܶܬܚܰܫܰܚ ܐܶܢ ܦܘܪܥܳܢܐ ܠܐ ܥܕܰܟܝܠ ܐܶܬܶܐܚܶܕ. |
CaptureAsync |
ܡܕܰܒܪܳܢܐ ܐܳܚܶܕ ܦܘܪܥܳܢܐ ܡܫܰܪܪܐ | ܐܶܚܘܕ ܣܟܘܡܐ ܕܐܶܬܫܰܪܰܪ ܡܶܢ ܩܕܝܡ. ܡܥܳܕܐ ܠܪ̈ܶܗܛܶܐ ܕܫܘܪܳܪܐ ܘܗܳܝܕܶܝܢ ܐܶܚܝܳܕܐ. |
GetPaymentMethodDescriptionAsync |
ܐܰܦܐ ܕܡܥܰܠܝܳܢܘܬܐ ܡܶܬܥܰܒܕܐ | ܐܰܗܦܶܟ ܫܘܡܐ ܕܚܘܳܝܐ، ܘܪܶܡܙܐ، ܘܪܘܫܡܐ ܕܛܶܟܣ ܦܘܪܥܳܢܐ. |
GetAdditionalHandlingFeeAsync |
ܚܘܫܳܒ ܡܢܝܳܢ ܦܘܩܕܳܢܐ | ܐܰܗܦܶܟ ܟܠ ܙܶܕܩܐ ܝܰܬܝܪܐ ܕܛܶܟܣ ܦܘܪܥܳܢܐ ܢܳܣܶܒ، ܐܰܘ ܣܪܝܩܘܬܐ. |
ܛܘܦܣܐ ܕܬܘܣܦܬܐ ܕܦܘܪܥܳܢܐ ܒܪܰܙܝܠܳܝܬܐ: PIX
ܛܶܟܣܐ ܕܦܘܪܥܳܢܐ ܡܶܚܕܳܝܐ PIX ܕ Brazil ܣܢܝܩ ܥܰܠ ܪܶܗܛܐ ܡܚܰܘܝܐ: ܒܪܝ ܛܘܦܣ QR ܥܰܡ ܛܥܝܢܬܐ (ܚܘܛܐ ܕ EMV)، ܘܚܰܘܳܐ ܠܙܳܒܘܢܐ، ܘܗܘܝ ܨܳܐܶܬ ܠܫܘܪܳܪ webhook ܟܰܕ ܦܘܪܥܳܢܐ ܡܶܬܩܰܒܰܠ. ܗܳܐ ܛܘܦܣܐ:
- ProcessPaymentAsync: ܩܪܝ PSP (PagSeguro، MercadoPago، ܘܫܪ.) ܠܡܶܒܪܳܐ ܚܘܝܳܒܐ ܕ PIX. ܣܝܡ ܡܶܢܝܳܢ ܥܘܪܥܳܢܐ (
txid) ܘܛܥܝܢܬܐ ܕ EMV. - PostProcessPaymentAsync: ܡܰܥܒܶܕ ܛܘܦܣ QR (ܕܐܶܬܒܪܝ ܡܶܢ ܛܥܝܢܬܐ ܕ EMV) ܘܩܛܝܪ "ܢܣܘܟ-ܣܝܡ". ܩܝܡ ܪܘܟܳܢ ܦܘܪܥܳܢܐ ܠ
Pending. - ܡܕܰܒܪܳܢ webhook: PSP ܡܫܰܕܰܪ webhook ܟܰܕ PIX ܡܫܰܪܰܪ ܦܘܪܥܳܢܐ. ܚܰܕܶܬ ܪܘܟܳܢ ܦܘܩܕܳܢܐ ܘܥܝܪ
OrderPaidEvent.
ܗܳܢܐ ܛܘܦܣܐ ܐܝܬܘܗܝ ܒܶܣܬܪ ܟܠܗܶܝܢ 12 ܬܘܣܦ̈ܬܐ ܕܦܘܪܥܳܢܐ ܒܪ̈ܰܙܝܠܳܝܳܬܐ ܕ SplatDev — ܡܥܰܒܕ̈ܢ PIX، ܘ boleto، ܘܦܘܪ̈ܥܳܢܶܐ ܕܟܰܪܛܝܣ ܗܶܝܡܳܢܘܬܐ ܒܦܘܠܳܓܐ ܒܝܰܕ PagSeguro، MercadoPago، Cielo، Banco Inter، Pagar.me، Rede، GetNet، PicPay، NuPay، Braspag، ܘ InfinityPay.
Widgets: ܡܰܘܣܳܦܘ UI ܕܠܐ ܡܶܩܪܰܒ ܠܛܘܦܣ̈ܶܐ
ܬܘܣܦ̈ܬܐ ܕ widget ܡܰܥܒܕ̈ܢ IWidgetPlugin ܘܙܳܕܶܩ ܕܢܚܰܘ̈ܝܢ ܐܰܝܠܶܝܢ ܐܶܣܛܪ̈ܶܐ ܕ widget ܡܰܥܒܕ̈ܢ ܒܗܘܢ:
public Task<IList<string>> GetWidgetZonesAsync()
{
return Task.FromResult<IList<string>>(new List<string>
{
PublicWidgetZones.HomepageBeforeBestSellers,
PublicWidgetZones.ProductDetailsAfterPictures
});
}
ܗܳܝܕܶܝܢ ܡܰܥܒܶܕ GetPublicViewComponentAsync ܠܡܰܗܦܳܟܘ HTML ܕ widget. ܛܶܟܣ widget ܩܳܪܶܐ ܗܳܢܐ ܢܶܩܦܐ ܠܟܠ ܐܶܣܛܪܐ ܕܟܬܰܒܬ.
ܛܘܦܣ̈ܶܐ ܡܥܳܕ̈ܶܐ ܕ widget: ܢܘܦܳܩ̈ܶܐ ܕܟܬܝܒܘܬ ܬܶܒܪܐ، ܘܩܶܢܛܪ̈ܘܢܶܐ ܕܡܰܡܠܠܐ ܚܰܝܐ، ܘܪ̈ܘܫܡܶܐ ܕܗܶܝܡܳܢܘܬܐ، ܘܛܶܟ̈ܣܶܐ ܕܩܘܒܳܠ cookie، ܘܩܶܢܛܪ̈ܘܢܶܐ ܛܳܝ̈ܦܶܐ ܕ WhatsApp، ܘܡܘܙܳܓ̈ܶܐ ܕܡܶܢ ܩܕܝܡ ܐܶܬܚܙܝܘ، ܘܡܰܘܕܥ̈ܢܘܳܬܐ ܕܣܗܕܘܬ ܟܶܢܫܐ.
ܡܰܥܠܳܢ ܡܰܟܙܢܐ: IRepository<T> ܘܫܘܢܳܝ̈ܶܐ
nopCommerce ܡܶܬܚܰܫܰܚ ܒܛܘܦܣ ܟܘܡܪܐ ܒܝܰܕ IRepository<T> ܠܡܰܥܠܳܢ ܝܘܕ̈ܥܶܐ. ܠܬܘܣܦ̈ܬܐ ܕܣܢܝ̈ܩܢ ܥܰܠ ܛܶܒ̈ܠܶܐ ܡܥܳܕ̈ܶܐ:
- ܬܚܘܡ ܟܘܪܟ ܐܝܬܘܬܟ (ܘܳܠܶܐ ܠܶܗ ܕܝܠܳܝܘܬܐ
Id). - ܒܪܝ
ObjectContextܕܟܳܬܶܒ ܐܝܬܘܬܟ ܒ Entity Framework Core. - ܒ
InstallAsync، ܐܶܬܚܰܫܰܚ_dbContext.InstallAsync()ܠܡܶܒܪܳܐ ܛܶܒ̈ܠܶܐ. - ܒ
UninstallAsync، ܐܶܬܚܰܫܰܚ_dbContext.UninstallAsync()ܠܡܶܫܕܳܐ ܠܗܘܢ.
ܠܫܘܢܳܝ̈ܶܐ ܕܣܶܟܡܐ ܒܶܝܬ ܢܘܣ̈ܟܶܐ ܕܬܘܣܦܬܐ، ܐܶܬܪܰܥܳܐ ܥܰܠ ܡܰܘܣܳܦܘ MigrationManager ܠܕܪܘܣܳܡܟ UpdateAsync ܕܒܳܚܰܪ ܢܘܣܟ ܣܶܟܡܐ ܗܳܫܳܝܐ ܘܡܰܥܒܶܕ ܦܘܩ̈ܕܳܢܶܐ ܙܳܕܩ̈ܢܐ ܕ ALTER TABLE. ܗܳܕܐ ܦܫܝܛܳܐ ܛܳܒ ܡܶܢ FluentMigrator ܠܬܘܣܦ̈ܬܐ ܘܢܳܛܪܐ ܡܶܠܟ ܫܘܢܳܝܟ ܒܚܰܕ ܐܰܬܪܐ.
ܒܘܚܪܳܢܐ: ܚܘܪ ܥܰܠ ܬܘܣܦܬܟ ܐܰܝܟ ܡܘܙܳܓܐ
ܒ SplatDev، ܚܳܝܪܝܢܢ ܥܰܠ ܟܠ ܬܘܣܦܬܐ ܐܰܝܟ ܡܘܙܳܓܐ ܥܰܡ ܟܶܢܫ ܒܘܚܪܳܢܐ ܕܝܠܶܗ:
- ܒܘܚܪ̈ܳܢܐ ܦܪ̈ܝܕܐ (xUnit): ܒܚܘܪ ܛܶܒܩ ܬܶܫܡܶܫܬܟ ܦܪܝܫܳܐܝܬ. ܥܒܶܕ ܛܘܦܣܐ ܕ
ISettingService، ܘIRepository<T>، ܘܟܠ ܙܳܒܘܢ̈ܐ ܕ HTTP. ܡܶܠܟ ܦܘܪܥܳܢܟ، ܘܚܘܫܳܒ̈ܶܐ ܕܡܰܟܣܐ، ܘܚܘܫܳܒ̈ܶܐ ܕܙܶܕܩ ܫܘܕܳܪܐ ܘܳܠܶܐ ܠܗܘܢ ܟܘܣܝ ܒܘܚܪ̈ܳܢܐ ܦܪ̈ܝܕܐ ܕ100% ܥܰܠ ܡܶܠܟ ܥܒܳܕܐ. - ܒܘܚܪ̈ܳܢܐ ܫܘܬܳܦܳܝ̈ܐ: ܐܰܩܝܡ ܡܟܰܝܢܬ nopCommerce ܕܒܘܚܪܳܢܐ ܘܫܰܪܶܪ ܕܬܘܣܦܬܟ ܡܶܬܥܰܡܪܐ، ܘܡܶܬܛܰܟܣܐ، ܘܡܥܰܒܕܐ ܒܟܠܗܘܢ ܚܰܝ̈ܶܐ. ܐܶܬܚܰܫܰܚ ܒܗܶܝܡ̈ܢܘܳܬܐ ܕ sandbox/ܒܘܚܪܳܢܐ ܠܬܰܪ̈ܥܶܐ ܕܦܘܪܥܳܢܐ.
- ܒܘܚܪ̈ܳܢܐ ܕܡܘܟܢܳܝܘܬܐ: ܫܰܪܶܪ ܕܟܠ ܝܘܬܪ̈ܢܶܐ ܕܡܘܟܢܳܝܘܬܐ ܐܝܬܝܗܘܢ ܠܟܠ ܠܶܫܳܢܐ ܕܐܳܡܰܪ ܐܰܢ̱ܬ ܕܣܳܡܶܟ ܐܰܢ̱ܬ. ܚܘܛ̈ܶܐ ܕܝܘܬܪ̈ܢܶܐ ܚܰܣܝܪ̈ܶܐ ܐܝܬܝܗܘܢ ܥܘܘܳܠܐ ܡܥܳܕ ܛܳܒ ܕܬܘܣܦܬܐ.
- ܢܶܩܦܘܬ StyleCop: nopCommerce ܡܣܰܟܶܐ ܢܶܩܦܘܬ StyleCop. ܪܗܛܝܗܝ ܒܡܰܒܘܥ CI ܕܝܠܟ — ܢܳܟܶܪ ܥܶܕ̈ܠܶܐ ܟܫ̈ܝܶܐ ܩܕܳܡ ܒܘܚܪܳܢ ܟܘܕܐ.
ܢܘܦܳܠ̈ܐ ܡܥܳܕ̈ܶܐ (ܘܐܰܝܟܰܢ ܬܶܬܪܰܚܰܩ ܡܶܢܗܘܢ)
1. ܕܠܐ ܩܪܝܬ base.InstallAsync()
ܐܶܢ ܪܳܣܶܡ ܐܰܢ̱ܬ InstallAsync ܕܠܐ ܩܪܝܬ ܫܶܬܶܐܣܬܐ، ܬܘܣܦܬܟ ܠܐ ܬܶܬܟܬܶܒ ܒܛܶܟܣ ܬܘܣܦ̈ܬܐ ܘܠܐ ܬܶܬܚܙܶܐ ܒ admin. ܐܰܡܝܢܳܐܝܬ ܟܢܘܫ await base.InstallAsync() ܒܫܘܠܳܡ ܪܘܣܳܡܟ.
2. ܢܩܳܫ ܗܶܝܡ̈ܢܘܳܬܐ ܩܰܫܝܳܐܝܬ
ܣܝܡ ܩܘܠܝ̈ܕܶܐ ܕ API، ܘ tokens، ܘܛܘܫܝ̈ܶܐ ܒ ISettingService — ܠܐ ܡܬܘܡ ܢܩܘܫ ܠܗܘܢ ܩܰܫܝܳܐܝܬ ܒ plugin.json ܐܰܘ ܐܰܝܟ ܩܘܝ̈ܡܶܐ ܕܟܘܪܟܐ. ܐܰܦܐ ܕܛܘܟ̈ܣܶܐ ܙܳܕܶܩ ܕܬܶܫܒܘܩ ܠܡܕܰܒܪ̈ܢܶܐ ܠܡܶܛܟܰܣ ܗܳܠܶܝܢ ܩܝ̈ܡܶܐ، ܘܘܳܠܶܐ ܠܗܘܢ ܕܢܶܬܢܰܛܪܘܢ ܟܣ̈ܝܶܐ ܟܰܕ ܙܳܕܶܩ.
3. ܡܶܛܥܳܐ ܢܶܩܦܘܬ ܢܘܣܟܐ
ܢܘܣ̈ܟܶܐ ܕ nopCommerce ܬܳܒܪܝܢ ܬܘܣܦ̈ܬܐ. ܚܰܩܠܐ SupportedVersions ܒ plugin.json ܠܰܘ ܨܶܒܬܐ ܗܘ — nopCommerce ܒܳܚܰܪ ܠܶܗ ܩܕܳܡ ܕܛܳܥܶܢ ܬܘܣܦܬܟ. ܟܰܕ ܡܪܰܡܪܶܡ ܐܰܢ̱ܬ nopCommerce، ܒܚܘܪ ܬܘܣܦܬܟ ܠܘܩܒܰܠ ܢܘܣܟܐ ܚܰܕܬܐ ܘܚܰܕܶܬ ܗܳܢܐ ܚܰܩܠܐ. ܠܐ ܬܰܪܶܡ ܡܶܢܝܳܢܐ ܕܠܐ ܒܘܚܪܳܢܐ.
4. ܟܠܝܳܢ ܚܘܛ ܒܳܥܘܬܐ
ܟܠܗܘܢ ܢܶܩܦ̈ܶܐ ܕܬܘܣܦܬܐ ܐܝܬܝܗܘܢ async ܡܶܛܠ ܥܶܠܬܐ. ܐܶܢ ܡܥܰܒܕܳܢ ܦܘܪܥܳܢܟ ܩܳܪܶܐ API ܒܰܪܳܝܐ، ܗܳܝ ܩܪܝܬܐ ܙܳܕܶܩ ܕܬܶܗܘܶܐ async. ܟܠܝܳܢ ܚܘܛܐ ܒ .Result ܐܰܘ .Wait() ܢܒܰܨܰܪ ܡܶܥܒܕܳܢܘܬܐ ܬܚܶܝܬ ܝܘܩܪܐ ܘܡܶܫܟܰܚ ܥܳܒܶܕ deadlocks.
5. ܠܰܝܬ ܣܳܦܘܩ̈ܶܐ ܕܓܶܕܫ̈ܶܐ
ܬܘܣܦ̈ܬܐ ܕܒܰܠܚܘܕ ܝܳܗ̈ܒܢ ܐܰܦܐ ܕܛܘܟܳܣܐ ܡܶܛܥ̈ܝܢ ܢܝܫܐ. ܚܰܝܠܐ ܫܰܪܝܪܐ ܕܬܘܣܦ̈ܬܐ ܕ nopCommerce ܐܳܬܶܐ ܡܶܢ ܣܳܦܘܩ̈ܶܐ ܕܓܶܕܫ̈ܶܐ — ܕܡܶܬܢܰܥ̈ܝܢ ܥܰܠ ܓܶܕܫ̈ܶܐ ܕܚܳܢܘܬܐ ܐܰܝܟ OrderPlacedEvent، ܐܰܘ CustomerRegisteredEvent، ܐܰܘ ShipmentDeliveredEvent. ܐܰܣܘܪ ܬܘܣܦܬܟ ܒܓܶܕܫ̈ܶܐ ܕܥܒܳܕܐ ܕܚܳܢܘܬܐ، ܠܰܘ ܒܰܠܚܘܕ ܒ admin UI.
nopCommerce 4.90: ܡܳܢܐ ܚܰܕܬܐ ܠܦܳܠܚ̈ܝ ܬܘܣܦ̈ܬܐ
nopCommerce 4.90 ܟܳܘܶܢ ܥܰܠ .NET 9 ܘܡܰܝܬܶܐ ܟܡܐ ܡܝܰܬܪ̈ܢ ܠܦܳܠܚ̈ܝ ܬܘܣܦ̈ܬܐ:
- ܪܶܗܛ .NET 9: ܬܘܣܦ̈ܬܟ ܪ̈ܳܗܛܢ ܥܰܠ ܩܰܠܝܠܐ ܕ.NET ܥܕܰܡܐ ܠܗܳܫܐ — ܡܶܬܗܰܢ̈ܝܳܢ ܡܶܢ ܡܝܰܬܪ̈ܢ ܕ JIT، ܘܣܘܟܳܠ ܟܢܰܢܝܐ ܕ GC، ܘܡܝܰܬܪ̈ܢ ܕܟܘܪ̈ܟܶܐ ܡܶܢ ܢܰܦܫܗܘܢ.
- ܣܘܡܟ C# 13: ܐܶܬܚܰܫܰܚ ܒܟܶܢܫ̈ܶܐ ܕ
params، ܘܩܝ̈ܡܶܐ ܕref struct، ܘܕܝ̈ܠܳܝܳܬܐ ܡܘܦܠ̈ܓܳܢܝܳܬܐ ܒܟܘܕ ܬܘܣܦܬܟ. - ܬܰܠܝ̈ܳܬܐ ܡܚܰܕ̈ܬܳܬܐ ܕ NuGet: ܟܘܡܪ̈ܶܐ ܫܶܬܶܐܣ̈ܝܶܐ (Autofac، FluentValidation، ܘܫܪ.) ܐܶܬܚܰܕܰܬܘ. ܒܚܘܪ ܐܝܠܳܢ ܬܰܠܝ̈ܳܬܐ ܕܬܘܣܦܬܟ.
- IMultiFactorAuthenticationMethod: ܬܘܣܦ̈ܬܐ ܕ MFA ܐܝܬܝܗܶܝܢ ܗܳܫܐ ܣܘܟܳܠܐ ܪܝܫܳܝܐ ܥܰܡ ܩܝܳܡܐ ܕܝܠܗܶܝܢ.
- ܛܘܦܣ ܬܘܣܦܬܐ ܡܝܰܬܪܐ: ܛܘܦܣ ܬܘܣܦܬܐ ܪܘܫܡܳܝܐ ܕ nopCommerce ܒ Visual Studio ܐܶܬܚܰܕܰܬ ܠ4.90 — ܐܶܬܚܰܫܰܚ ܒܶܗ ܐܰܝܟ ܢܘܩܙ ܫܘܪܳܝܟ.
ܠܐܰܝܟܐ ܡܶܢ ܗܳܪܟܐ
ܦܘܠܚܳܢ ܬܘܣܦ̈ܬܐ ܕ nopCommerce ܐܝܬܘܗܝ ܝܘܠܦܳܢܐ ܕܒܳܢܶܐ ܐܘܡܳܢܘܬܐ. ܫܘܩܐ ܕ nopCommerce ܥܝܪܐ ܗܘ ܘܪܳܒܶܐ، ܘܬܘܣܦ̈ܬܐ ܕܒܢ̈ܝܳܢ ܫܰܦܝܪ ܡܰܘܠܕ̈ܢ ܡܰܣܩܳܢܐ ܗܶܦܟܳܝܐ ܒܝܰܕ ܚܘܕ̈ܳܬܶܐ ܘܣܘܡܟܐ. ܒ SplatDev، ܬܘܣܦ̈ܬܐ ܐܝܬܝܗܶܝܢ ܥܒܳܕܰܢ ܪܝܫܳܝܐ — ܚܳܢܘܬܰܢ ܒ store.splatdev.com ܛܳܥܢܐ ܝܰܬܝܪ ܡܶܢ 38 ܬܘܣܦ̈ܬܐ، ܘܗܘܰܝܢ ܫܘܬܳܦܐ ܕܦܘܪ̈ܩܳܢܶܐ ܕܰܗܒܳܢܳܝ̈ܐ ܡܶܢ ܫܢ̈ܝܢ.
ܐܶܢ ܒܳܢܶܐ ܐܰܢ̱ܬ ܥܒܳܕܐ ܕܬܶܓܘܪܬܐ ܐܶܠܶܩܛܪܘܢܳܝܬܐ ܥܰܠ nopCommerce، ܠܐ ܣܢܝܩ ܐܰܢ̱ܬ ܠܡܶܒܢܳܐ ܟܠ ܡܶܕܶܡ ܡܶܢ ܪܝܫܐ. ܟܘܪܳܣܰܢ ܟܳܢܶܫ ܦܘܪ̈ܥܳܢܶܐ ܒܪ̈ܰܙܝܠܳܝܶܐ، ܘܫܘܕܳܪܐ (Correios، JadLog، Braspress)، ܘܫܘܬܳܦ̈ܘܳܬܐ ܕ ERP، ܘܥܒܳܕܘܬܐ ܡܥܳܕܬܐ. ܐܶܢ ܣܢܝܩ ܐܰܢ̱ܬ ܥܰܠ ܡܶܕܶܡ ܕܠܰܝܬ ܠܰܢ، ܒܳܢܶܝܢܢ ܬܘܣܦ̈ܬܐ ܡܥܳܕ̈ܳܬܐ ܐܳܦ.
ܡܛܰܝܰܒ ܐܰܢ̱ܬ ܠܡܶܒܢܳܐ ܐܰܘ ܠܡܰܘܪܳܒܘ ܚܳܢܘܬ nopCommerce ܕܝܠܟ؟ ܟܶܢܫܰܢ ܥܳܒܶܕ ܗܳܕܐ ܡܶܢ ܫܢܰܬ 2009 — ܢܰܓܝܪ ܡܶܢ ܟܠܢܳܫ ܟܡܳܐ ܕܗܘ ܒܟܶܢܫܐ.
ܦܠܘܚ ܥܰܡ ܟܶܢܫ nopCommerce ܕܝܠܰܢ
ܐܰܘ ܥܒܘܪ ܒܟܘܪܳܣ ܬܘܣܦ̈ܬܰܢ: store.splatdev.com