首页 > 解决方案 > 无法从回调向用户返回交易响应

问题描述

我们正在使用 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 都同步运行它们,因此您可以轻松地将响应发送回用户。

所以,我认为必须有一种方法可以返回响应,我只是不知道如何。谢谢。

标签: node.jstypescriptfirebasegoogle-cloud-functionsauthorize.net

解决方案


问题是提供的 SDK 没有返回承诺,因此无法等待任何返回。我们的解决方案是放弃 Authorize.net 的 SDK 并从头开始构建。幸运的是,我们不必考虑他们 API 的每个端点,只需要考虑我们需要的部分。我发现这个问题对于 firebase 可调用函数非常有启发性。

我们还在github存储库上提出了一个问题,因此希望我们能够继续对 SDK 进行更改。

Node/Firebase onCall 异步函数返回


推荐阅读