Не могу вернуть ответ транзакции от обратного вызова пользователю - PullRequest
0 голосов
/ 02 ноября 2019

Мы используем authorize.net Node SDK для обработки платежей. У нас есть вызываемая Firebase функция для обработки запроса на обработку платежа, но мы не можем получить ответ на транзакцию.

Проблема в следующем коде.

  try { 

  // MAKE GLOBAL VARIABLE TO HOLD RESPONSE? -> (problems with async callback)
  let RESPONSE_FOR_CLIENT;


  await ctrl.execute(async function () {

      var apiResponse = ctrl.getResponse();

      var response = await new ApiContracts.CreateTransactionResponse(apiResponse);

      RESPONSE_FOR_CLIENT = response;

      if (response != null) {
        if (response.getMessages().getResultCode() == ApiContracts.MessageTypeEnum.OK) {
          if (response.getTransactionResponse().getMessages() != null) {

              // ... do stuff

          }
          else {
            console.log('Failed Transaction.');
            if (response.getTransactionResponse().getErrors() != null) {

              // ... do stuff

            }
          }
        }
        else {
          console.log('Failed Transaction. ');

      }
});


return RESPONSE_FOR_CLIENT;

} catch (error) {
  throw new functions.https.HttpsError('unknown', error);
}

Да, я знаю, что проблема в том, что ctrl.execute является функцией обратного вызова, и я действительно запутался, почему authorize.net реализовал это таким образом. Java и python SDK запускают их синхронно, чтобы вы могли легко отправить ответ пользователю.

Итак, я думаю, что должен быть способ вернуть ответ, я просто не знаю как. Спасибо.

1 Ответ

1 голос
/ 02 ноября 2019

Проблема в том, что предоставленный SDK не возвращает обещание, поэтому нет возможности ждать, пока что-либо вернется. Нашим решением было отказаться от SDK Authorize.net и собрать с нуля. К счастью, нам не нужно рассматривать каждую конечную точку их API, только те части, которые нам нужны. Я нашел этот вопрос очень полезным для фрагмента вызываемых функций в Firebase.

Мы также подняли проблему в репозитории github , поэтому мы надеемся, что мы сможем внести изменения в SDK.

Возврат асинхронной функции OnCall / Node / Firebase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...