#c# #blazor-webassembly #payment-processing #razor-class-library
Вопрос:
Мое намерение состоит в том, чтобы создать службу обработки платежей, которую я могу разместить на любом веб-сайте. Моя проблема заключается в введении настроек, таких как открытый ключ Stripe, идентификатор продавца Paypal и конкретный URL-адрес на сервере для отправки токена и взимания платы с stripe.
Это упрощено для этого вопроса (и Payments
проекты в конечном итоге будут dll), но структура проекта выглядит так:
Веб-приложение-это ASP.NET Основной размещенный шаблон проекта Blazor WASM. WebApp.Client
имеет зависимости от Payments.Shared
и в то Payments.Ui
время WebApp.Server
Payments.Backend
как также зависит от (для моделей с полосовым зарядом и т. Д.).
Поскольку я хочу использовать эту платежную службу на любом сайте, и поскольку они будут разными для каждого сайта, мне нужно будет указать реквизиты PaymentSettings.cs
при запуске.
Есть ли способ сделать это? Я планирую использовать только веб-сайты Blazor WASM, если это имеет значение.
Я чувствую, что, возможно, смогу передать эти настройки в метод WebApp.Client
сквозного ввода string[] args
Program.cs
Main
:
public static async Task Main(string[] args)
{
//omitted for brevity
//relevant line here
builder.Services
.AddSingleton(sp => new Payments.Shared.Infrastructure.PaymentSettings(args));
await builder.Build().RunAsync();
}
а затем оттуда в конструктор для PaymentSettings.cs
:
public class PaymentSettings
{
public PaymentSettings(string[] args)
{
//set props from args
}
public string PaypalMerchantId { get; set; }
public string StripeKey { get; set; }
public string ChargeStripeUrl { get; set; }
}
Но я не вижу никакого способа сделать это из WebApp.Server
проекта.
Возможно, я переосмысливаю это, я имею в виду, что если я смогу, по крайней мере, ввести базовый URL WebApp.Server
в Payments.Shared
проект, я смогу затем выполнить запрос get для остальной его части.
Любая помощь очень ценится.
Ответ №1:
Я слишком много думал об этом. Поскольку это все общедоступная информация, я просто жестко закодировал информацию Program.cs
в WebApp.Client
:
public static async Task Main(string[] args)
{
//omitted for brevity
string stripeKey = "Hello dolly";
string paypalId = "How ye be";
string chargeStripeUrl = "https://all-about-dolly.com/chargeIt";
//relevant line here
builder.Services.AddSingleton(sp => new PaymentSettings
{
StripeKey = stripeKey,
PaypalMerchantId = paypalId,
ChargeStripeUrl = chargeStripeUrl
});
await builder.Build().RunAsync();
}
Возможно, это не лучшая практика, но для меня это работает.