2016-07-20 61 views
0

我一直在試圖實現鼠尾草薪酬表單集成。每次我提交表單時,我都會收到錯誤代碼:5080(錯誤描述:事務註冊失敗)。我嘗試在sagepays網站(https://www.sagepay.co.uk/support/error-codes)中搜索錯誤代碼,但顯然此錯誤代碼不存在。 如果我在sagepay的錯誤代碼頁面錯誤描述,而不是錯誤代碼類型,然後我得到以下結果screenshotSagepay表單集成不斷給出錯誤5080(表單事務註冊失敗)

但是我的兩個成功的網址和失敗的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= 
+0

5080是新的通用錯誤消息,涵蓋了所有潛在的故障(我知道,這是一個痛苦)。如果你可以提供原始的,未加密的Crypt字符串,我應該可以爲你排除故障.... –

+0

@RibBlacow你已經添加了上面未加密的crypt字符串!謝謝 –

+0

只是爲了這個錯誤的其他人,我發現我得到了這個,因爲我的VendorTxCode每個訂單都不是唯一的。我在VendorTxCode的訂單表中使用了一個自動遞增的字段,我做了一大堆測試事務,然後在上線前刪除了測試訂單,然後在現場開始出現此錯誤。原來,這是因爲它使用了我在測試過程中使用的id字段中的VendorTxCode值。這是一個痛苦的調試,因爲即使沒有代碼改變,錯誤剛剛開始發生。 – AndyGaskell

回答

2

所以我終於想通了幾個小時的頭部劃傷。我正在發送crypt文件,但不是像txt類型的其他數據。這是我很愚蠢,雖然如果從實際上與問題相關的sagepay得到一個錯誤,而不是那麼一般的事情,你會開始在無關的地方尋找解決問題的錯誤。

感謝您的幫助球員。

2

Simkhada

這是您的BillingCountry和DeliveryCountry領域 - 你應該使用ISO 2字符值。你有 '聯合王國' 在那裏 - 應該是 'GB' ....

最良好的祝願,

裏克

+0

Hi Rik,我已經改變它,所以這兩個字段顯示GB而不是英國。但我仍然遇到同樣的錯誤。順便說一句我用(https://github.com/tolzhabayev/sagepayForm-php)這個插件,因爲我正在努力實現加密和使用由sagepay提供的php工具包編碼。謝謝 –

+0

然後我懷疑它是你的加密算法的問題 - 在我的java實現中對我工作得很好...... –

+0

這個PHP例子在我的答案中的作品(至少它確實 - 從我做了任何事情起就已經過去了! ) –

0

示例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); 
} 
+0

嗨,Rik。我實現了你的代碼(我認爲encryptAes函數中的$ key是加密密碼?),但仍然沒有運氣,我得到了同樣的錯誤。事實上,我使用sagepay的測試(https://test.sagepay.com/gateway/service/vspform-register.vsp)應該真的很重要嗎? –

+0

不應該有所作爲,但每個平臺上的加密密鑰都不相同 –

+0

我擁有正確的加密密鑰,但仍然沒有運氣。也許這個問題不是加密? –

0

檢查您的加密密鑰!

今天早上我的問題完全一樣。我一直在使用測試Sage Pay網關進行開發,但希望檢查我的crypt字符串在現場網關上工作。據報道錯誤5080。我意識到我正在使用我的測試加密密鑰而不是實時密鑰!

+0

雖然我仍在通過測試網關。我正在使用我的測試加密密鑰,但仍然遇到了5080問題。只是爲了它,我厭倦了用(https://live.sagepay.com/gateway/service/vspform-register.vsp)這個實時加密密鑰。仍然沒有運氣。但是,當我登錄到真實賬戶時,它說我的賬戶不是最新的。但我在表單上使用3.00。這變得越來越混亂。 –

0

我有這個確切的問題,並認爲我會添加我的問題/解決方案。我在測試中遇到了這個錯誤,發現我們測試網站的DNS條目已被刪除。我得到這個錯誤,因爲SagePay無法到達我給它的返回URL。

一旦我把DNS條目恢復,SagePay可以到達網站,錯誤消失。

0

我有同樣的問題,原因是我不小心遺漏了我確定包含的地址字段之一。

檢查您發佈賢者什麼,通過var_dump($_POST)

如果做不到這一點,說話SagePay 0845 111 44​​66(我認爲它的成本,以撥打該號碼),並告訴他們問題的客戶支持。他們可能會要求您將表單發佈到https://test.sagepay.com/showpost/showpost.asp,並且他們可以觀察他們的結果,以查看您要發佈的數據,並驗證他們的結尾是否有缺失。

0

我有這個非常相同的問題。由於數據庫檢索錯誤,我發現其中一個變量是空白的 - 所以請檢查你是否填寫了每一個字段,然後逐步遍歷表單生成代碼(我在服務器端腳本中動態構建了我的代碼,所以很容易識別) 。

在我的情況下,「billingaddress」實際上提供了一個字符串值「」,當它發佈到SagePay時發生錯誤。

0

在woocomerce上設置爲鼠標付費 - 確保「sellect shippig地址」放在帳單地址而不是自動簡單修復。