использование формы полосы для обработки платежей в ASP .NET MVC

Я использую полосу для обработки платежей на своем сайте. Чтобы реализовать это, я хочу использовать встроенную платежную форму Stripe, которая называется checkout. До сих пор не хватает документации или актуальных примеров, которые могли бы помочь мне в этом.

В представлении я внедрил форму следующим образом:

<div class="row">
<div class="container col-md-2 col-md-offset-5">
    <h5>Upgrade your account</h5>
    <form action="/Premium/Charge" method="POST">
        <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                data-key="MYKEY"
                data-amount="1000"
                data-name="My Project Name"
                data-description="Premium Account (€10)"
                data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
                data-locale="auto"
                data-zip-code="true"
                data-currency="eur">
        </script>
    </form>
</div>

And my controller action to handle the post:

    [HttpPost]
    [Authorize]
    public ActionResult Charge(string stripeToken, string stripeEmail)
    {
        string apiKey = "MYKEY";
        var client = new Stripe.StripeCustomerCreateOptions();

        // our customer
        client.Email = stripeEmail;
        client.SourceToken = stripeToken;

        // creating our charge
        var charge = new Stripe.StripeChargeCreateOptions();
        charge.Amount = 1000;
        charge.Description = "Premium member charge";
        charge.Currency = "EUR";
        charge.SourceTokenOrExistingSourceId = stripeToken;

        // calling stripe to make the charge, then update users profile
        var chargeService = new Stripe.StripeChargeService();
        Stripe.StripeCharge stripeCharge = new Stripe.StripeCharge();

        // Error arises here
        dynamic response = chargeService.Create(charge);

        if (response.Paid)
        {
            // successful payment
            ViewBag.Status = "success";
            return View("Result");
        }

        ViewBag.Status = "unsuccesful";
        return View("Result");
    }

РЕШЕНО.


person Gareth Quirke    schedule 07.03.2017    source источник
comment
Можете ли вы собрать все аргументы, которые передаются в форму, чтобы убедиться, что они действительно передаются вместе с запросом? Вместо того, чтобы просто пытаться их использовать?   -  person korben    schedule 08.03.2017
comment
Я проверил, используя точный код, который у вас есть в сигнатуре метода просмотра и действия, и все работает хорошо. Вам не хватает декоратора [HttpPost] в методе?   -  person Ashley Lee    schedule 08.03.2017
comment
Я забыл включить его на самом деле в фрагмент кода, он находится над ним. Есть ли способ проверить, был ли ответ от этого контроллера успешным?   -  person Gareth Quirke    schedule 08.03.2017
comment
@korben Я поставлю точку останова и посмотрю   -  person Gareth Quirke    schedule 08.03.2017


Ответы (2)


Я использую этот код для тестирования, и он работает без проблем:

public class CreditCardController : Controller
{
    public ActionResult Charge()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Charge(string stripeToken, string stripeEmail)
    {
        var myCharge = new StripeChargeCreateOptions();

        // always set these properties
        myCharge.Amount = 1000;
        myCharge.Currency = "eur";

        myCharge.ReceiptEmail = stripeEmail;
        myCharge.Description = "Test Charge";
        myCharge.SourceTokenOrExistingSourceId = stripeToken;
        myCharge.Capture = true;

        var chargeService = new StripeChargeService();
        StripeCharge stripeCharge = chargeService.Create(myCharge);

        return View();
    }
}

Посмотреть код. Ключ — это демонстрационный ключ из документации Stripe. Номер тестовой кредитной карты, которую я использую, — 4242424242424242.

<div class="row">
    <div class="container col-md-2 col-md-offset-5">
        <h5>Upgrade your account</h5>
        <form action="/CreditCard/Charge" method="POST">
            <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                    data-key="pk_test_6pRNASCoBOKtIshFeQd4XMUh"
                    data-amount="1000"
                    data-name="My Project Name"
                    data-description="Premium Account (€10)"
                    data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
                    data-locale="auto"
                    data-zip-code="true"
                    data-currency="eur">
            </script>
        </form>
    </div>
</div>
person Ashley Lee    schedule 08.03.2017
comment
Я также пытаюсь сделать то же самое, но здесь я получаю одну проблему, связанную с сборкой, в строке StripeCharge stripeCharge = chargeService.Create(myCharge); проблема заключается в том, что не удалось загрузить файл или сборку «Newtonsoft.Json, версия = 9.0.0.0, культура = нейтральная, PublicKeyToken = 30ad4fe6b2a6aeed» или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040). не могли бы вы помочь мне с этим вопросом? - person Madhav; 19.01.2018
comment
Интеграция Stripe Payment в веб-формы Asp.net и его 100-процентно рабочий код, а также вы можете загрузить приложение code2night.com/Blog/MyBlog/ - person Shubham; 11.09.2020

Удалите строку, прежде чем делать динамический ответ, который должен работать нормально. Вы делали два запроса к серверу чередования.

person Community    schedule 08.03.2017
comment
Интеграция Stripe Payment в веб-формы Asp.net и его 100-процентно рабочий код, а также вы можете загрузить приложение code2night.com/Blog/MyBlog/ - person Shubham; 11.09.2020