从Firebase云功能

时间:2017-09-27 12:32:52

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

我正在尝试使用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)at at   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)at at   在ClientRequest.emit(events.js:188:7)的emitOne(events.js:96:13)at at   emitOne上的TLSSocket.socketErrorListener(_http_client.js:309:9)   (events.js:96:13)在TLSSocket.emit(events.js:188:7)at   connectErrorNT(net.js:1021:8)位于_combinedTickCallback   (internal / process / next_tick.js:80:11)at process._tickDomainCallback   (内部/过程/ next_tick.js:128:9)

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

1 个答案:

答案 0 :(得分:14)

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

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

即使是开发和测试,我建议采用" Blaze计划"。它允许网络连接。虽然它确实列出了利用价格(包括处理和网络连接),但“信息”按钮表示在这些价格开始之前存在free usage level each month,并且该级别通常足以进行开发和测试。