Моей реализации SagePay уже сейчас работает нормально некоторое время, однако в последнее время пользователей, которые имеют% 27 символ («) была возвращается с ошибкой:SagePay характера (% 27) UrlEncode вопросы
» Invalid: 3035 : Недопустимый формат VendorTxCode. '
В настоящее время я URLEncoding фамилию, прежде чем отправить его в мой createVendorTxCode функции:
$encodedSurname = urlencode(Input::get('BillingSurname'));
// Create a custom VendorTxCode. This must be unique every time.
$VendorTxCode = $this->createVendorTxCode($encodedSurname, $ids);
...
public function createVendorTxCode($lastName, $ids) {
$lesson_ids = str_replace(',', '-', $ids);
$VendorTxCode = $lastName;
$VendorTxCode .= date("-YmdHis-");
$VendorTxCode .= rand(0,32000)*rand(0,32000);
return $VendorTxCode;
}
С именем, таким как O'Neil это теперь возвращает фамилию как O % 27Neil, который, как я думаю, вызывает проблемы (все остальные пользователи без этого персонажа работают). После построения остальной части URL и отправить его в моей функции requestPost (как показано ниже), SagePay возвращается с начала над
public function requestPost($url, $data){
set_time_limit(60);
$output = array();
$curlSession = curl_init();
curl_setopt ($curlSession, CURLOPT_URL, $url);
curl_setopt ($curlSession, CURLOPT_HEADER, 0);
curl_setopt ($curlSession, CURLOPT_POST, 1);
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, 2);
$rawresponse = curl_exec($curlSession);
$_SESSION["rawresponse"]=$rawresponse;
$response = explode(chr(10), $rawresponse);
// Check that a connection was made
if (curl_error($curlSession)){
$output['Status'] = "FAIL";
$output['StatusDetail'] = curl_error($curlSession);
}
curl_close ($curlSession);
for ($i=0; $i<count($response); $i++){
$splitAt = strpos($response[$i], "=");
$output[trim(substr($response[$i], 0, $splitAt))] = trim(substr($response[$i], ($splitAt+1)));
}
return $output;
}
Здесь недействительна ошибка выход из ответа:
array(3) { ["VPSProtocol"]=> string(4) "2.23" ["Status"]=> string(7) "INVALID" ["StatusDetail"]=> string(42) "3035 : The VendorTxCode format is invalid." }
Как Я сказал, что это прекрасно работает с любой другой фамилией, просто не с этим конкретным персонажем.
Любая помощь или понимание были бы оценены. Благодарю.
Спасибо, Рик, это очищает это. Считаете ли вы, что написать функцию для поломок незаконных символов из фамилии будет иметь пагубное влияние на процесс Sagepay? –
Лично я бы оставил поле billingsurname/deliverysurname, как потребительский ввод, и просто вычеркнул его, когда вы построите его в vendorTxcode. Сказав это, он не будет вызывать никаких проблем со стороны Sagepay, если вы сначала удалите его из этих полей. –