Sagepay form Integration 不断报错5080(Form transaction registration failed)
Sagepay form Integration keeps giving error 5080 (Form transaction registration failed)
我一直在尝试实现 sage pay 的表单集成。每次提交表单时,我都会收到错误 code:5080(错误描述:交易注册失败)。我尝试在 sagepays 网站 (https://www.sagepay.co.uk/support/error-codes) 中搜索错误代码,但显然此错误代码不存在。
如果我在 sagepay 的错误代码页中输入错误描述,而不是错误代码,那么我会得到以下结果 screenshot
但是我的成功 url 和失败 url 都存在。
这是怎么回事?
编辑:
VendorTxCode=16-07-20-12-43-55-145161808&ReferrerID=&Amount=3,500.00&Currency=GBP&Description=Clarice Cliff SUNRAY LOTUS JUG C.1930&SuccessURL=http://test.co.uk/baskets/sagepay_success&FailureURL=http://test.co.uk/baskets/sagepay_failure&CustomerName=&CustomerEMail=&VendorEMail=&SendEMail=&eMailMessage=&BillingSurname=Tester&BillingFirstnames=Tester&BillingAddress1=Test Street&BillingAddress2=&BillingCity=London&BillingPostCode=TE14 1EE&BillingCountry=UNITED KINGDOM&BillingState=&BillingPhone=&DeliverySurname=Tester&DeliveryFirstnames=Tester&DeliveryAddress1=Test Street&DeliveryAddress2=&DeliveryCity=London&DeliveryPostCode=TE14 1EE&DeliveryCountry=UNITED KINGDOM&DeliveryState=&DeliveryPhone=&Basket=&AllowGiftAid=&ApplyAVSCV2=&Apply3DSecure=&BillingAgreement=&BasketXML=&CustomerXML=&SurchargeXML=&VendorData=&ReferrerID=&Language=&Website=
这是您的 BillingCountry 和 DeliveryCountry 字段 - 您应该使用 ISO 2 字符值。你在那里有 'UNITED KINGDOM' - 应该是 'GB'.
示例 PHP 代码:
function addPKCS5Padding($input)
{
$blockSize = 16;
$padd = "";
$length = $blockSize - (strlen($input) % $blockSize);
for ($i = 1; $i <= $length; $i++)
{
$padd .= chr($length);
}
return $input . $padd;
}
function removePKCS5Padding($input)
{
$blockSize = 16;
$padChar = ord($input[strlen($input) - 1]);
$unpadded = substr($input, 0, (-1) * $padChar);
return $unpadded;
}
function encryptAes($string, $key)
{
$string = addPKCS5Padding($string);
$crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $key);
return strtoupper(bin2hex($crypt));
}
function decryptAes($strIn, $myEncryptionPassword)
{
#Sagepay specific - remove the '@'
$strIn = substr($strIn,1);
$strInitVector = $myEncryptionPassword;
$strIn = pack('H*', $hex);
$string = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $myEncryptionPassword, $strIn, MCRYPT_MODE_CBC,$strInitVector);
return removePKCS5Padding($string);
}
检查您的加密密钥!
今天早上我遇到了完全相同的问题。我一直在使用测试 Sage Pay 网关进行开发,但想检查我的加密字符串是否在实时网关上工作。报告错误 5080。我意识到我使用的是我的测试加密密钥而不是实时密钥!
我终于想通了。我发送的是 crypt 字段,而不是 txt 类型的其他数据。
是我太傻了,虽然如果从 Sagepay 得到一个实际上与问题相关的错误而不是那么笼统的错误会很好,你开始寻找不相关的地方来解决问题。
我确实遇到了这个问题,我想我会把我的 problem/solution 添加到这个问题中。我在测试中遇到了这个错误,发现我们测试站点的 DNS 条目已被删除。我收到此错误是因为 SagePay 无法访问我提供的 return URL。
一旦我放回 DNS 条目,SagePay 就可以访问该站点并且错误消失了。
我遇到了同样的问题,原因是我不小心遗漏了我确定包含的地址字段之一。
通过var_dump($_POST)
检查您post发送给 Sage 的内容
否则,请拨打 0845 111 4466 与 SagePay 客户支持联系(我认为拨打该号码需要付费)并告诉他们问题所在。他们可能会要求您 post 将您的表单发送到 https://test.sagepay.com/showpost/showpost.asp,并且他们可以在他们这边观看以查看您正在发布的数据并验证他们这边是否缺少某些内容。
我遇到了同样的问题。事实证明,由于数据库检索错误,我的一个变量是空白的——所以通过单步执行表单生成代码来检查你是否真的填写了每个字段(我在服务器端脚本中动态构建了我的变量,所以很容易识别) .
在我的例子中,"billingaddress" 实际上提供了一个字符串值“”,它在发布到 SagePay 时出错。
在 Woocommerce 上,转到 Sagepay 的设置 - 确保将 "select shipping address" 放入帐单地址而不是自动 - 简单修复。
登录到您的 Sagepay 帐户并转到无效交易,单击交易,您将看到导致 5080 错误的确切错误。
我一直在尝试实现 sage pay 的表单集成。每次提交表单时,我都会收到错误 code:5080(错误描述:交易注册失败)。我尝试在 sagepays 网站 (https://www.sagepay.co.uk/support/error-codes) 中搜索错误代码,但显然此错误代码不存在。 如果我在 sagepay 的错误代码页中输入错误描述,而不是错误代码,那么我会得到以下结果 screenshot
但是我的成功 url 和失败 url 都存在。
这是怎么回事?
编辑:
VendorTxCode=16-07-20-12-43-55-145161808&ReferrerID=&Amount=3,500.00&Currency=GBP&Description=Clarice Cliff SUNRAY LOTUS JUG C.1930&SuccessURL=http://test.co.uk/baskets/sagepay_success&FailureURL=http://test.co.uk/baskets/sagepay_failure&CustomerName=&CustomerEMail=&VendorEMail=&SendEMail=&eMailMessage=&BillingSurname=Tester&BillingFirstnames=Tester&BillingAddress1=Test Street&BillingAddress2=&BillingCity=London&BillingPostCode=TE14 1EE&BillingCountry=UNITED KINGDOM&BillingState=&BillingPhone=&DeliverySurname=Tester&DeliveryFirstnames=Tester&DeliveryAddress1=Test Street&DeliveryAddress2=&DeliveryCity=London&DeliveryPostCode=TE14 1EE&DeliveryCountry=UNITED KINGDOM&DeliveryState=&DeliveryPhone=&Basket=&AllowGiftAid=&ApplyAVSCV2=&Apply3DSecure=&BillingAgreement=&BasketXML=&CustomerXML=&SurchargeXML=&VendorData=&ReferrerID=&Language=&Website=
这是您的 BillingCountry 和 DeliveryCountry 字段 - 您应该使用 ISO 2 字符值。你在那里有 'UNITED KINGDOM' - 应该是 'GB'.
示例 PHP 代码:
function addPKCS5Padding($input)
{
$blockSize = 16;
$padd = "";
$length = $blockSize - (strlen($input) % $blockSize);
for ($i = 1; $i <= $length; $i++)
{
$padd .= chr($length);
}
return $input . $padd;
}
function removePKCS5Padding($input)
{
$blockSize = 16;
$padChar = ord($input[strlen($input) - 1]);
$unpadded = substr($input, 0, (-1) * $padChar);
return $unpadded;
}
function encryptAes($string, $key)
{
$string = addPKCS5Padding($string);
$crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $key);
return strtoupper(bin2hex($crypt));
}
function decryptAes($strIn, $myEncryptionPassword)
{
#Sagepay specific - remove the '@'
$strIn = substr($strIn,1);
$strInitVector = $myEncryptionPassword;
$strIn = pack('H*', $hex);
$string = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $myEncryptionPassword, $strIn, MCRYPT_MODE_CBC,$strInitVector);
return removePKCS5Padding($string);
}
检查您的加密密钥!
今天早上我遇到了完全相同的问题。我一直在使用测试 Sage Pay 网关进行开发,但想检查我的加密字符串是否在实时网关上工作。报告错误 5080。我意识到我使用的是我的测试加密密钥而不是实时密钥!
我终于想通了。我发送的是 crypt 字段,而不是 txt 类型的其他数据。
是我太傻了,虽然如果从 Sagepay 得到一个实际上与问题相关的错误而不是那么笼统的错误会很好,你开始寻找不相关的地方来解决问题。
我确实遇到了这个问题,我想我会把我的 problem/solution 添加到这个问题中。我在测试中遇到了这个错误,发现我们测试站点的 DNS 条目已被删除。我收到此错误是因为 SagePay 无法访问我提供的 return URL。
一旦我放回 DNS 条目,SagePay 就可以访问该站点并且错误消失了。
我遇到了同样的问题,原因是我不小心遗漏了我确定包含的地址字段之一。
通过var_dump($_POST)
否则,请拨打 0845 111 4466 与 SagePay 客户支持联系(我认为拨打该号码需要付费)并告诉他们问题所在。他们可能会要求您 post 将您的表单发送到 https://test.sagepay.com/showpost/showpost.asp,并且他们可以在他们这边观看以查看您正在发布的数据并验证他们这边是否缺少某些内容。
我遇到了同样的问题。事实证明,由于数据库检索错误,我的一个变量是空白的——所以通过单步执行表单生成代码来检查你是否真的填写了每个字段(我在服务器端脚本中动态构建了我的变量,所以很容易识别) .
在我的例子中,"billingaddress" 实际上提供了一个字符串值“”,它在发布到 SagePay 时出错。
在 Woocommerce 上,转到 Sagepay 的设置 - 确保将 "select shipping address" 放入帐单地址而不是自动 - 简单修复。
登录到您的 Sagepay 帐户并转到无效交易,单击交易,您将看到导致 5080 错误的确切错误。