我已经设法让我的服务器使用带有表单集成的PHP与SagePAY服务器通信。 我的名字 - 价值对被构建,串在一起,加密并被发布到SagePAY,在那里被接受。
但是,SagePAY服务器响应表明 BillingSurname 太长(错误3108)。 BillingSurname的构建和交付方式与BillingForenames完全相同,并且其中包含相同的数据。我试过只是发送“史密斯”而它仍然“太长”。不用说它少于指定的20个字符。
任何想法?
编辑:添加加密的代码 - 虽然我不认为这是问题 - 已经通过,因为服务器现在正在读取TXCode,货币,金额等,直到我们到达帐单地址。
<?php
function pkcs5_pad($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
function encryptFieldData($input)
{
$key = "SagePAY encryption key here";
$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=13362020&Currency=GBP&Description=a-url.co.uk Personalised stationery&SuccessURL=http://a-url.co.uk/success/&FailureURL=http://a-url.co.uk/problem/&VendorEmail=email@a-url.co.uk&SendEmail=1&Amount=7.95&BillingFirstnames=Albert&BillingSurname=Smith&BillingEmail=email@a-url.co.uk&BillingAddress1=4drds&BillingAddress2=deldSurrey&BillingCity=ddcd&BillingPostCode=XX7 1XX&BillingCountry=GB&BillingPhone=01342 123456&DeliveryFirstnames=Albert&DeliverySurname=Smith&DeliveryAddress1=4drds&DeliveryAddress2=deldSurrey&DeliveryCity=ddcd&DeliveryPostCode=AB7 6RF&DeliveryCountry=GB"
$datapadded = pkcs5_pad($str,16);
$cryptpadded = "@" . encryptFieldData($datapadded);
?>
答案 0 :(得分:0)
OP解决方案。
我无意中添加了一个不在规范中的额外字段 - BillingEmail。这导致了BillingSurname上的SagePAY错误。