xmlhttprequest, чтобы получить ключ шифрования + HTML-форму - что я делаю не так - PullRequest
1 голос
/ 03 апреля 2012

Завершающим этапом моего проекта является подключение моего веб-сайта к банковскому платежному шлюзу, чтобы люди могли покупать вещи с помощью кредитных карт, но без хранения данных кредитной карты на моем сайте.Я был в Google и stackoverflow и думаю, что я на правильном пути, но, очевидно, что-то делаю не так.

Идея состоит в том, что при открытии формы происходит http-сообщение, которое отправляет набор параметров вшлюз, который отвечает хорошей длинной строкой шифрования, которую я использую для отправки фактического заказа.Я был бы признателен за некоторую помощь, потому что теперь я застрял.

<form method="post" action="/A55D74/fwcdirect.nsf/encrypt?OpenForm&amp;Seq=1" name="_encrypt">
<input type="hidden" name="__Click" value="0" /><form action="https://encryption-gateway-url.e" method="post">
<script>
  var url = "valid-url"; 
  var params = "clientid=12&password=xyz&chargetype=Auth&currency=42&total=1.00";
  xmlhttp = new XMLHttpRequest(); 
  xmlhttp.open("post", url, true); 
  xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
  xmlhttp.send(params); 
  return xmlhttp.responseText;
</script>
<input type="hidden" name="returnurl" value="http://www.mywebsite.co.uk/"> 
<input type="hidden" name="merchantdisplayname" value="Website + Shopping cart">
<input type="submit" value="10.00">
</form>

9 апреля: я до сих пор не решил проблему, хотя получаю сообщение об ошибке от сервера шлюза, яв настоящее время изучаем dojo, который выглядит очень многообещающе и в качестве бонуса поставляется с предустановленным клиентом и сервером Lotus Notes (Domino 8.5.1 имеет dojo 1.3.2).

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

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

Т.е. клиент загружает окончательный вариантстраница оплаты;перед тем, как он будет возвращен с вашего сервера, вы отправляете свои платежные реквизиты в банк, получаете зашифрованный ответ и добавляете его в качестве скрытого поля в форме, которую пользователь фактически отправит на оплату.

Это должно быть способомчтобы пользователи не возились с параметрами клиент / количество, они никогда не должны их видеть.

(Это похоже на EPDQ, если это так, то это определенно то, что вы должны делать, поскольку я использую его сам!)

0 голосов
/ 03 апреля 2012

XMLHttpRequest - это метод обратного вызова, поэтому он должен создавать функцию обратного вызова для обработки responseText.

, например

  var url = "valid-url"; 
  var params = "clientid=12&password=xyz&chargetype=Auth&currency=42&total=1.00";
  xmlhttp = new XMLHttpRequest(); 
  xmlhttp.open("post", url, true); 
  xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 

  // add this line
  xmlhttp.onreadystatechange = callback

  xmlhttp.send(params); 

  // remove this line
  //return xmlhttp.responseText;

// add a new function
function callback(req, id) {  
    if(req.readyState == 4 && req.status == 200) {  
        alter(req.responseText);  
    }  
}  
...