2017-09-27 15 views
3

我正在尝试使用Firebase和Stripe从我的Android应用程序处理信用卡付款。我已在客户端检索到条纹标记,并且在我的Firebase云端函数中使用数据库触发器来捕获何时发布新订单。这是我的功能代码。从Firebase Cloud函数连接到条带时出错

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: An error occurred with our connection to Stripe at Error._Error (/user_code/node_modules/stripe/lib/Error.js:12:17) at Error.Constructor (/user_code/node_modules/stripe/lib/utils.js:120:13) at Error.Constructor (/user_code/node_modules/stripe/lib/utils.js:120:13) at ClientRequest. (/user_code/node_modules/stripe/lib/StripeResource.js:206:9) at emitOne (events.js:96:13) at ClientRequest.emit (events.js:188:7) at TLSSocket.socketErrorListener (_http_client.js:309:9) at emitOne (events.js:96:13) at TLSSocket.emit (events.js:188:7) at connectErrorNT (net.js:1021:8) at _combinedTickCallback (internal/process/next_tick.js:80:11) at process._tickDomainCallback (internal/process/next_tick.js:128:9)

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

回答

4

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

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

即使对于开发和测试,我也建议使用“Blaze计划”。它允许网络连接。尽管列出了使用价格(包括处理和网络连接),但Info按钮表明在价格上涨之前有一个free usage level each month,并且该级别通常足以进行开发和测试。

+0

这样做,非常感谢你 –

+0

任何机会,你知道如何捕获失败的收费请求?只要我使用一张好牌,一切都与上面的代码一起工作。如果我使用拒绝的卡,则流程会继续进入底部错误部分,但错误变量为空。我会以为它只会返回一个失败的收费对象 –

+0

我对Stripe本身一无所知,对不起。 {:听起来你可能最好的做法是将它作为一个单独的,有针对性的问题发布。 – Prisoner