2015-01-06 5 views
0

내 Sagepay를 구현하지만 요즘 % 27 문자 (')가 사용자를 몇 시간 동안 지금 잘 작동하고있다Sagepay를 문자 (% 27)를 urlencode는

오류와 함께 반환 된'발행 3035 : VendorTxCode 형식이 잘못되었습니다. ' 이 이제 O와 같은 성 (姓)을 반환 등 오닐과 같은 이름으로

public function createVendorTxCode($lastName, $ids) { 
    $lesson_ids = str_replace(',', '-', $ids); 

    $VendorTxCode = $lastName; 
    $VendorTxCode .= date("-YmdHis-"); 
    $VendorTxCode .= rand(0,32000)*rand(0,32000); 

    return $VendorTxCode; 
} 

...

$encodedSurname = urlencode(Input::get('BillingSurname')); 

    // Create a custom VendorTxCode. This must be unique every time. 
    $VendorTxCode = $this->createVendorTxCode($encodedSurname, $ids); 

:

현재는 내 createVendorTxCode 기능에 보내기 전에 성을에는 urlencoding하고 % 27Neil, 나는이 문제를 일으키는 것 (이 캐릭터가없는 다른 모든 사용자)이 생각합니다.

array(3) { ["VPSProtocol"]=> string(4) "2.23" ["Status"]=> string(7) "INVALID" ["StatusDetail"]=> string(42) "3035 : The VendorTxCode format is invalid." } 

로 : (아래 그림 참조) 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; 
} 

위의 시작과 응답의 출력이 반환 내가 말했듯이, 이것은 다른 모든 성에서 잘 작동한다.

도움이나 의견이 있으면 크게 감사하겠습니다. 감사.

답변

1

vendorTxCode 필드는 a-z A-Z - _ 만 허용합니다. (최대 길이 40 자), '문자에 실패했습니다. vendorTxCode에 성을 임포팅 할 때의 위험은 두렵습니다.

+0

감사의 말씀 릭. 성에서 불법적 인 인물을 제거하는 기능을 쓰면 Sagepay 프로세스에 악영향을 미칠 것이라고 생각하십니까? –

+0

개인적으로 나는 billingsurname/deliverysurname 필드를 소비자 입력으로 남겨두고 vendorTxcode에 빌드하면 그것을 제거합니다. 그런 말로하면, Sagepay 측에서 먼저이 필드에서 제거하면 문제가 발생하지 않습니다. –