【发布时间】:2021-12-15 19:44:22
【问题描述】:
我在云函数中有一个函数,它从我的颤振应用程序中选择用户电子邮件,我想将它传递给一个函数,该函数在从外部客户端发布时使用用户电子邮件创建一个 firestore 文档,以便我可以存储firestore 中特定用户文档中的数据。我是 javascript 新手,我正在使用云函数来运行我的 Flutter 应用程序的后端代码。
我尝试过使用全局变量,但我一直在 exports.mpesa 函数中获取未定义的存储值,但在 exports.getUser 函数中,它会更新。任何帮助将不胜感激。
这就是我的 index.js 文件的样子
const functions = require("firebase-functions");
const admin = require('firebase-admin');
admin.initializeApp();
let loggedInUser;
function convertTZ(date, tzString) {
return new Date((typeof date === "string" ? new Date(date) : date).toLocaleString("en-US", {timeZone: tzString}));
}
exports.getUser = functions.https.onCall((data) => {
console.log(loggedInUser);
loggedInUser = data;
console.log(loggedInUser);
});
exports.mpesa = functions.https.onRequest((request, response) => {
try{
let date_ob = Date();
const data = request.body;
const date = convertTZ(date_ob,"Africa/Nairobi");
prettydata = JSON.parse(JSON.stringify(data));
console.log("Mpesa info");
console.log(loggedInUser);
functions.logger.info(data);
console.log("Done1");
functions.logger.info(prettydata.Body.stkCallback.ResultCode);
console.log("Done2");
admin.firestore().collection('transactions').doc(`${date}`).set(data);
admin.firestore().collection('transactions').doc(`${loggedInUser}`).set(data);
console.log("Done3");
}
catch(e){
functions.logger.info(e);
}
});
我正在flutter上调用getUser函数,如下所示
await FirebaseFunctions.instance.httpsCallable('getUser').call(loggedInUser.email);
一个包(https://pub.dev/packages/mpesa_flutter_plugin)将数据发送到get.mpesa函数的回调URL
输出的日志如下所示
getUser
Function execution started
12:05:55.673 am
getUser
Callable request verification passed
12:05:55.674 am
getUser
undefined
12:05:55.674 am
getUser
edward@mmw.co.ke
12:05:55.755 am
getUser
Function execution took 1489 ms, finished with status code: 200
12:06:03.373 am
mpesa
Function execution started
12:06:03.593 am
mpesa
Mpesa info
12:06:03.673 am
mpesa
undefined
12:06:03.674 am
mpesa
{"Body":{"stkCallback":{"ResultCode":1032,"ResultDesc":"Request cancelled by user","MerchantRequestID":"22982-12102077-1","CheckoutRequestID":"ws_CO_011120210005554833"}}}
12:06:03.674 am
mpesa
Done1
12:06:03.674 am
mpesa
1032
12:06:03.674 am
mpesa
Done2
12:06:06.105 am
mpesa
Done3
12:07:03.375 am
mpesa
Function execution took 60003 ms, finished with status: 'timeout'
【问题讨论】:
-
为什么不将数据传递给 MPESA 函数?
-
通过手机支付平台对外激活。这是他们发送付款数据的回调。
标签: javascript node.js flutter google-cloud-functions