Можно ли вернуть транзакцию в учетной записи песочницы Authorize.Net?

Я отправляю приведенный ниже код с консоли Live API веб-сайта Authorize.Net.

Запрос

{
    "createTransactionRequest": {
        "merchantAuthentication": {
            "name": "5KP3u95bQpv",
            "transactionKey": "346HZ32z3fP4hTG2"
        },
        "refId": "123456",
        "transactionRequest": {
            "transactionType": "refundTransaction",
            "amount": "5.00",
            "payment": {
                "creditCard": {
                    "cardNumber": "0015",
                    "expirationDate": "XXXX"
                }
            },
            "refTransId": "1234567890"
        }
    }
}

Ответ

{
    "transactionResponse": {
        "responseCode": "3",
        "authCode": "",
        "avsResultCode": "P",
        "cvvResultCode": "",
        "cavvResultCode": "",
        "transId": "0",
        "refTransID": "1234567890",
        "transHash": "",
        "testRequest": "0",
        "accountNumber": "",
        "accountType": "",
        "errors": [
            {
                "errorCode": "54",
                "errorText": "The referenced transaction does not meet the criteria for issuing a credit."
            }
        ],
        "shipTo": {},
        "transHashSha2": "B3BF913B110E1C82C4FB83DA0EFE096C5D383A9257123AE2A7E9582AF977A537CA2C7A78F13B6FCF0E9C83A9C7FCF16DB4FC6F999A23C9DE24AFC4BFB765E602",
        "SupplementalDataQualificationIndicator": 0
    },
    "refId": "123456",
    "messages": {
        "resultCode": "Error",
        "message": [
            {
                "code": "E00027",
                "text": "The transaction was unsuccessful."
            }
        ]
    }
}

Ключ транзакции API такой же, как на сайте Authorize.Net, но даже с собственным ключом Authorize.Net транзакция возврата не выполняется. Как протестировать возврат средств в песочнице или возможно ли проверить возмещение средств в песочнице?

EDIT: я получаю ту же ошибку во время разработки, и у меня есть правильные данные, но мое приложение в рабочей среде использует другие учетные данные AuthNet, и для целей тестирования я использую учетные данные из совершенно другой песочницы AuthNet. Счет. Поэтому, несмотря на то, что у меня есть правильные данные, я думаю, что моя проблема заключается в том, что данные исходной транзакции не существуют в моей учетной записи песочницы. Помощь приветствуется.


person Fakhar Ahmad Rasul    schedule 15.04.2020    source источник


Ответы (2)


Вы можете протестировать возмещение в песочнице, но она должна соответствовать всем тем же критериям, что и производственная среда. В их примере могут быть устаревшие данные, но если вы используете свежие данные, это сработает для вас.

Для оформления возврата должны быть соблюдены следующие критерии:

  1. Первоначально транзакция была обработана и успешно проведена через платежный шлюз (Authorize.Net).
  2. Транзакция отправляется с действительным идентификатором транзакции (x_trans_id) исходной, успешно рассчитанной транзакции.
  3. Сумма, запрашиваемая для возмещения, меньше или равна первоначальной сумме оплаты.
  4. Сумма нескольких Кредитных транзакций, отправленных против исходной транзакции, меньше или равна исходной расчетной сумме.
  5. Отправляются как минимум последние четыре цифры номера кредитной карты (x_card_num), использованной для исходной, успешно проведенной транзакции. Срок годности не требуется.
  6. Транзакция представляется в течение 120 дней с даты расчета исходной транзакции.

Вот тест, который я только что сделал:

AUTH_CAPTURE

{
   "createTransactionRequest":{
      "merchantAuthentication":{
         "name":"",
         "transactionKey":""
      },
      "refId":49782069,
      "transactionRequest":{
         "transactionType":"authCaptureTransaction",
         "amount":5,
         "payment":{
            "creditCard":{
               "cardNumber":"4427802641004797",
               "expirationDate":"122020",
               "cardCode":"999"
            }
         },
         "order":{
            "invoiceNumber":"1324567890",
            "description":"this is a test transaction"
         },
         "lineItems":{
            "lineItem":[
               {
                  "itemId":"1",
                  "name":"vase",
                  "description":"Cannes logo",
                  "quantity":"18",
                  "unitPrice":"45.00"
               },
               {
                  "itemId":"2",
                  "name":"desk",
                  "description":"Big Desk",
                  "quantity":"10",
                  "unitPrice":"85.00"
               }
            ]
         },
         "tax":{
            "amount":"4.26",
            "name":"level2 tax name",
            "description":"level2 tax"
         },
         "duty":{
            "amount":"8.55",
            "name":"duty name",
            "description":"duty description"
         },
         "shipping":{
            "amount":"4.26",
            "name":"level2 tax name",
            "description":"level2 tax"
         },
         "poNumber":"456654",
         "customer":{
            "id":"18",
            "email":"[email protected]"
         },
         "billTo":{
            "firstName":"Ellen",
            "lastName":"Johnson",
            "company":"Souveniropolis",
            "address":"14 Main Street",
            "city":"Pecan Springs",
            "state":"TX",
            "zip":"44628",
            "country":"USA"
         },
         "shipTo":{
            "firstName":"China",
            "lastName":"Bayles",
            "company":"Thyme for Tea",
            "address":"12 Main Street",
            "city":"Pecan Springs",
            "state":"TX",
            "zip":"44628",
            "country":"USA"
         },
         "customerIP":"192.168.1.1",
         "transactionSettings":{
            "setting":[
               {
                  "settingName":"allowPartialAuth",
                  "settingValue":"false"
               },
               {
                  "settingName":"duplicateWindow",
                  "settingValue":"0"
               },
               {
                  "settingName":"emailCustomer",
                  "settingValue":"false"
               },
               {
                  "settingName":"recurringBilling",
                  "settingValue":"false"
               },
               {
                  "settingName":"testRequest",
                  "settingValue":"false"
               }
            ]
         },
         "userFields":{
            "userField":[
               {
                  "name":"MerchantDefinedFieldName1",
                  "value":"MerchantDefinedFieldValue1"
               },
               {
                  "name":"favorite_color",
                  "value":"blue"
               }
            ]
         }
      }
   }
}

