我目前正在尝试使用Firestore,SwiftUI和Cloud Functions集成付款处理器。
我目前具有以下功能,该功能允许我将Firestore数据发送到处理器并获得返回值,该返回值将保存到Firestore中。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
const Iyzipay = require('iyzipay');
const iyzipay = new Iyzipay({
apiKey: 'sandbox-afXhZPW0MQlE4dCUUlHcEopnMBgXnAZI',
secretKey: 'sandbox-wbwpzKIiplZxI3hh5ALI4FJyAcZKL6kq',
uri: 'https://sandbox-api.iyzipay.com'
});
exports.pay = functions.https.onRequest((req, res) => {
const docRef = db.collection('requests').doc('zFcWYdeP8wyLprYrc6o1');
docRef.get().then(doc => {
if (!doc.exists) {
console.log('No such document!');
return res.send('Not Found')
}
console.log(doc.data());
res.send(doc.data());
const request = {
locale: Iyzipay.LOCALE.TR,
conversationId: '123456789',
price: doc.data(doc).price,
paidPrice: doc.data(doc).price,
currency: Iyzipay.CURRENCY.TRY,
installment: '1',
basketId: 'B67832',
paymentChannel: Iyzipay.PAYMENT_CHANNEL.MOBILE_IOS,
paymentGroup: Iyzipay.PAYMENT_GROUP.LISTING,
paymentCard: {
cardHolderName: doc.data(doc).cardHolderName,
cardNumber: doc.data(doc).cardNumber,
expireMonth: doc.data(doc).expireMonth,
expireYear: doc.data(doc).expireYear,
cvc: doc.data(doc).cvc
},
buyer: {
id: doc.data(doc).uid,
name: doc.data(doc).name,
surname: doc.data(doc).surname,
gsmNumber: doc.data(doc).gsmNumber,
email: doc.data(doc).email,
identityNumber: doc.data(doc).identityNumber,
registrationAddress: doc.data(doc).registrationAddress,
city: doc.data(doc).city,
country: doc.data(doc).country,
zipCode: doc.data(doc).zipCode
},
shippingAddress: {
contactName: doc.data(doc).name,
city: doc.data(doc).city,
country: doc.data(doc).country,
address: doc.data(doc).registrationAddress,
zipCode: doc.data(doc).zipCode
},
billingAddress: {
contactName: doc.data(doc).name,
city: doc.data(doc).city,
country: doc.data(doc).country,
address: doc.data(doc).registrationAddress,
zipCode: doc.data(doc).zipCode
},
basketItems: [
{
id: doc.data(doc).productid,
name: doc.data(doc).productname,
category1: doc.data(doc).category1,
itemType: Iyzipay.BASKET_ITEM_TYPE.PHYSICAL,
price: doc.data(doc).price
},
]
}
iyzipay.payment.create(request, function (err, result) {
console.log(err, result);
db.collection('results').doc(doc.data(doc).uid).set(result);
})
})
})
我的意图是在将文档添加到"requests"
集合中时触发该函数并获取该文档,而无需像这样手动编写其ID:
const docRef = db.collection('requests').doc('zFcWYdeP8wyLprYrc6o1');
我尝试更改functions.https.onRequest((req, res)
为functions.firestore.document('/requests/').onCreate((snap, context)
,但随后收到:
UnhandledPromiseRejectionWarning: ReferenceError: res is not defined
我该如何解决?谢谢。
Firestore触发器与HTTP触发器的API不同。如果要编写Firestore触发器,则应按照文档中的说明进行操作。我建议启动一个全新的功能,使其适用于简单的情况,然后将现有代码移植到其中。
请注意,Firestore触发器没有res
或req
对象,因为没有与客户端应用程序直接交互。您无法将响应发送到该应用,因为没有直接调用它的客户端应用。写入完成后,Firestore事件将以异步方式处理,并且应用已继续执行其他操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句