我目前正在努力集成一个基于PHP/MySQL的电子商务网站,我管理与RBS世界支付网关。我的问题是:
一个客户填满了他的购物篮,当他这样做时,内容会被存储在$_SESSION全局数组中,以及存储在cookie中。当客户结帐时,他会被发送到Worldpay页面,输入他的付款细节。我正在使用“支付响应”/callback特性将成功的支付重定向到我自己的页面"confirmation.php",它告诉客户一切都很好,并在后台执行一些数据库查询。
一切都很好!
不过,此时我还希望从$_SESSION数组中清空购物车数据,并去掉cookie。很好,我只是用:
$_SESSION['cart'] = array();
setcookie('cart', '', 0, '/');但这不管用。这与以下事实有关:这个重定向页面的URL实际上是https://secure-test.wp3.rbsworldpay.com/wcc/purchase而不是www.mysite.co.uk/confirmation.php。作为一个测试,我的确认页面回显了phpinfo(),从$_SERVER vars来看,一切似乎都很好,例如:
_SERVER["DOCUMENT_ROOT"] /var/www/vhosts/mysite.co.uk/httpdocs
_SERVER["SCRIPT_FILENAME"] /var/www/vhosts/mysite.co.uk/httpdocs/confirmation.php
_SERVER["SERVER_PROTOCOL"] HTTP/1.0
_SERVER["REQUEST_METHOD"] POST
_SERVER["QUERY_STRING"] installation=[xxxxxx]&msgType=authResult
_SERVER["REQUEST_URI"] /confirmation.php?installation=xxxxxx&msgType=authResult
_SERVER["SCRIPT_NAME"] /confirmation.php
_SERVER["PHP_SELF"] /confirmation.php
_SERVER["HTTP_USER_AGENT"] WJHRO/1.0 (WorldPay Java HTTP Request Object)因此,由于URL指向不同的域,所以我的脚本无法访问$_SESSION和$_COOKIE数据,也不能操作它。我不知道这个Worldpay系统是如何做到的,它不是iframe之类的,但我怀疑它与用户代理-- "WJHRO/1.0 (WorldPay对象)“有关。
有人熟悉这件事吗?我怎么才能避开这一切?
感谢您的阅读!
迈克尔
发布于 2011-06-10 21:08:18
当WorldPay完成处理付款(请记住:您不知道在WorldPay的站点上执行了所有带有卡片详细信息的操作)时,它会向您发送一个POST请求,通知交易结果(接受、拒绝、客户取消等)。这是直接从他们的服务器和,而不是从客户计算机/浏览器,因此,您不能匹配此请求与您现有的结帐会话(我假设您正在做一些电子商务网站)属于客户。
当将客户重定向到WorldPay时,您需要将其他信息与所需的字段一起传递。这样的字段具有MC_前缀,您可以传递其中相当多的字段(我在两年前就这样做了,不记得所有的细节)。
您需要在这些字段中发送足够的信息(但尽可能少地加密它们),因此当来自WorldPay的这样的POST请求到达您的confirmation.php时,您可以提取这些附加字段并恢复会话(查看session_id()和相关函数)或类似的内容(这取决于您如何实现会话处理;如果会话数据存储在DB中-甚至更容易--只要您知道会话id,就可以很容易地模拟会话)并继续签出。
记住,,您的confirmation.php的输出将被发送回WorldPay而不是客户。WorldPay将首先处理该页面,然后将其显示给客户。因此,这个页面应该非常简单(非常基本的界面,否则一些标记可以被WorldPay删除),它应该将您的客户重定向回您的网站(例如,到real_confirmation.php),在那里您将可以完全访问客户会话等,并且您将显示正确的确认页面。您可以使用简单的JavaScript或metatag (例如<meta http-equiv="refresh" content="2;url=http://www.example.com/real_confirmation.php">)实现这种重定向。
您必须对此进行反复检查,因为我已经对其进行了两年多的编码,并且目前没有所有的代码在我身边,而且情况/规则自那以后可能会改变(P.S.我们不再使用WorldPay,因此我无法确定我的代码现在可以100%工作--从那时起,他们可能已经对整个过程进行了更改)。
https://stackoverflow.com/questions/6311727
复制相似问题