node.js - 无法从回调向用户返回交易响应
问题描述
我们正在使用 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 都同步运行它们,因此您可以轻松地将响应发送回用户。
所以,我认为必须有一种方法可以返回响应,我只是不知道如何。谢谢。
解决方案
问题是提供的 SDK 没有返回承诺,因此无法等待任何返回。我们的解决方案是放弃 Authorize.net 的 SDK 并从头开始构建。幸运的是,我们不必考虑他们 API 的每个端点,只需要考虑我们需要的部分。我发现这个问题对于 firebase 可调用函数非常有启发性。
我们还在github存储库上提出了一个问题,因此希望我们能够继续对 SDK 进行更改。
推荐阅读
- symfony4 - 无法执行 bin/console 原则:迁移:迁移 RuntimeException /vendor/symfony/console/Helper/QuestionHelper.php:129
- javascript - 自定义 Web api 上的 POST 405(不允许的方法)
- javascript - 如何检测 iframe 的源页面是否已完全加载到 DOM 中
- javascript - 如何使用对象名称将 CSV 加载到数组中
- html - iframe 内容导致我页面上的文本变得模糊
- c++ - 使用自定义键为 unordered_map 生成哈希函数
- jquery - VueJS 按 id [数据] 选择
- html - 为什么某些网站上的“查看页面源代码”与“检查”不同,我如何下载在检查中看到的内容?
- android - Kotlin:来自实例化类的变量的未解决参考
- ios - 示例:自定义单元格的表格视图到自定义单元格的另一个表格视图