【发布时间】:2014-02-19 17:19:10
【问题描述】:
我很难理解通过 cURL 发送到 SagePay 的参数编码。根据他们的文档,所有参数都需要进行 URL 编码。在将参数作为字符串传递给 SagePay 之前,我在参数上使用了 PHP 的 urlencode 方法。以下是部分字符串的示例:-
$data = "BillingFirstnames=Jos%C3%A9+Luis&BillingSurname=Test" ...
但是,它无法在 SagePay 服务器网站上正确呈现带重音的“é”:-
Firstname: José
SagePay 的文档指出,您可以将重音字符作为计费名字(等)的一部分传递,并且该参数应进行 URL 编码。
我们的 cURL 请求看起来像这样(如果这有帮助的话):-
// Set the URL
curl_setopt($cs, CURLOPT_URL, $url);
// No headers, please
curl_setopt ($cs, CURLOPT_HEADER, 0);
// It's a POST request
curl_setopt ($cs, CURLOPT_POST, 1);
// Set the fields for the POST
curl_setopt ($cs, CURLOPT_POSTFIELDS, $data);
// Return it direct, don't print it out
curl_setopt($cs, CURLOPT_RETURNTRANSFER,1);
// This connection will timeout in 30 seconds
curl_setopt($cs, CURLOPT_TIMEOUT,30);
curl_setopt($cs, CURLOPT_SSL_VERIFYPEER, FALSE);
$response = preg_split('/$\R?^/m',curl_exec($cs));
有关如何解决此问题以使 SagePay 上的名字显示为“José”的任何建议?
【问题讨论】:
-
Sage Pay 仅在内部处理扩展的 ASCII/ANSI。您的重音字符将从它们的 UTF-8 编码转换为它们的单字节 ANSI 等价物。当然,这意味着将支持非常有限的字符范围 - 主要是带重音的西方字母。
标签: php curl url-encoding opayo