从 Firebase Cloud Function 连接到 Stripe 时出错

Posted

技术标签:

【中文标题】从 Firebase Cloud Function 连接到 Stripe 时出错【英文标题】:Error connecting to Stripe from Firebase Cloud Function 【发布时间】:2018-03-08 22:43:54 【问题描述】:

我正在尝试使用 Firebase 和 Stripe 从我的 android 应用处理信用卡付款。我已经在我的客户端上检索到了一个 Stripe 令牌,并且我在我的 Firebase Cloud Function 中使用了一个数据库触发器来捕捉新订单的发布时间。这是我的功能代码。

const stripe = require('stripe')('sk_test_XXXXXXXXXXXXXXXXXXXXXXXX');

return admin.database()
    .ref()
    .child('orders')
    .child(userId)
    .child(orderId)
    .child('token')
    .once('value')
    .then(snapshot => 
        return snapshot.val();
    )
    .then(token => 

        const amount = order.amount;
        console.log('Amount:', amount);
        console.log('token:', token.id);

        const idempotency_key = orderId;
        const source = token.id;
        const currency = 'usd';
        const charge = amount, currency, source;

        return stripe.charges.create(charge,  idempotency_key );
    )
    .then(charge => 
        console.log('Success:', charge);
        // If the result is successful, write it back to the database
        return event.data.adminRef.set(charge);
    , error => 
        console.log('Error:', error);

        return;
    
);

enter code here

这会产生以下错误:

错误:在 Error._Error 与 Stripe 的连接发生错误 (/user_code/node_modules/stripe/lib/Error.js:12:17) 在 Error.Constructor (/user_code/node_modules/stripe/lib/utils.js:120:13) 在 Error.Constructor (/user_code/node_modules/stripe/lib/utils.js:120:13) 在 ClientRequest。 (/user_code/node_modules/stripe/lib/StripeResource.js:206:9) 在 在 ClientRequest.emit (events.js:188:7) 的 emitOne (events.js:96:13) TLSSocket.socketErrorListener (_http_client.js:309:9) 在 emitOne (events.js:96:13) 在 TLSSocket.emit (events.js:188:7) 在 _combinedTickCallback 处的 connectErrorNT (net.js:1021:8) (internal/process/next_tick.js:80:11) 在 process._tickDomainCallback (内部/进程/next_tick.js:128:9)

我找不到有关此错误的任何文档。我已经尝试了我能想到的一切。所有变量都包含有效数据。

【问题讨论】:

【参考方案1】:

最可能的原因与您的代码无关 - 它与您订阅的 Firebase plan 有关。

“Spark 计划”是完全免费的层级(也是大多数人开始使用的层级),除了 Google 的 HTTPS 服务外,不允许出站网络连接。

即使是开发和测试,我也建议使用“Blaze 计划”。它允许网络连接。虽然它确实列出了使用价格(处理和网络连接),但信息按钮表明在这些价格开始之前有一个free usage level each month,这个水平通常足以进行开发和测试。

【讨论】:

您知道如何捕获失败的收费请求吗?只要我使用一张好卡,一切都可以使用上面的代码。如果我使用被拒绝的卡,流程将继续进入底部错误部分,但错误变量为空。我以为它只会返回一个失败的收费对象 我对 Stripe 本身一无所知,抱歉。 :听起来您最好将其作为一个单独的、有针对性的问题发布。 即使我使用“Blaze 计划”,有时也会出现此错误。 @JIWANG 这也发生在我身上。你知道发生了什么吗? @Leo 我认为这是firebase的错误,它现在可以工作。

以上是关于从 Firebase Cloud Function 连接到 Stripe 时出错的主要内容,如果未能解决你的问题,请参考以下文章

从请求中获取用户信息到 Firebase 中的 Cloud Function

如何从 Cloud Function 获取 Firebase 项目名称或 ID

从 Firebase Cloud Function 连接到 Stripe 时出错

从 Firebase Cloud Function 调用 Google Books API 时出现 HttpsError

如何使用 Cloud Function 将数据从 Firebase Firestore 索引到 Elastic App Search?

如何从 Firebase Cloud Function 在 Google Pub/Sub 中发布消息?