xmlhttprequest获取加密密钥+html表单-我做错了什么

xmlhttprequest to get encryption key + html form - what am I doing wrong

本文关键字:错了 什么 表单 获取 加密 密钥 +html xmlhttprequest      更新时间:2023-09-26

我的项目的最后阶段是将我的网站连接到银行支付网关,允许人们使用信用卡购买东西,但不在我的网站上存储任何信用卡数据。我上过谷歌和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>

4月9日:我仍然没有解决这个问题,尽管我从网关服务器得到了错误响应,我目前正在探索dojo,它看起来很有前景,作为奖励,它预装了Lotus Notes客户端&服务器(Domino 8.5.1具有dojo 1.3.2)。

我的猜测是,你应该在服务器上这样做,而不是在同源策略阻止你将数据发布和读取到不同域的客户端上。

即,客户加载最终付款页面;在从服务器返回之前,您将账单详细信息发布到银行,获得加密的响应,并将其作为隐藏字段附加到用户实际提交的表单中进行支付。

这应该是一种防止用户篡改客户端/金额参数的方法,他们根本不应该看到它们。

(这看起来像EPDQ,如果是的话,那肯定是我自己使用它时你应该做的!)

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);  
    }  
}