2015-03-19 37 views
4

我已經使用表單集成實施了SagePay付款。我的實施基於SagePay提供的.Net集成工具包,這一切都很好。SagePay .Net集成套件 - 爲3dSecureStatus返回NOTAVAILABLE值時出錯

最近我們啓用了3D Secure,並在3DSecureStatus的值返回NOTAVAILABLE的值時遇到問題。

這似乎是返回NOTAVAILABLE值時,一個錯誤的調用內裝配SagePay.IntegrationKit.DotNet.dll內拋至ConvertToSagePayMessage()方法上SagePayIntegration類。

具體來說,當值被解析爲ThreeDSecureStatus枚舉時,會發生此錯誤。此枚舉不具有NOTAVAILABLE能夠解析的值,因此錯誤。

我已經爲此暫時解決了這個問題,現在就開始工作。此修復程序將NOTAVAILABLE值替換爲NONE,因此現在解析爲有效的枚舉值。這僅僅是調用ConvertToSagePayMessage()

cryptDecoded = cryptDecoded.Replace("3DSecureStatus=NOTAVAILABLE", "3DSecureStatus=NONE"); 

我只是想知道爲什麼ThreeDSecureStatus枚舉不具有價值NOTAVAILABLE之前完成,因爲NOTAVAILABLE是,它預計將返回一個值,這是在概述由SagePay提供的表單集成協議指南。並希望實現更強大的修復,而不是字符串替換。

+0

我與3d安全啓用相同的問題,我試過你的解決方案,但不適合我。你有好主意嗎? SagePay.IntegrationKit.SagePayIntegration.SetPropertyValue(Object target,String propertyName,String value)中的錯誤是「Requested value'NOTAVAILABLE'was not found」 – DevT 2015-07-10 16:05:20

回答

6

問題是集成套件包含一個錯誤,enum對於3DSecure狀態缺少NOTAVAILABLE的值。 SagePay甚至告訴我:

不幸的是,這是.NET工具包的一個已知問題,但目前還沒有解決。

所以有三種可能的方法來解決這個問題。

  1. 要麼修改來自服務器的解碼應對3DSecureStatus值的值更改爲NONE(如寫的問題。)
  2. 使用的版本已應用了修復程序的集成套件。你可以問SagePay的代碼(他們似乎非常願意提供它免費)和NOTAVAILABLE添加爲ThreeDSecureStatus.cs文件枚舉值:

    public enum ThreeDSecureStatus 
    { 
        NONE, 
        OK, 
        NOAUTH, 
        CANTAUTH, 
        NOTAUTHED, 
        ATTEMPTONLY, 
        NOTCHECKED, 
        INCOMPLETE, 
        MALFORMED, 
        INVALID, 
        ERROR, 
        NOTAVAILABLE //<--- Add this 
    } 
    
  3. 我已經通過固定的歷程錯誤並將其上載到GitHub repository。隨意從那裏拿取代碼。我還更新了項目以使用C#6,因此您需要使用Visual Studio 2015或更高版本才能使用它。如果您確實需要使用舊版本,則可以從first commit to the repository的原始文件開始。