【问题标题】:Update Stripe Customer from Firebase Function (Node.js)从 Firebase 函数 (Node.js) 更新 Stripe 客户
【发布时间】:2021-08-16 00:27:23
【问题描述】:

我有以下 Firebase 功能:

exports.updateStripeCustomer = functions.region('europe-west3')
    .firestore
    .document('users/{userId}')
    .onUpdate( async (change, context) => {
        const oldValue = change.before.data();
        const newValue = change.after.data();
        
        if( JSON.stringify(newValue.adresse) != JSON.stringify(oldValue.adresse) ) {
            const user = await admin.auth().getUser(change.after.id)
            .then((user) => {
                return user.displayName
            })
            const stripe = Stripe(<api-key>)
            const customer = await stripe.customers.update(oldValue.stripe_id,
                {
                    shipping: {
                        address: {
                            city: newValue.ort,
                            postal_code: newValue.plz,
                            line1: newValue.strasse,
                            line2: newValue.hausnum
                        },
                        name: user
                    },
                }
            );
            return customer
        }
        return 'no Data changed'
})

该功能本身有效 - 只是传递运输信息的格式对我来说不是很清楚,而且似乎是错误的。 Stripe Api 文档中的示例对我来说不是很清楚。

Stripe 返回以下错误:

parameter_unknown - shipping[0]
Received unknown parameter: shipping[0]

完整的日志错误:

{
  "shipping": {
    "0": {
      "name": "Testi Tester"
    }
  }
}
-------------
Response-Text
{
  "error": {
    "code": "parameter_unknown",
    "doc_url": "https://stripe.com/docs/error-codes/parameter-unknown",
    "message": "Received unknown parameter: shipping[0]",
    "param": "shipping[0]",
    "type": "invalid_request_error"
  }
}

非常感谢您的帮助!

【问题讨论】:

    标签: node.js firebase stripe-payments


    【解决方案1】:

    您的参数似乎符合shipping (link) 的 API 文档。错误结构表明您的 shipping 对象被解释为一个数组,这意味着某些内容没有为请求正确字符串化。

    我的直觉是这与您的 name: user 子参数有关。这应该只是一个字符串,但根据你的 sn-p 中前面的行 user.displayName 看来 user 是一个复杂的对象。您的意思是在更新请求中使用相同的 user.displayName 吗?

    我建议您尝试输入一个临时测试值 name: 'test name' 以查看是否可以解决问题,然后找出您要使用的 user 对象中的哪个属性。

    【讨论】:

    • 嗨,诺兰,感谢您的回答和思考过程;)变量 user.displayName 返回一个字符串(来自 Firebase 用户对象)。如果我省略了运输对象,名称也会被正确解释(输出)我的猜测是运输对象/数组的格式不正确。但我也没有找到正确的解决方案/格式。
    • 不幸的是,在这种情况下,元数据链接中的示例不正确:(
    • 您是否检查过您的开发者日志以了解 Stripe 是如何接收此请求的?它可能有助于阐明什么不起作用。 dashboard.stripe.com/test/logs 去那里查找您在客户更新中的错误,检查 Stripe 收到的有效负载并在您的问题中分享。
    • 是的,总是检查...有编辑原件帖子
    • 某些东西导致它被解释为一个数组,这没有多大意义。如果您也对测试地址字段进行硬编码,这会改变吗?除此之外,您可能还想写信给 Stripe 支持以获得帮助。
    猜你喜欢
    • 2023-03-17
    • 2015-06-27
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 2018-06-14
    • 2014-02-20
    相关资源
    最近更新 更多