【问题标题】:xmlhttprequest to get encryption key + html form - what am I doing wrongxmlhttprequest 获取加密密钥 + html 表单 - 我做错了什么
【发布时间】:2012-04-17 07:11:00
【问题描述】:

我项目的最后阶段是将我的网站连接到银行支付网关,以允许人们使用信用卡购物,但无需在我的网站上存储任何信用卡数据。我一直在使用 Google 和 stackoverflow,并认为我在正确的轨道上,但显然做错了什么。

这个想法是,当表单打开时,会发生一个 http-post,它将一组参数发送到网关,网关以一个漂亮的长加密字符串作为响应,我用它来提交实际订单。我很感激这里的一些帮助,因为我现在很困惑。

<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)。

【问题讨论】:

  • 如下所述,解决方案是使用 java 后端代理并使用 httpURLconnection 打开到 EPDQ CPI 的连接。它工作了一年多,但现在他们想改用 NetPay grrr ..

标签: java javascript xmlhttprequest http-post httpurlconnection


【解决方案1】:

我的猜测是您应该在服务器上执行此操作,而不是在同源策略阻止您将数据发布和读取到不同域的客户端中。

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

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

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

【讨论】:

  • 很好,epdq 很复杂,因为该站点在 Lotus Domino 上运行,这使得所有示例 perl、asp 和 php 脚本都没有帮助。
  • 终于用一个java代理用httpurlconnection解决了。我确实设法使用 lotusscript 代理获取 epdq 加密密钥以发布到服务器,但只有 java 允许您捕获结帐代码中的响应。
【解决方案2】:

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

【讨论】:

  • XMLHttpRequest不会停下来等待responseText从服务器端回来,在xmlhttp.send(params)之后,服务器端会调用你指定的onreadystatechange函数来处理responseText。
  • 谢谢,仍然无法正常工作,但那是因为客户端正在尝试运行脚本,但您的更改很有帮助。
  • 我已将此标记为答案,尽管最终无法使用 javascript/xmlhttprequest,只是无法使其正常工作。我终于使用 java 代理解决了这个问题,该代理使用 httpurlconnection 打开一个套接字。
猜你喜欢
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
相关资源
最近更新 更多