Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF中支持bean的POS支付_Jsf_Payment Processing - Fatal编程技术网

JSF中支持bean的POS支付

JSF中支持bean的POS支付,jsf,payment-processing,Jsf,Payment Processing,我想实现对虚拟POS机的POST呼叫,以便进行卡支付处理。POS只是银行提供的一个服务器程序,必须通过包含交易数据的表单进行访问。这可以通过组合一个表单、方法post和一组隐藏参数来完成,然后将输出定向到一个新窗口(这是必需的,因为从这一点上来说,银行软件控制了)。 但是,为了安全问题,我想从支持bean发出POST调用。 因此: facelet中的按钮调用RequestScope bean中的方法。这个bean可以在会话中访问事务的数据 豆子可以做一些东西 在该方法中,我可以打开一个URLCo

我想实现对虚拟POS机的POST呼叫,以便进行卡支付处理。POS只是银行提供的一个服务器程序,必须通过包含交易数据的表单进行访问。这可以通过组合一个表单、方法post和一组隐藏参数来完成,然后将输出定向到一个新窗口(这是必需的,因为从这一点上来说,银行软件控制了)。 但是,为了安全问题,我想从支持bean发出POST调用。 因此:

  • facelet中的按钮调用RequestScope bean中的方法。这个bean可以在会话中访问事务的数据
  • 豆子可以做一些东西
  • 在该方法中,我可以打开一个URLConnection,添加参数,然后调用银行的程序(我假设它是一个servlet)
  • 不管这个servlet的输出是什么,它都必须重定向到客户端的一个新窗口。这个新窗口将包含身份验证和真正的支付内容,但它是银行的软件
  • 使用JSF实现该行为的正确模式是什么


    提前感谢。

    我想我现在明白了,您希望在JSF应用程序中集成BankServlet功能,但不想为PCI遵从性操心

    重定向是一个HTTP服务器响应代码,它指定了一个url来执行GET-on,因此您无法重定向表单帖子的响应

    您也不希望通过编程将此POST请求从服务器端传递给BankServlet并呈现收到的响应,因为您已经启动了一个与BankServlet的单独会话,而不是用户和web应用程序之间存在的会话。这实际上是一个严重的安全问题

    除非服务器处理与银行Servlet的所有HTTP通信,否则不能通过JSF启动银行Servlet会话

    在您的场景中,我这样做的方式是使用Javascript打开一个带有常规HTML表单的新窗口,并将表单的操作设置为bankservlet URL,并使该表单的初始输入与HTTP post所需的参数名称匹配。提交此HTML表单时,SSL证书将与用户浏览器协商,POST响应将在不涉及web应用程序的情况下呈现。客户端将维护两个独立的会话,一个用于应用程序的会话,另一个用于银行Servlet的会话


    这是一种安全的方法,不会对您的web应用程序提出任何PCI遵从性要求。

    我不确定目标是什么。银行网络软件“必须控制”,但您还想从服务器端控制它吗?当您向银行服务器提交表单POST时,是否还未提交付款?没有办法在POST中传递身份验证主体和支付信息吗?发布到银行servlet的表单只传递金额、订单id和一些可选数据。此调用的输出必须重定向到新窗口。在该窗口中,身份验证、卡插入以及最终付款都将进行。所以,我的应用程序不需要存储(甚至读取)卡信息。你说得对。所有这些都是由银行自己设计的,以避免在客户端应用程序中实现PCI功能。你说话的方式是正常的(也是简单的)方式。如果我想从支持bean执行此操作,是因为我不希望从页面源代码中看到params和bankservlet url本身。参数是隐藏的,但任何人都可以查看参数,包括为该事务生成的安全密钥。这不是一个更糟糕的安全漏洞吗?@Carlos可能,但只有客户端计算机才会收到身份验证密钥。我可以用同样的理由登录银行的web应用程序,在家里的电脑上查看我的支票账户余额。区别在于,如果在银行应用程序上使用SSL证书,则只有银行应用程序和我的浏览器才能读取该身份验证密钥或信用卡号。如果有人监视我的网络流量,它将被加密。续。。。。。。cont我同意从服务器与银行进行所有通信是最好的方法,但是您的应用程序需要符合PCI标准,因为信用卡详细信息将传递给您。好的,我们同意,我将使用一个表单实现它,在空白窗口中打开。只是一点,当我说安全密钥时,我指的不是NT SSL,而是从交易数据生成的密钥:订单id、金额等+密钥,然后通过SHA加密。此生成的密钥绑定到此特定事务,并且它是表单中的参数。任何人都可以复制并重新提交此表格。银行servlet可能会考虑这种重试,但如果有机会,我会感到不舒服。