RESPONSE

{
   "transactionResponse":{
      "responseCode":"1",
      "authCode":"A2XE99",
      "avsResultCode":"Y",
      "cvvResultCode":"P",
      "cavvResultCode":"2",
      "transId":"40047374169",
      "refTransID":"",
      "transHash":"",
      "testRequest":"0",
      "accountNumber":"XXXX4797",
      "accountType":"Visa",
      "messages":[
         {
            "code":"1",
            "description":"This transaction has been approved."
         }
      ],
      "userFields":[
         {
            "name":"MerchantDefinedFieldName1",
            "value":"MerchantDefinedFieldValue1"
         },
         {
            "name":"favorite_color",
            "value":"blue"
         }
      ],
      "transHashSha2":"D8C48317CB529C6DFCC472F4548CAAC18F17F505BAD9077E54C117854D8791BADBC76DF6ECEA330E0462E0F9C4C60FDC13BEBDA068E5431EAA551DEB97F358DF",
      "SupplementalDataQualificationIndicator":3,
      "networkTransId":"A3HTA7GK9GEC0S1889A0M5O"
   },
   "refId":"49782069",
   "messages":{
      "resultCode":"Ok",
      "message":[
         {
            "code":"I00001",
            "text":"Successful."
         }
      ]
   }
}

ВОЗВРАТ

{
   "createTransactionRequest":{
      "merchantAuthentication":{
         "name":"",
         "transactionKey":""
      },
      "refId":49782069,
      "transactionRequest":{
         "transactionType":"refundTransaction",
         "amount":5,
         "payment":{
            "creditCard":{
               "cardNumber":"4427802641004797",
               "expirationDate":"122020"
            }
         },
         "authCode":"A2XE99"
      }
   }
}

RESPONSE

{
   "transactionResponse":{
      "responseCode":"1",
      "authCode":"",
      "avsResultCode":"P",
      "cvvResultCode":"",
      "cavvResultCode":"",
      "transId":"40047374178",
      "refTransID":"",
      "transHash":"",
      "testRequest":"0",
      "accountNumber":"XXXX4797",
      "accountType":"Visa",
      "messages":[
         {
            "code":"1",
            "description":"This transaction has been approved."
         }
      ],
      "transHashSha2":"A5390A4933681142E2A41FEC37BF0303FC5FF30D9DF9CBD05FABEC2FA87FE3E241F0705B559924313E972E5457A633CCFA62B7C52A63D93BBB67ACC102D9984B",
      "SupplementalDataQualificationIndicator":0
   },
   "refId":"49782069",
   "messages":{
      "resultCode":"Ok",
      "message":[
         {
            "code":"I00001",
            "text":"Successful."
         }
      ]
   }
}
person John Conde    schedule 15.04.2020
comment
У меня есть правильные данные, но мое приложение в производстве использует другие учетные данные AuthNet, и для целей тестирования я использую учетные данные из совершенно другой учетной записи песочницы AuthNet. Поэтому, несмотря на то, что у меня есть правильные данные, я думаю, что моя проблема заключается в том, что данные исходной транзакции не существуют в моей учетной записи песочницы. Как вы думаете, может быть дело в этом? - person Fakhar Ahmad Rasul; 23.04.2020
comment
Это было бы проблемой наверняка. Он не будет существовать в вашей учетной записи песочницы, и поэтому вы не сможете возместить его. - person John Conde; 24.04.2020
comment
Что ты предлагаешь мне делать тогда? Как связать учетную запись песочницы с производственной учетной записью? - person Fakhar Ahmad Rasul; 24.04.2020
comment
Вы не можете. Два отдельных, и вы не можете получить данные из одного в другой. Если вы хотите вернуть средства в песочнице в целях тестирования, вам нужно будет сначала воссоздать эти платежи в своей песочнице, а затем вы можете протестировать возврат средств по этим платежам. - person John Conde; 24.04.2020

Я попытался использовать метод Джона Конде, и он работает, однако этот пример должен включать дату истечения срока действия вместо XXXX и полный номер кредитной карты, чтобы получить ответ об утверждении, по крайней мере, в моем случае. Следующее не будет работать для меня:

{
  "createTransactionRequest": {
    "merchantAuthentication": {
      "name": "your_credentials_here",
      "transactionKey": "your_credentials_here"
    },
    "transactionRequest": {
      "transactionType": "refundTransaction",
      "amount": 1,
      "currencyCode": "USD",
      "payment": {
        "creditCard": {
          "cardNumber": "4444",
          "expirationDate": "XXXX"
        }
      },
      "authCode": "your_auth_code"
    }
  }
}

Это работает для меня:

{
  "createTransactionRequest": {
    "merchantAuthentication": {
      "name": "your_credentials_here",
      "transactionKey": "your_credentials_here"
    },
    "transactionRequest": {
      "transactionType": "refundTransaction",
      "amount": 1,
      "currencyCode": "USD",
      "payment": {
        "creditCard": {
          "cardNumber": "4444444444444444",
          "expirationDate": "1221"
        }
      },
      "authCode": "your_auth_code"
    }
  }
}
person Alan Perez    schedule 30.04.2021