【问题标题】:Sagepay Issue - Retrieve a Transaction not working after 3D-Secure AuthenticateSagepay 问题 - 在 3D 安全身份验证后检索交易不工作
【发布时间】:2020-10-31 04:59:54
【问题描述】:

https://developer.sage.com/api/payments/api/#operation/retrieveTransaction

3D-Secure Authenticate 后,我无法使用 transactionId 检索交易。我收到以下回复:

{
    "description": "Transaction not found",
    "code": 1012
}

有时它工作正常。然后是这样的响应:

{
    "statusCode": "0000",
    "statusDetail": "The Authorisation was Successful.",
    "transactionId": "5D208A72-C1A6-68E7-A61D-B67D51CXXXXX",
    "transactionType": "Payment",
    "retrievalReference": 6764XXX,
    "bankResponseCode": "00",
    "bankAuthorisationCode": "999XXX",
    "paymentMethod": {
        "card": {
            "cardType": "Visa",
            "lastFourDigits": "0006",
            "expiryDate": "0720",
            "cardIdentifier": "8B27BE84-E06C-4F88-ADCD-AFF22EBXXXXX",
            "reusable": false
        }
    },
    "amount": {
        "totalAmount": 13500,
        "saleAmount": 13500,
        "surchargeAmount": 0
    },
    "currency": "GBP",
    "fiRecipient": {},
    "status": "Ok",
    "avsCvcCheck": {
        "status": "AllMatched",
        "address": "Matched",
        "postalCode": "Matched",
        "securityCode": "Matched"
    },
    "3DSecure": {
        "status": "Authenticated"
    }
}

有人知道我该如何解决这个问题吗?

【问题讨论】:

    标签: payment opayo 3d-secure


    【解决方案1】:

    我遇到了同样的问题。我正在使用测试沙箱环境并强制 3dsv1.0 处理。在 3DS 版本 1 中,challenge/response 返回后并没有给出完整的交易详情,因此您需要查询 sagepay 以获取授权状态。如上所述,它要么成功返回事务对象,要么随机给出 {"description":"Transaction not found","code":1012}
    然后我假设了一些时间问题 - 所以在下面放置一个重试选项来查询交易。这似乎对事情有所帮助(意味着“有时”它得到了交易),但它本身并不是一个修复。

    async.retry({ 
        times: 10, 
        interval: function(retryCount) {
            return 50 * Math.pow(2, retryCount);
        },
        errorFilter: function(errorCode) {
             return errorCode === 404; // only retry on transaction 'not-found'
        },
     },
     function (callback) { 
         return getSageTransactionStatus(MD, callback) 
     },
     function(err, result) {
         if (err) {
             if (global.gLogging ) console.log ("Transaction Search Result", err);
         }
         else console.log (result);
     });
    

    【讨论】:

    • 更新:SagePay 技术支持今天确认“问题是测试帐户(包括沙盒帐户)的一个已知问题”。他们正在努力解决问题。 ETA 尚不清楚。他们说在真实账户上这不是问题。
    • 嗨,PaulC,您对 Opayo/SagePay 的看法如何,我刚刚在现场环境中看到了 1012,它后来接受了相同的请求并成功返回。他们的支持通常是无用的,所以不抱太大希望。我认为由于最初的开发人员在 API 开发上留下了相当多的废弃软件,顺便说一句,你知道如何在 3dV1 上提交客户端 IP 吗?
    • 嗨,马特,当时的问题仅在他们的测试环境中,并且在一天左右的时间内“修复”,几乎没有任何解释。他们的帮助台面向支付支持,当然无法支持 API。那就是说我在像你一样的生产中看到了这个问题。它发生在今年 1 月推出 3Dv2 之后。总体而言,问题在于 Opayo 在处理整个平台的交易状态时遇到了问题,因此并不是专门的 api 问题。这更像是 3dv1 的问题,而不是 3dv2,因为在 v2 中,事务状态会自动返回,与 v1 不同
    • 嗨,马特,还要添加有关 IP。您必须使用 IP 地址填写 api 调用的 strongCustomerAuthentication 块。 (我还使用 npm 模块 @supercharge/request-ip 来提取 IP,因为它处理“查找”浏览器发布请求中的 IP 地址)。我的回忆是,关于 3dv1,这个块本身并不需要,而是用于 v2。也就是说,我将它提供给任何 3d 调用,无论是 v1 还是 v2。问候,保罗
    • 嗨 PaulC,我们在 v2 的中间件中还没有 user-agent/accept/browsersize 之类的东西,因此在 3dv1 上,到目前为止,我们没有在我们的 req 有效负载中提交 strongCustomerAutnetication 块,你也是说我们可以只使用 SCA bock 作为 IP(并忽略其他必填字段),您认为我们在 3dv1 上仍然可以吗?在 1012 上从 SagePay 收到回复,它也在生产中“您需要等待至少 1 秒,然后再尝试针对交易提出请求以允许 Sage Pay 系统更新。”所以我们基本上添加了睡眠
    猜你喜欢
    • 2019-08-21
    • 2012-11-22
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2012-03-22
    • 2021-10-23
    相关资源
    最近更新 更多