2015-11-11 2 views
0

У меня есть форма, размещенная как таковая;Данные 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> 

Это пример из the Yandex docs. Но моя собственная форма будет похожей. Вопрос, который у меня есть, как мне проверить, что sum (сумма денег) совпадает с общей стоимостью предметов?

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

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

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

UPDATE

Что об использовании этого?

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

Использовать dataType: 'jsonp' в jQuery AJAX (для кросс-домена). – Ahsan

+0

@ Ахсан, но это XML. Не будет ли это противоречить? – mikelovelyuk

ответ

0

Да. возможна только «запись» данных через 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> 

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

UPDATE Для кросс-просмотра запроса 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'); 
    } 
});  
+0

В чем разница между вашим предложением и чем-то вроде того, что в моем обновлении? Нечто похожее используется в другой части базы кода, но URL-адрес - что-то внутреннее. – mikelovelyuk

+0

На самом деле ничего, но я думаю, что вы не обновили вопрос, когда я отправил этот ответ. Или, может быть, я забыл его обновить. –

+0

Я получаю сообщение об ошибке XMLHttpRequest не может загрузить Нет заголовка «Access-Control-Allow-Origin». Поэтому здесь есть более глубокая проблема. – mikelovelyuk

Смежные вопросы