0

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"
    }
}

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

4

1 回答 1

0

我遇到了同样的问题。我正在使用测试沙箱环境并强制 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);
 });
于 2020-07-15T11:09:29.527 回答