【发布时间】:2019-09-05 08:34:39
【问题描述】:
我一直在开发一个在服务器端验证购买的功能。一切正常。 只有一个问题,当购买有效时(response.status === 200)控制台显示(成功)但文档尚未更新。 这是我的代码。我错过了什么吗?
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const {google} = require('googleapis');
const publisher = google.androidpublisher('v2');
const authClient = new google.auth.JWT({
email: 'my_email',
key: 'my_key',
scopes: ['https://www.googleapis.com/auth/androidpublisher']
});
admin.initializeApp();
admin.firestore().settings({timestampsInSnapshots: true});
exports.validatePurchases = functions.firestore
.document('purchases/{channel}')
.onCreate((docSnapshot, context) => {
const purchase = docSnapshot.data();
const order_id = purchase.orderId;
const package_name = purchase.packageName;
const sku = purchase.sku;
const purchase_token = purchase.purchaseToken;
const user_id = purchase.userId;
authClient.authorize((err, result) => {
if (err) {
console.log(err);
}
publisher.purchases.subscriptions.get({
auth: authClient,
packageName: package_name,
subscriptionId: sku,
token: purchase_token
}, (err, response) => {
if (err) {
console.log(err);
}
// Result Status must be equals to 200 so that the purchase is valid
if (response.status === 200) {
console.log('success');
return admin.firestore().collection('users').doc(user_id).update({
purchaseToken: purchase_token,
isPremiumS: 'true'
});
} else {
console.log('fail');
return admin.firestore().collection('users').doc(user_id).update({
purchaseToken: purchase_token,
isPremiumS: 'false'
});
}
});
});
return null;
});
【问题讨论】:
-
你检查
user_id是否不为空? -
是的,我查过了,它不为空。
-
尝试添加 .catch 块,看看是否有错误抛出。
return admin.firestore().collection('users').doc(user_id).update({ purchaseToken: purchase_token, isPremiumS: 'true' }).catch(error => { ... }) -
好的,我试试,谢谢
标签: node.js firebase google-cloud-firestore in-app-purchase google-cloud-functions