2

我们只是升级到 v3.0,同时重构我们的代码。

在这样做的同时,我们注意到当使用http_build_querywhich 采用关联数组并将其转换为 RFC1738 有效 URL 时,SagePay 失败并出现以下错误:

The SuccessURL format is invalid

提交到 SagePay 端点的表单的 enctype 为application/x-www-form-urlencoded.

但是...如果我们手动构建要加密的字符串,请执行以下操作:

$tmp = '';
foreach ($crypt_store as $key => $value) {
    $tmp .= sprintf('&%s=%s', $key, $value);
}

有用...

现在,据我了解 RFC1738,如果 url 中存在 url,则应该对其进行编码,即

RFC1738:

&VendorTxCode=Test&SuccessUrl=http%3A%2F%2Fwww.stackoverflow.com%3Fa%3Da%26b%3Db&FailureUrl...

贤者支付:

&VendorTxCode=Test&SuccessUrl=http://www.stackoverflow.com?a=a&b=b&FailureUrl...

当然,如果 SagePay 遵循 RFC1738,对 URL 进行编码应该可以吗?还是因为字符串是加密的,这意味着它并不重要?

有什么想法吗?

谢谢

加文

4

1 回答 1

1

你是对的。因为成功/失败 URL 在 Crypt 字段中被加密,所以不需要对它们进行编码。

于 2015-04-01T13:31:33.743 回答