【问题标题】:Firebase functions update stripe userFirebase 函数更新条带用户
【发布时间】:2018-06-29 23:47:35
【问题描述】:

如何正确更新现有的条带帐户 这是我尝试过的,我认为我做的不对,我不断从 firebase Functions 日志中收到此错误消息:

ReferenceError:请求未在 admin.database.ref.once.then.then.customer 中定义

exports.updateStripeUser = functions.database.ref('/users/{userId}').onWrite(event => {
         const val = event.data.val
        if (val === null || val.id || val.error) return null;
      // Look up the Stripe customer id written in createStripeAccount
      return 
      admin.database().ref(`/users/${event.params.userId}/customer_id`).once('value').then(snapshot => {
        return snapshot.val();
      }).then(customer => { 

      return stripe.accounts.update({
           {customer},
           {
             tos_acceptance: {
               date: Math.floor(Date.now() / 1000) ,
               ip: request.connection.remoteAddress // Assumes you're not using a proxy
               }
            }
         });
      });
    });

【问题讨论】:

    标签: ios swift firebase google-cloud-functions stripe-connect


    【解决方案1】:

    您需要通过 HTTP 请求触发才能获得连接 IP 地址。使用 express 并添加一个POST 请求以供您的客户发布,然后从req 检索地址。

    const app = require('express')();
    
    app.post("/", (req, res) => {
        res.send(req.get('X-Forwarded-For') || req.connection.remoteAddress);
    });
    
    exports.tos_acceptance = functions.https.onRequest(app);
    

    您可以从您的客户端触发此操作,它会返回一个公共 IP 地址。您将需要使用此地址更新您的条带用户。作为onWrite 触发器的一部分,您可以在客户端检索它并将其写入实时数据库中的用户。

    不过,另一种方法是使用当前用户的 ID 令牌作为请求的 Authorization 标头从客户端发布。您可以在服务器上对标头进行解码以获取相应的用户 ID——您可以使用该 ID 来假定授权来更新用户的条带。

    const cors = require('cors')({ origin: true });
    const app = require('express')();
    
    app.use(cors);
    app.post("/", (req, res) => {
        const idToken = `${req.get('Authorization')}`.split('Bearer ')[1];
        const ipAddress = req.get('X-Forwarded-For') || req.connection.remoteAddress;
    
        if (!idToken) return res.send(401);
        if (!ipAddress) return res.send(403);
    
        return admin.auth().verifyIdToken(idToken).then(uid => {
            // update stripe user
        }).catch(error => {
            res.status(500).send(error);
        });
    });
    
    exports.tos_acceptance = functions.https.onRequest(app);
    

    【讨论】:

      【解决方案2】:

      代码似乎假设有一个request 变量允许它确定用户的IP 地址。这听起来像是为在 Web 服务器(例如 Express.js)中运行而编写的代码。

      但由于您是通过写入数据库来触发此 Cloud Functions,因此没有请求您可以从中读取 IP 地址。如果需要此信息调用stripe.accounts.update(...),则应将其写入数据库并通过event.data.val() 从那里读取。

      【讨论】:

      • 啊谢谢,我在从 firebase 检索 customer_id 时遇到问题。更新功能仍然无法正常工作。你会建议我怎么做?
      猜你喜欢
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 2017-10-20
      • 2019-12-04
      • 1970-01-01
      相关资源
      最近更新 更多