【发布时间】:2014-02-20 13:23:30
【问题描述】:
我在将 Sagepay InFrame Server 与 PHP 集成时遇到了很多麻烦,因为没有可用于新协议 (v3) 的集成工具包。我有 v2.23 的旧工具包,但其中的大部分代码已被弃用。
目前,我成功从 Sagepay 服务器服务器检索 OK 状态的唯一方法是拥有一个表单,其中包含 Sagepay 所需的隐藏值集合,包括加密字段,并使用服务器 URL 作为形成动作。这在浏览器选项卡中为我提供了“OK”状态和 SecurityKey 等,但它在浏览器选项卡中没有多大用处,因为我需要在我的服务器上返回 POST 响应,而不是在他们的服务器上。
为此,我选择了 curl。我将 curl_exec 的返回值保存在一个名为 $rawresponse 的变量中,并在每次尝试后转储响应,就目前而言,$rawresponse 以虚假布尔值的形式返回:
$curlSession = curl_init();
curl_setopt ($curlSession, CURLOPT_URL, $url);
curl_setopt ($curlSession, CURLOPT_HEADER, 0);
curl_setopt ($curlSession, CURLOPT_POST, 1);
$data['Crypt'] = new CurlFile('filename.png', 'image/png', 'filename.png');
curl_setopt ($curlSession, CURLOPT_POSTFIELDS, $data);
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curlSession, CURLOPT_TIMEOUT,30);
curl_setopt($curlSession, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curlSession, CURLOPT_SSL_VERIFYHOST, 0);
$rawresponse = curl_exec($curlSession);
现在你可以在这里看到,我必须强制 Crypt 值是 CurlFile 类型,我认为这会破坏请求,但是如果我不这样做,我会收到以下错误:
“不推荐使用@filename API 进行文件上传。请改用CURLFile 类”
我只能从中确定加密被误认为是文件(可能是因为字符串以 @ 开头),并且为了应对这种情况,我试图将其强制为图像。
所以我的问题是 - 有没有一种特殊的方式来使用 CurlFile 以便可以理解加密字符串?有没有更好的方法将此功能与任何人都知道的 Sagepay 集成?这确实是一个非常令人困惑的系统,而且由于完全缺乏示例而使良好的文档失望。
【问题讨论】: