SagePay .Net Integration Kit - 返回3dSecureStatus的NOTAVAILABLE值时出错

xri*_*doc 4 c# asp.net opayo

我使用表单集成实现了SagePay付款.我的实现是基于SagePay提供的.Net集成工具包,一切都很好.

最近我们启用了3D Secure,并且当值3DSecureStatus返回值时遇到了问题NOTAVAILABLE.

看起来当NOTAVAILABLE返回值时,在对程序ConvertToSagePayMessage()集中SagePayIntegration类的方法的调用中抛出错误SagePay.IntegrationKit.DotNet.dll.

特别是,将值解析为ThreeDSecureStatus枚举时会发生此错误.此枚举没有NOTAVAILABLE能够解析的值,因此错误.

我现在暂时解决了这个问题.此修补程序替换了NOTAVAILABLENONE,因此现在解析为有效的枚举值.这是在调用之前完成的ConvertToSagePayMessage()

cryptDecoded = cryptDecoded.Replace("3DSecureStatus=NOTAVAILABLE", "3DSecureStatus=NONE");
Run Code Online (Sandbox Code Playgroud)

我只是想知道为什么ThreeDSecureStatus枚举没有值NOTAVAILABLE,因为NOTAVAILABLE它是预期返回的值之一,这在SagePay提供的表单集成协议指南中有所概述.并希望实现更强大的修复,而不是字符串替换.

Dav*_*idG 7

问题是,整合套件包含一个错误,该enum3DSecure状态缺少的值NOTAVAILABLE.SagePay甚至告诉过我:

不幸的是,这是.NET工具包的一个已知问题,但目前还没有修复.

所以有三种方法可以解决这个问题.

  1. 修改服务器的解码响应以将值的3DSecureStatus值更改为NONE(如问题中所述).
  2. 使用已应用此修复程序的Integration Kit版本.您可以向SagePay索取代码(他们似乎非常愿意免费提供)并NOTAVAILABLEThreeDSecureStatus.cs文件中添加枚举值:

    public enum ThreeDSecureStatus
    {
        NONE,
        OK,
        NOAUTH,
        CANTAUTH,
        NOTAUTHED,
        ATTEMPTONLY,
        NOTCHECKED,
        INCOMPLETE,
        MALFORMED,
        INVALID,
        ERROR,
        NOTAVAILABLE //<--- Add this
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我已经完成了修复bug的过程并将其上传到GitHub存储库.随意从那里获取代码.我还更新了使用C#6的项目,因此您需要使用Visual Studio 2015或更高版本来使用它.如果确实需要使用旧版本,则可以从第一次提交到存储库的原始文件开始.