RBS Worldpay(HTML重定向)中的付款响应(回拨)功能无法使用我的Cookie和会话数据

时间:2011-06-10 20:28:52

标签: php worldpay

我目前正致力于将我管理的基于PHP / MySQL的电子商务网站与RBS Worldpay支付网关集成。这是我的问题:

客户填写他的购物篮,当他这样做时,内容将存储在$_SESSION全局数组中,并存储在cookie中。当客户结账时,他会被发送到Worldpay页面以输入他的付款细节。我正在使用“付款响应”/回调功能将成功付款重定向到我自己的页面,“confirmation.php”,它告诉客户一切正常,并在后台进行一些数据库查询。

一切都很好!

HOWEVER ,此时我还希望清空$_SESSION数组中的购物车数据以及摆脱cookie。很好,我只是用:

$_SESSION['cart'] = array();
setcookie('cart', '', 0, '/');

但这不起作用。这与此重定向页面的网址实际为https://secure-test.wp3.rbsworldpay.com/wcc/purchase而非www.mysite.co.uk/confirmation.php的事实有关。 作为测试,我让我的确认页面回显了phpinfo(),并且从$ _SERVER变量,一切似乎都很好,例如:

_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 Java HTTP Request Object)”

有人熟悉这个吗?我怎么能绕过这个?

感谢阅读!

迈克尔

1 个答案:

答案 0 :(得分:2)

当WorldPay完成处理付款时(记住:您不知道客户在那里做了什么,因为所有带有卡详细信息的操作都是在WorldPay的网站上执行的),它会向您发送 POST 请求,告知您的结果交易(接受,拒绝,客户取消等)。它直接从他们的服务器和而不是来自客户计算机/浏览器完成,因此您无法将此请求与您现有的结帐会话(我假设您在这里做一些电子商务网站)相匹配顾客。

将客户重定向到WorldPay时,您需要将附加信息与必填字段一起传递。这些字段有 MC _ 前缀,您可以传递相当多的字段(我在2年前做过这个并且不记得所有细节)。

您需要在这些字段中发送足够的信息(但尽可能少地加密它们),以便当来自WorldPay的此类POST请求到达您的confirmation.php时,您将提取这些其他字段并恢复会话(查看< strong> session_id()和相关函数)或类似的东西(取决于您如何实现会话处理;如果会话数据存储在数据库中 - 这更容易 - 您可以轻松模拟会话,只要你知道会话ID)并继续结帐。

请注意,confirmation.php的输出将被发送回WorldPay,而不是客户。 WorldPay将首先处理该页面,然后将其显示给客户。因此,此页面应该非常简单(非常基本的界面,否则某些标签可以被WorldPay删除),它应该只是将您的客户重定向回您的网站(例如,real_confirmation.php),您可以在那里完全访问客户会话等,您将显示正确的确认页面。您可以使用简单的JavaScript或元标记(例如<meta http-equiv="refresh" content="2;url=http://www.example.com/real_confirmation.php">)实现此类重定向。

你必须仔细检查这个,因为它已经超过2年,因为我编码了这个并且目前没有我的所有代码和情况/规则可能会改变从那时起(PS我们不再使用WorldPay因此我不能确认我的代码现在100%工作 - 从那时起他们可能已对整个过程进行了更改。)