编辑:
阿什利 说:
好的,我查看了 cURL 手册并编写了这个非常简单的脚本来将 POST 值转发到第 3 方结帐。这只是显示结帐页面的内容。URL 地址显示当前正在运行的脚本,而不是转发到第 3 方站点。他们所有相对链接的图形也将不起作用。可以使用 cURL 实现“真实”转发吗?
简短的回答 -不。
使用您描述付款流程的方式,如果您想在场外流程的中间进行操作(自定义 html/消息、验证数据等),那么您需要处理 cURL 允许您执行的整个流程.
使用 cURL,您不会“转发”请求 - 您可以“代理”请求。因此,浏览器 URL 永远不会改变并且相关图形不起作用的事实是意料之中的。使用 cURL 或类似的东西,您永远不会让用户最终用户知道他们甚至正在触摸外部页面。您将在服务器上处理对该外部服务器的所有请求,然后简单地将来自外部服务器的响应显示给您的用户或解析该响应,以便您可以以自定义方式使用来自它的数据。
本质上,这意味着如果secure.wp3.rbsworldpay.com/wcc/purchase
返回一个需要用户进一步交互的表单,您必须在您的服务器上模仿这个表单并显示它。然后当用户提交您的表单时,您再次使用 cURL 向外部服务器发出请求 - 这次是发布用户提交的下一轮数据。例如,让我们说:
secure.wp3.rbsworldpay.com/wcc/purchase
显示购物车
secure.wp3.rbsworldpay.com/wcc/confirm
显示最终确认付款
secure.wp3.rbsworldpay.com/wcc/success
并secure.wp3.rbsworldpay.com/wcc/error
分别显示事务是成功还是失败。
然后,您实际上将需要在外部发出 2 个请求作为交易过程的一部分,可以总结如下:
- 用户在您的站点购物并将商品添加到购物车
- 用户点击结帐,您验证购物车/用户数据
- 如果来自 #2 的数据是有效的,您将数据打包并
secure.wp3.rbsworldpay.com/wcc/purchase
通过 cURL发布到
- 如果来自 #3 的 cURL 响应成功,您可以使用 cURL 响应中的数据构建自己的确认页面并将其显示给用户。
- 用户向您的服务器提交购买确认。
- 您将在#5 中提交到服务器的数据打包并
secure.wp3.rbsworldpay.com/wcc/confirm
通过 cURL 发布。
- 如果来自 #6 的 cURL 响应成功,则将其解析为从外部服务器返回的预期“错误”或“成功”消息,并显示它们或您自己的自定义错误消息。
- 如果出现错误,请冲洗并重复;-)
一般来说,大多数支付处理器都有一个支持这个基本过程的处理选项,通常将易于解析的数据返回为 XML、JSON 或纯文本而不是 HTML。你可能想看看这个。很多时候,他们通常会为各种编程语言构建库,以帮助简化集成过程。
是的,它肯定是......我通常使用curl
扩展来做这样的事情,或者使用curl
. 您可能想让自己更轻松一点,并使用这些类库之一 - 例如Zend_Http_Client
。它不仅支持curl
套接字和代理,还支持。