我很难理解通过cURL发送给SagePay的参数编码。根据他们的文档,所有参数都需要进行URL编码。我在我的参数上使用PHP的urlencode方法,然后将它们作为字符串传递给SagePay。以下是字符串部分的示例: -
$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é”?
答案 0 :(得分:3)
您可以通过utf-8
标头设置http
内容类型。例如:
curl_setopt($cs, CURLOPT_HTTPHEADER,
array('Content-Type: application/x-www-form-urlencoded;charset="utf-8"')
);
你已经在你的问题中提到了php urlencode
,但我没有在你的代码中看到它。所以也要再添加一次。
$post = "age=15&name=".urlencode("José");