1

我正在将许多电子商务站点集成到不同的银行中,并决定最简单的方法是添加到 dotnetcharge (www.dotnetcharge.com) 库中。它运行良好,意味着我可以为每种银行类型和交易保持大部分代码相同。但是,他们的支持有点糟糕(发送了 4 封电子邮件,1 封回复),我对 3D Secure 问题完全感到困惑。

有人有 dotnetcharge 和 3D Secure 的经验吗?我已经设置了 MerchantURL 并出现了实际的 3D 安全屏幕 - 但我不确定如何让系统正确“流动”。有没有人有任何代码示例甚至是正确方向的指针?如果做不到这一点,有谁知道如何让支持做出回应!

这种特殊的集成是与 SagePay 的,它也有糟糕的文档和支持。

参考代码如下;

        Dim Amount As Decimal = ordertotal
        ' ApplySecure3D options:
        ' 0 = If 3D-Secure checks are possible and rules allow, perform the checks and apply the authorization rules. 
        ' 1 = Force 3D-Secure checks for this transaction only (if your account is 3D-enabled) and apply rules for authorization.
        ' 2 = Do not perform 3D-Secure checks for this transaction only and always authorize.
        ' 3 = Force 3D-Secure checks for this transaction (if your account is 3D-enabled) but ALWAYS obtain an auth code, irrespective of rule base.
        Dim ProtxLogin As String = "xxx"
        Dim ProtxPassword As String = "xxx"
        Dim ProtxApply3DSecure As Integer = 1
        Dim ProtxMerchantURL As String = "https://www.mydomain.com/processing/"

        Dim Number As String = txtCardNo.Text '//luhn/mod10 here.
        Dim AVS As String = txtCVN.Text
        Dim DD As String = "01"
        Dim MM As String = ddlValidTo_month.SelectedValue.ToString()
        Dim YY As String = ddlValidTo_year.SelectedValue.ToString()

        Dim ProcessingResult As Integer = 0
        Dim Protx As New dotnetCHARGE.CC()

        Protx.Login = ProtxLogin
        Protx.Password = ProtxPassword
        Protx.ApplySecure3D = ProtxApply3DSecure
        Protx.MerchantUrl = ProtxMerchantURL

        Dim AVSResponse As String = ""
        Dim CVV2 As String = ""

        Protx.OrderID = GoogleOrderNumber
        Protx.Month = MM
        Protx.Year = YY
        Protx.TransactionType = dotnetCHARGE.TransactionType.Sale
        Protx.Amount = ordertotal
        Protx.Number = Number
        Protx.Currency = "GBP"
        Protx.CustomerID = CustomerId
        '//loads of params removed for brevity
        Protx.ClientIP = Request.UserHostAddress.ToString()
        Protx.CardType = ddlCardType.SelectedValue.ToString()
        Protx.Description = "My Order"
        Protx.Code = AVS
        Protx.TestMode = True
        Protx.TransactionType = dotnetCHARGE.TransactionType.Sale

        ProcessingResult = Protx.Charge(Processor.Protx)

帮助表示赞赏。

4

1 回答 1

0

我决定回到这个问题来解释最终结果是如何实现的。希望一些 SO 用户会发现它很有用。

要获得正确的“流程”,您需要两页。您实际上无法在一个页面中完成整个事务处理。第一页将有卡片进入详情;卡号、到期日、CVN、帐单地址等。在点击付款/提交时,我建议将交易保存到您的数据源中作为“未处理”或类似的东西。保存所有详细信息后 - 到目前为止没有完成卡处理 - 使用 HTTPS 重定向到第二页。

根据您的设置方式,您的客户可能永远不会知道此页面的存在。第二页将包含 .netCharge 代码作为我的问题并处理卡。启用 3D 安全 (.Apply3DSecure = 1) 后,客户将被重定向到他们的银行以输入更多详细信息,然后它将返回到第二页。它的行为不像回发或刷新,因此不必担心对页面处理的返回调用两次。您将收到 3 种可能状态中的 1 种;授权、错误和拒绝。您的页面可以重定向到更多必要的页面(因此客户永远不会知道此中间页面存在)或直接在此处理页面上显示结果。

最后有一个“陷阱”,你很快就会看到。第二个页面(处理页面)需要卡片详细信息来实际处理。您不能只在表单甚至查询字符串上传递卡片详细信息,这是不负责任的。.netCharge 带有 .Encrypt 和 .Decrypt 功能;只需将要加密的值和某种哈希值传递给它,然后将这些详细信息临时保存在第一页上,然后在第二页上读取和解密,然后将其删除。这意味着细节是安全的,在大多数情况下保存时间不到 5 秒,并且您不会因为它们被破坏而暴露。

我希望这会有所帮助——如果有人有任何问题,请大声告诉我。

于 2010-06-30T10:13:40.953 回答