应用内购买使用Cloud Function进行验证

时间:2020-04-07 20:14:35

标签: android google-cloud-functions in-app-purchase

经过24小时的研究,我发现了一种非常有效的方法来验证应用购买情况,但没有获得适当的信息。我正在寻找验证产品购买的方法。

我试图将js文件部署到firebase云功能,但显示我在exports.validatePurchases = functions.database方法中有错误。任何人都可以看一下并修复错误吗?

这是代码:

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: '',
    key: '',
    scopes: ['https://www.googleapis.com/auth/androidpublisher']
});
admin.initializeApp();

exports.validatePurchases = functions.database
    .ref('/purchases/{uId}/{orderId}')
    .onCreate((event, context) => {
        const purchase = event.val();
        if (purchase.is_processed === true) {
            console.log('Purchase already processed!, exiting');
            return null;
        }
        const orderId = context.params.orderId;
        const dbRoot = event.ref.root;
        const package_name = purchase.package_name;
        const sku = purchase.sku;
        const my_token = purchase.token;

        authClient.authorize((err, result) => {
            if (err) {
                console.log(err);
            }
            publisher.purchases.products.get({
                auth: authClient,
                packageName: package_name,
                productId: sku,
                token: my_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) {
                    return event.ref.child('is_validated').set(true);
                } else {
                    return event.ref.child('is_validated').set(false);
                }
            });
        });
        return null;
    });

我在部署时遇到的错误:

功能部署存在以下功能错误: validatePurchases

要尝试重新部署这些功能,请运行: firebase deploy --only功能:validatePurchases

要继续部署其他功能(例如数据库),请运行: firebase deploy-功能除外

错误:功能未正确部署。

在Firebase功能日志中:

Code in file index.js can't be loaded.
Did you list all required modules in the package.json dependencies?
Detailed stack trace: Error: Cannot find module 'googleapis'
    at Function.Module._resolveFilename (module.js:548:15)
    at Function.Module._load (module.js:475:25)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/srv/index.js:3:18)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)

1 个答案:

答案 0 :(得分:1)

首先,在项目的功能文件夹上运行cmd:

然后,为了将其添加为依赖项,请运行以下命令:

$ npm install googleapis

现在检查项目中是否存在任何功能。如果Firebase控制台中有功能,请将其删除。现在尝试部署。