SagePay .Net 集成工具包 - 返回 3dSecureStatus 的 NOTAVAILABLE 值时出错

SagePay .Net Integration Kit - Error when returning NOTAVAILABLE value for 3dSecureStatus

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

最近我们启用了 3D Secure,但当 3DSecureStatus return 的值变为 NOTAVAILABLE 的值时遇到了问题。

似乎当 NOTAVAILABLE 值被 returned 时,在 SagePayIntegration [=37] 上调用 ConvertToSagePayMessage() 方法时会抛出一个错误=] 在程序集内 SagePay.IntegrationKit.DotNet.dll.

具体来说,当值被解析为 ThreeDSecureStatus 枚举时会发生此错误。此枚举没有 NOTAVAILABLE 能够解析的值,因此出现错误。

我已经暂时解决了这个问题,现在可以正常工作了。此修复将 NOTAVAILABLE 值替换为 NONE,因此现在解析为有效的枚举值。这是在调用 ConvertToSagePayMessage()

之前完成的
cryptDecoded = cryptDecoded.Replace("3DSecureStatus=NOTAVAILABLE", "3DSecureStatus=NONE");

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

问题是集成工具包包含一个错误,即 3DSecure 状态的 enum 缺少 NOTAVAILABLE 的值。 SagePay 甚至告诉我这个:

Unfortunately this is a known issue with the .NET kit but there is no fix as of yet.

所以可以通过三种方法解决这个问题。

  1. 要么修改来自服务器的解码响应,将3DSecureStatus值的值更改为NONE(如问题中所写。)
  2. 使用已应用修复程序的集成工具包版本。您可以向 SagePay 索取代码(他们似乎非常愿意免费提供)并在 ThreeDSecureStatus.cs 文件中添加 NOTAVAILABLE 作为枚举值:

    public enum ThreeDSecureStatus
    {
        NONE,
        OK,
        NOAUTH,
        CANTAUTH,
        NOTAUTHED,
        ATTEMPTONLY,
        NOTCHECKED,
        INCOMPLETE,
        MALFORMED,
        INVALID,
        ERROR,
        NOTAVAILABLE //<--- Add this
    }
    
  3. 我已经完成了修复错误的过程并将其上传到GitHub repository. Feel free to take the code from there. I have also updated the project to use C#6 and as such you will need to use Visual Studio 2015 or higher to use it. If you do need to use an older version, you could start with the original files from the first commit to the repository