ASP. Net Core 3.1 Stripe Payment И RAZOR Страницы добавить запись в БД - PullRequest
0 голосов
/ 23 марта 2020

У меня есть простое приложение ASP. NET Core RAZOR (НЕ MVC), которое добавляет записи в базу данных, прекрасно работает. У меня также есть простое приложение ASP. NET Core MVC, которое добавляет единый платеж с Stripe Checkout, прекрасно работает. Мне нужно объединить их, желательно иметь простую страницу RAZOR, которая записывает в БД и затем вызывает Stripe Checkout сразу после записи записи. Не имеет значения, работает ли он наоборот, когда посредством Stripe производится оплата, а затем происходит запись в БД. Предпочтительно, я хотел бы получить одну кнопку отправки, но если ей нужны две кнопки для создания записи и одна для отправки платежа, нет проблем. Как получить кнопку для запуска обеих подпрограмм ie добавить запись в БД и вызвать подпрограмму оплаты Stripe. Любые указатели будут очень признательны.

ASP. NET Core RAZOR Pages

Create.cs html:

        <div class="form-group">
            <label asp-for="Amtratable.id" class="control-label"></label>
            <input asp-for="Amtratable.id" class="form-control" />
            <span asp-validation-for="Amtratable.id" class="text-danger"></span>
        </div>

        <div class="form-group">
            <label asp-for="Amtratable.surname" class="control-label"></label>
            <input asp-for="Amtratable.surname" class="form-control" />
            <span asp-validation-for="Amtratable.surname" class="text-danger"></span>
        </div> .....

       <div class="form-group">
            <input type="submit" value="Create" class="btn btn-primary" />
        </div>
    </form>    

Create.cshtml.cs:

public class CreateModel : PageModel
{
    private readonly StripeRazorTest.Data.StripeRazorTestContext _context;

    public CreateModel(StripeRazorTest.Data.StripeRazorTestContext context)
    {
        _context = context;
    }

    public IActionResult OnGet()
    {
        return Page();
    }

    [BindProperty]
    public AmtraTestCl AmtraTestCl { get; set; }
    public async Task<IActionResult> OnPostAsync()
    {
        //if (!string.IsNullOrEmpty(Create))
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            _context.AmtraTestCl.Add(AmtraTestCl);
            await _context.SaveChangesAsync();

            return RedirectToPage("./Index");
       }
    }
}

ASP. NET Core MVC

Index.cs html:

@ с использованием (Html .BeginForm ("Index", "Home", FormMethod.Post)) {Name @ Html .TextBoxFor (m => m.Name) @ Html .ValidationMessageFor (m => m.Name) Адрес электронной почты @ Html .TextBoxFor (m => m.Email) @ Html .ValidationMessageFor (m => m.Email) Пятница ночью Взрослые @ Html .TextBoxFor (m => m.FridayAdults) @ Html .ValidationMessageFor ( m => m.FridayAdults)

<div>
    <input type="submit" value="Submit" />
</div> }

 HomeController.cs:

publi c class HomeController: Controller {publi c IActionResult Index () {RegistrationModel model = new RegistrationModel (); обратный просмотр (модель); }

    [HttpPost]
    public IActionResult Index(RegistrationModel model)
    {
        if (ModelState.IsValid)
        {
            List<SessionLineItemOptions> items = new List<SessionLineItemOptions>();

            {
                items.Add(new SessionLineItemOptions
                {
                    Name = "Surname",
                    Description = "The name",
                    Amount = 700,
                    Currency = "gbp",
                    Quantity = 1
                });
            }

            var options = new SessionCreateOptions
            {

                PaymentMethodTypes = new List<string>
                {
                    "card"
                },
                LineItems = items,
                SuccessUrl = "https://localhost:44329/",

                //SuccessUrl = "https://localhost:44318/",
                CancelUrl = "http://localhost:5000/"
            };

            SessionService service = new SessionService();
            Session session = service.Create(options);

            PaymentModel paymodel = new PaymentModel
            {
                ChargeID = session.Id
            };
           return View("Payment", paymodel);
        }

        return View(model);
     }

   public IActionResult Payment(PaymentModel model)
    {
        return View();
    }
} 

}

Payment.cs html:

var stripe = Stripe ('pk_test_wzPMgm92Bipuq1SJohxK3lOK00igaEN4Hs'); stripe.redirectToCheckout ({sessionId: '@ Model.ChargeID',}). then (function (result) {result.error.message = "Упс! Похоже, что-то пошло не так. Повторите попытку позже."});

RegistrationModel.cs:

publi c class RegistrationModel {[Обязательно] publi c int ID {get; набор; }

    [Surname]
    public string Surname{ get; set; }
}

PaymentModel.cs:

publi c class PaymentModel {publi c string ChargeID {get; набор; }}

...