我刚刚在我的应用程序中实现了支付网关。来自网关的最终交易状态在我的redirect_url处收到,我已将其设置为我的Google Firebase HTTPS云功能之一。网址是这样的:
https://********.cloudfunctions.net/abcd
我认为这个过程以前没有被任何人使用过,因此我很担心。该架构运行良好,交易成功完成,云功能正确提取状态。但问题是,当我检查云函数日志时,我发现这个函数永远不会以 Status OK 结束。总是:
“函数执行花费了 55636 毫秒,完成状态为:‘超时’”
代码如下:
exports.ccavRes = functions.https.onRequest(async (req, res) => {
var ccavEncResponse = ''
var ccavResponse = ''
var workingKey = ******
var ccavPOST:any = ''
const md5 = *****//Hashing step;
const keyBase64 = *****//;
// Initializing Vector and then convert in base64 string
const ivBase64 = *******
ccavEncResponse = req.rawBody.toString()
ccavPOST = qs.parse(ccavEncResponse);
const encryption = *****
ccavResponse = ********
const params = ccavResponse.split("&");
let map = new Map<any, any>();
for (var i = 0; i < params.length; i++) {
var parts = params[i].split('=');
map.set(parts[0],parts[1].substr(0, parts[1].length))
}
const order_id = map.get('order_id')
const order_status = map.get('order_status')
const database = admin.database().ref()
await database.child(*****).child(order_id).child("Status").set(order_status)
return
})
我尝试按照 Firebase 文档在返回之前添加 res.send() 。但这会产生编译错误:
“响应”类型中不存在属性“发送”
代码是用打字稿编写的。
使用基于 Promise 的方法代替 for 循环,使用 wait 会更高效。
await Promise.all(params.map(async (param) => {
var parts = param.split('=');
map.set(parts[0], parts[1].substr(0, parts[1].length));
})
);
它可能会解决您的问题,但如果不能解决请告诉我。