错误:无法与功能通信。要求被拒绝

时间:2019-04-24 11:21:47

标签: javascript node.js firebase google-cloud-functions stripe-payments

我正在尝试通过功能将Firebase数据库链接到Stripe Connect,当用户注册到我的平台时,它将自动在Stripe中创建卖方。一切正常,直到上个月,然后我无处不面临着这个错误。

已经联系了Firebase支持人员,他们无法找到错误原因,称他们正在努力寻找解决方案,建议密切关注线程: https://issuetracker.google.com/u/1/issues/125425924

有人说这可能与对诺言的错误使用有关,顺便说一句,我在Node 6上

该函数在数据库的触发器和http请求函数上均被拆分

这是我的index.js

exports.setPagamentiProprietario = functions.https.onRequest((req, res) => {

    let IDProprietario = req.url.replace('/',''); 
    if(IDProprietario === null){
        return res.status(400).send(impacchettaInformazioni(err,"invalid user id","400"));
    }

    return admin.auth().getUser(IDProprietario).then(function(userRecord) {
        const email = userRecord.email;
        return funcPagamenti.registraProprietario(IDProprietario,email,admin.database()).then(function(data){
            return res.status(200).send(impacchettaInformazioni(data,"ok","200"));

        }).catch(err => {
            console.log("errore registrazione stripe" + err);
            return res.status(500).send(impacchettaInformazioni(err,"error","500"));
        })

    }).catch(err => {
        console.log("errore registrazione stripe" + err);
        return res.status(500).send(impacchettaInformazioni(err,"error","500"));
    })  
})


exports.proprietarioCreato = functions.database.ref("Proprietari/{IDPropietario}").onCreate(event =>{

    const IDProprietario = event.params.IDUProprietario;
    const proprietario = event.data;

    return admin.auth().getUser(IDProprietario).then(function(userRecord) {
        const email = userRecord.email;
        return funcPagamenti.registraProprietario(IDProprietario,proprietario,email,admin.database());

    }).catch(function(error) {
        console.log("Erorre registrazione proprietario  STRIPE:", error);
    });

})

这是我的funcPagamenti.registraProprietario:

//条带注册

exports.registraProprietario = function(IDProprietario,proprietario,email,database) {

    return new Promise((res, rej) => {

        try{

            stripe.accounts.create({
                type: 'custom',
                country: 'IT',
                first_name: proprietario.Nome,
                last_name: proprietario.Cognome,
                email: email

            }, function(err, customer) {

                if(err !== null){
                    console.log(err);
                    return rej(err);
                }
                return database.ref('Proprietari').child(IDProprietario).update({"IDPagamenti":customer.id}).then(function(){
                    return res(custumer.id);
                }).catch(err => {
                    console.log(err);
                    console.log("Errore update proprietario" + err);
                    return rej(err);
                })

            });

        }catch(errore){
            console.log(err);
            return rej(errore);
        }

    })

}

我希望数据条返回注册到平台的供应商的ID。

相反,我得到了:

错误:无法与函数通信。请求被拒绝。

/// 编辑

实际上这是我的错,我一直使用错误的签名来调用该方法,因为编译器没有向我发出任何我之前无法检测到的警告,无论如何,这是修订版:

//Registra un proprietario per accettare i pagamenti
exports.setPagamentiProprietario = functions.https.onRequest((req, res) => {

    let IDProprietario = req.url.replace('/',''); 
    if(IDProprietario === null){
        return res.status(400).send(impacchettaInformazioni(err,"invalid user id","400"));
    }

    return admin.auth().getUser(IDProprietario).then(function(userRecord) {

        return admin.database().ref("Proprietari").child(IDProprietario).once("value").then(snap => {
            const email = userRecord.email;

            return funcPagamenti.registraProprietario(req.connection.remoteAddress,IDProprietario,snap.val(),email,admin.database()).then(function(data){
                return res.status(200).send(impacchettaInformazioni(data,"ok","200"));

            }).catch(err => {
                console.log("errore query proprietario" + err);
                return res.status(500).send(impacchettaInformazioni(err,"error","500"));
            })

        }).catch(err => {
            console.log("errore registrazione stripe" + err);
            return res.status(500).send(impacchettaInformazioni(err,"err","500"));
        })  

    }).catch(err => {
        console.log("errore registrazione stripe" + err);
        return res.status(500).send(impacchettaInformazioni(err,"error","500"));
    })  
})

1 个答案:

答案 0 :(得分:0)

在调用Stripe node.js API时,您可能应该使用Promise而不是回调函数。

documentation中所述:

  

每个方法都返回一个可链接的promise,可用于代替   定期回调

因此,您可以如下更改team1

put YouUploadFileName
export -a YouUploadFileName