Sage Pay - 您提供的VendorTxCode长度无效

时间:2014-03-20 11:37:46

标签: php forms sagepay

我正在尝试与Sage Pay进行表单集成。我收到了错误:

VPSProtocol=2.23
Status=INVALID
StatusDetail=The VendorTxCode you supplied is an invalid length.  VendorTxCodes should be between 1 to 40 characters long.

我的代码如下:

<?php
function pkcs5_pad($text, $blocksize)
{
    $pad = $blocksize - (strlen($text) % $blocksize);
    //echo "<br/>Padding:".str_repeat(chr($pad), $pad)."<";
    return $text . str_repeat(chr($pad), $pad);
}

function encryptFieldData($input)
{
    $key = "abcdefghijklmnop";
    $iv = $key;

    $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, "", MCRYPT_MODE_CBC, "");
    if (mcrypt_generic_init($cipher, $key, $iv) != -1)
    {
        $cipherText = mcrypt_generic($cipher,$input );
        mcrypt_generic_deinit($cipher);

        $enc = bin2hex($cipherText);
    }
    return $enc;
}
$str = "VendorTxCode=34234234234&Currency=GBP";
$datapadded = pkcs5_pad($str,16);
$cryptpadded = "@" . encryptFieldData($datapadded);
?>
<html>
<form name="pp_form" action="https://test.sagepay.com/Simulator/VSPServerGateway.asp?Service=VendorRegisterTx" method="post">
    <input name="VPSProtocol" type="hidden" value=2.23 />
    <input name="TxType" type="hidden" value=PAYMENT />
    <input name="Vendor" type="hidden" value="myusername" />
    <input name="Crypt" type="hidden" value=<?php echo $cryptpadded;?> />
    <p>Click here to submit 
        <input type="submit" value="here">
    </p>
</form>
</html>

非常感谢任何帮助/建议

亚历

1 个答案:

答案 0 :(得分:0)

虽然如果它正常工作你不应该这样做,那么它应该不是问题。

然而,错误可能不是您的VendorTxCode,因为SagePay错误报告有时会回复不相关或“敲击”错误。影响错误代码,因此一个错误会导致报告不同的错误标志。 (这是非常好的,但我所说的是它并不完美。)

一种简单的检查方法是加密,然后只解密vendorTxCode,看看你得到了什么。官方限制为40个字符。如果您遇到加密问题,它就会显示出来。

如果一切顺利,它必须是另一个导致某处出错的字段。也许你在切割和粘贴以制作所有其他领域时再次提到那个领域。在加密之前检查文本字符串的内容,并检查整个字符串的内容,以便对供应商代码进行双重引用。

我希望有所帮助,

祝福,

保罗。