POST-данные через Ajax в платежный шлюз Яндекса

У меня есть форма, которая размещена так;

<form action="https://money.yandex.ru/eshop.xml" method="post">
    <input name="shopId" value="1234" type="hidden"/>
    <input name="scid" value="4321" type="hidden"/>
    <input name="sum" value="100.50" type="hidden">
    <input name="customerNumber" value="abc000" type="hidden"/>
    <input name="shopArticleId" value="567890" type="hidden"/>
    <input name="paymentType" value="AC" type="hidden"/>
    <input name="orderNumber" value="abc1111111" type="hidden"/>
    <input name="cps_phone" value="79110000000" type="hidden"/>
    <input name="cps_email" value="[email protected]" type="hidden"/>
  <input type="submit" value="Pay"/>
</form>

Это пример из документов Яндекса. . Но моя собственная форма будет выглядеть аналогично. У меня вопрос: как проверить, что sum (сумма денег) совпадает с общей стоимостью предметов?

Для других платежных шлюзов мне удалось добиться этого с помощью ajax. Поэтому сначала отправьте запрос в мою базу данных, а затем перенаправьте (хотя это, наверное, не то слово) на платежный шлюз. И затем, когда ответ возвращается, я могу сравнить его с записью в моей базе данных.

Но как это будет работать здесь? Их шлюз, похоже, не учитывает такую ​​​​обработку токенов.

Забыв о специфике шлюза, можно ли просто «опубликовать» данные с помощью ajax?

ОБНОВЛЕНИЕ

Как насчет использования этого?

$.ajax({ 
        method: 'POST',
        url: 'https://money.yandex.ru/eshop.xml',
        data: {
            shopId: shopId,
            scid: scid,
            etc: etc
        }
    }

person mikelovelyuk    schedule 11.11.2015    source источник
comment
Используйте dataType: 'jsonp' в jQuery AJAX (для перекрестного домена).   -  person Ahsan    schedule 11.11.2015
comment
@Ahsan, но это XML. Не будет конфликтовать?   -  person mikelovelyuk    schedule 11.11.2015


Ответы (1)


Да. можно просто «отправлять» данные через AJAX. Вот небольшой базовый пример.

<form id="exampleForm">

    <input name="name" value="A random name" />
    <input type="submit" value="Post through AJAX">

</form>

<script>
    $( "#exampleForm" ).submit(function( event ) {

      // Stop default form submit
      event.preventDefault();

      //Serialize the form data
      var formData = $(this).serializeArray();

      // Send the data using post
      var posting = $.post( 'HERE THE DESTINATION URL OF THE POST', formData, function(responseData
      {
        //An action when the POST request is done
      }));

    });
</script>

Не забудьте подключить библиотеку JQuery.

ОБНОВЛЕНИЕ Для кросс-браузерного запроса AJAX вам необходимо использовать dataType 'jsonp'. В соответствии с вашим запросом образца вы можете попробовать это:

$.ajax({

    url: 'https://money.yandex.ru/eshop.xml',
    data: {
        shopId: shopId,
        scid: scid,
        etc: etc
    },
    type: 'POST',
    dataType: 'jsonp',
    success: function() 
    { 
        alert('Success callback'); 
    },
    error: function() 
    { 
        alert('Error callback'); 
    }
});     
person S.Pols    schedule 11.11.2015
comment
В чем разница между вашим предложением и чем-то вроде того, что есть в моем обновлении? Нечто подобное используется в другой части базы кода, но URL-адрес указывает на что-то внутреннее. - person mikelovelyuk; 11.11.2015
comment
На самом деле ничего, но я думаю, что вы не обновили вопрос, когда я опубликовал этот ответ. Или, может быть, я забыл обновить его. - person S.Pols; 11.11.2015
comment
Я получаю сообщение об ошибке XMLHttpRequest не может загрузить заголовок «Access-Control-Allow-Origin». Так что здесь нужно решить более глубокую проблему. - person mikelovelyuk; 11.11.2015
comment
Обновил мой ответ, можешь попробовать? - person S.Pols; 11.11.2015