Проблема с Sagepay - получение транзакции, не работающей после аутентификации 3D-Secure - PullRequest
0 голосов
/ 10 июля 2020

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

Кто-нибудь знает, как я могу исправить эту проблему?

1 Ответ

0 голосов
/ 15 июля 2020

У меня возникла та же проблема. Я использую тестовую среду песочницы и принудительно обрабатываю 3dsv1.0. В 3DS версии 1 после возврата запроса / ответа он не дает полной информации о транзакции, поэтому вам нужно запросить 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);
 });
...