Ошибка при создании клиента для оплаты Stripe - PullRequest
0 голосов
/ 05 июля 2018

У меня есть приложение электронной коммерции ASP .NET Core MVC, в котором я пытаюсь осуществлять платежи с помощью Stripe. Я реализовал решение, описанное в этом руководстве , но по какой-то причине я получаю ошибку Stripe.StripeException: 'Cannot charge a customer that has no active card' в методе оплаты, который вызывается, когда пользователь инициирует платеж.

Проблема, по-видимому, вызвана тем фактом, что электронное письмо с полосой и маркер полосы, которые являются двумя параметрами, которые фактически передаются в метод начисления, получают нулевые аргументы. Я не уверен, почему эти переменные получают нулевые значения при вызове функции, так как я выполнил все шаги, описанные в руководстве по полосе.

Я использовал как тестовые, так и живые секретные и публикуемые ключи с панели инструментов полосы и правильно включил их в файл jset appsettings. Код из соответствующих файлов приведен ниже. Что может быть причиной этой ошибки здесь?

действие регулятора заряда полосы

public IActionResult Charge(string stripeEmail, string stripeToken)
        {
            var customerService = new StripeCustomerService();
            var chargeService = new StripeChargeService();

            var customer = customerService.Create(new StripeCustomerCreateOptions
            {
                Email = stripeEmail,
                SourceToken = stripeToken
            });

            var charge = chargeService.Create(new StripeChargeCreateOptions
            {
                Amount = 500,
                Description = "ASP .NET Core Stripe Tutorial",
                Currency = "usd",
                CustomerId = customer.Id
            });

            return View();
        }

appsettings.json

"Stripe": {
    "SecretKey": "sk_test...",
    "PublishableKey": "pk_test..."
  }

страница просмотра стоимости

@using Microsoft.Extensions.Options
@inject IOptions<StripeSettings> Stripe

@{
    ViewData["Title"] = "MakePayment";
}

<form action="/Order/Charge" method="post">
    <article>
        <label>Amount: $5.00</label>
    </article>
    <script src="//checkout.stripe.com/v2/checkout.js"
            class="stripe-button"
            data-key="@Stripe.Value.PublishableKey"
            data-locale="auto"
            data-description="Sample Charge"
            data-amount="500">
    </script>
</form>
<h2>MakePayment</h2>

Класс настроек полосы

public class StripeSettings
    {
        public string SecretKey { get; set; }
        public string PublishableKey { get; set; }
    }

Startup.cs

       public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("Cn")));

            services.AddIdentity<ApplicationUser, IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

            // Add application services.
            services.AddTransient<IEmailSender, EmailSender>();
            services.AddDbContext<wywytrav_DBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Cn")));
            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
            services.AddScoped(sp => ShoppingCart.GetCart(sp));
            services.AddScoped<SignInManager<ApplicationUser>, SignInManager<ApplicationUser>>();
            services.AddTransient<IOrderRepository, OrderRepository>();
            services.AddMvc();
            services.AddMemoryCache();
            services.AddSession();

            services.Configure<StripeSettings>(Configuration.GetSection("Stripe"));//stripe configuration
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {

            if (env.IsDevelopment())
            {
                app.UseBrowserLink();
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();
            app.UseSession();
            app.UseAuthentication();
            StripeConfiguration.SetApiKey(Configuration.GetSection("Stripe")["SecretKey"]);
}
...