Правильный способ размещения массива объектов с помощью формы post - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь использовать API платежного сервиса в своем приложении и следую документации, представленной на сайте.Согласно документации, тело POST должно выглядеть следующим образом:

api_hash=38be425a-63d0-4c46-8733-3e9ff662d62d
&hash=ac0945d82b8589959b5f4ffafcc1a6c5983e82b8b4094c377a7b9c43d4a432bc
&order_id=2845
&amount=15
&currency=EUR
&email=stefan@my-test-store.com
&url_failure=http://my-test-store.com/order/fail
&url_ok=http://my-test-store.com/order/success
&items=[{"sku":"450","name":"Test Item","amount":"15","type":"item_type","qty":"1","price":15,"id":"5619","url":"http://example.com/products/item/example-item-name-5619"}]

Мне удалось успешно сделать запрос на публикацию с почтальоном, однако я не совсем понимаю, что такое "items" в теле сообщения, так какмассив объектов.Моя HTML-форма выглядит следующим образом:

<form method="post" action="@ViewBag.G2AConfig.PostUrl" id="g2apaymentform">
    <!--PayPal Settings-->
    <input type="hidden" name="api_hash" value="@ViewBag.G2AConfig.ApiHash" />
    <input type="hidden" name="hash" value="@ViewBag.Hash" />
    <input type="hidden" name="order_id" value="@ViewBag.OrderId" />
    <input type="hidden" name="amount" value="@Model.Total" />
    <input type="hidden" name="currency" value="USD" />
    <input type="hidden" name="email" value="@ViewBag.G2AConfig.MerchantEmail" />
    <input type="hidden" name="url_failure" value="@ViewBag.UrlFailure" />
    <input type="hidden" name="url_ok" value="@ViewBag.G2AConfig.ReturnUrl" />

    @foreach (var item in Model.Items)
    {
        <input type="hidden" name="items[@index][sku]" value="@item.Product.GameAccountId" />
        <input type="hidden" name="items[@index][name]" value="@item.Product.Rank.Name" />
        <input type="hidden" name="items[@index][amount]" value="@item.Product.MarketPrice" />
        <input type="hidden" name="items[@index][qty]" value="1" />

        index = index + 1;
    }
</form>

Я использую сообщение Ajax для выполнения запроса, который выглядит следующим образом:

event.preventDefault(); //prevent default action 
                    var post_url = $(this).attr("action"); //get form action url
                    var request_method = $(this).attr("method"); //get form GET/POST method
                    var form_data = $(this).serialize(); //Encode form elements for submission

                    $.ajax({
                        url: post_url,
                        type: request_method,
                        data: form_data
                    }).done(function (response) { //
                        $("#server-results").html(response);
                    });

Это не работает, и я получаю неверный ответ об ошибкес сервера.Как правильно отправить форму с массивом объектов?

1 Ответ

0 голосов
/ 18 сентября 2018

Почему вы создаете форму с предполагаемыми объектами перед публикацией?

Если нет другой реальной причины, кроме публикации значений, тогда я предлагаю вам построить данные AJAX с помощью массива javascript или PlainObjectтак как это два других возможных типа данных для параметра данных.В настоящее время вы используете сериализованную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...