【发布时间】:2019-06-07 03:57:52
【问题描述】:
我正在开发在线预订安卓应用项目。它使用 Firestore 和 Cloud Function。
应用内预订经历三个阶段
phase(Initiate Order) :我收到订单请求并点击
makeOrder()http 可调用云函数,该函数在预订集合中创建一个文档,其中包含字段status= "inProcess"并使用CHECKSUMHASH发送响应(用于稍后付款)给客户。phase(do payment):如果第一阶段成功完成,现在用户必须使用第一阶段生成的
CHECKSUMHASH进行支付。如果支付 TXN 成功,那么支付 API (more) 也会给出CHECKSUMHASH作为响应。现在我必须验证 在服务器端CHECKSUMHASH确保请求没有被篡改。phase(Confirm Order):在这个阶段
CHECKSUMHASH(由支付APT生成)必须被验证,所以我调用另一个HTTP云函数confirmOrder()。如果方法verifychecksum()返回true,那么我将状态"inProcess"更改为"pending"。
现在的问题是它总是需要超过 60 秒,所以给出错误 TimeOut。
我的问题是
-
创建文档后我正在检查文档是否存在
db.collection(targetColRef).doc(data.TARGET_ID).collection('orders').doc(data.ORDER_ID).get(); const time = getCurrentDate().time; if (doc.exists && (time - doc.orderTime) < 300) -
我按这三个阶段预订订单,这样做是否正确?
exports.confirmOrder = functions.https.onCall((data, context) => __awaiter(this, void 0, void 0, function* () { if(validateData()){ yield new Promise((reject, resolve) => { return verifychecksum(data,paytm_config.MERCHANT_KEY); }).then((result) => __awaiter(this, void 0, void 0, function* () { if (result) { const doc = yield db.collection(targetColRef).doc(data.TARGET_ID).collection('orders').doc(data.ORDER_ID).get(); const time = getCurrentDateNumber().time; if (doc.exists && (time - doc.orderTime) < 300) { yield db.collection(targetColRef).doc(data.TARGET_ID).collection('orders').doc(data.ORDER_ID).update({ status: 'pending' }); } else { //doc not exists console.log("Order not exist Or time diff more than 300 sec ! /DATA=>" + JSON.stringify(data) + "/Context=>" + JSON.stringify(context)); throw new functions.https.HttpsError('permission-denied', 'Time Out!'); } } else { // result==false console.log("Failed to verify checksum! /DATA=>" + JSON.stringify(data) + "/Context=>" + JSON.stringify(context)); throw new functions.https.HttpsError('permission-denied', 'bad request'); } //.. })).catch((err) => { throw new functions.https.HttpsError('permission-denied', err); }); console.log("successfull"); return "successfull"; }else{ //.... }})):
【问题讨论】:
-
没有必要为你的英语道歉,因为它是完全可以理解的。但请使用 Stack Overflow 的格式化工具,让您的问题看起来不错。
-
当然先生@Frankvanpuffelen
标签: android google-cloud-firestore google-cloud-functions