SagePay 表单 - Success/Failure Url 编码为 RFC1738 时失败
SagePay Form - Success/Failure Url failing when encoded to RFC1738
我们刚刚升级到 v3.0,同时重构了我们的代码。
在这样做的同时,我们注意到当使用 http_build_query
时,它采用关联数组并将其转换为 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.whosebug.com%3Fa%3Da%26b%3Db&FailureUrl...
SagePay:
&VendorTxCode=Test&SuccessUrl=http://www.whosebug.com?a=a&b=b&FailureUrl...
如果 SagePay 遵循 RFC1738,那么对 URL 进行编码应该可以吗?还是因为字符串是加密的,这意味着它并不重要?
有什么想法吗?
谢谢
加文
你是对的。由于成功/失败 URL 在 Crypt 字段中加密,因此无需对其进行编码。
我们刚刚升级到 v3.0,同时重构了我们的代码。
在这样做的同时,我们注意到当使用 http_build_query
时,它采用关联数组并将其转换为 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.whosebug.com%3Fa%3Da%26b%3Db&FailureUrl...
SagePay:
&VendorTxCode=Test&SuccessUrl=http://www.whosebug.com?a=a&b=b&FailureUrl...
如果 SagePay 遵循 RFC1738,那么对 URL 进行编码应该可以吗?还是因为字符串是加密的,这意味着它并不重要?
有什么想法吗?
谢谢
加文
你是对的。由于成功/失败 URL 在 Crypt 字段中加密,因此无需对其进行编码。