Sagepay 字符 (%27) urlencode 问题

问题描述 投票:0回答:1

我的 Sagepay 实现已经运行良好一段时间了,但是最近具有 %27 字符 (') 的用户返回错误:

“无效: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." }

正如我所说,这适用于所有其他姓氏,但不适用于其中包含该特定字符的姓氏。

任何帮助或见解将不胜感激。谢谢。

php curl urlencode opayo
1个回答
1
投票

vendorTxCode 字段仅允许 a-z A-Z - _ 。 (最大长度为 40 个字符),因此 ' 字符失败。恐怕在供应商TxCode 中嵌入姓氏会带来危险。

© www.soinside.com 2019 - 2024. All rights reserved.