条纹连接错误

11

我有以下的后端Node.js代码来连接我的Stripe账户进行付款。但是我得到了这个错误。我正在使用Firebase Functions,而且这个功能以前可以工作,所以我怀疑这与Firebase访问限制无关。任何关于此的想法和帮助将不胜感激!

var functions = require('firebase-functions');
var stripe = require('stripe')('sk_test');
var express = require('express');
var bodyParser = require('body-parser');
var cors = require('cors');

exports.stripePay = functions.https.onRequest((request, response) => {
  if (request.method === 'POST') {
    var app = express();
    var router = express.Router();

    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(cors());

    var stripetoken = request.body.cardToken;
    var amountpayable = request.body.amount;

    var charge = stripe.charges.create({
      amount: amountpayable,
      currency: 'usd',
      source: stripetoken,
      description: 'Sample transaction'
    }, function (err, charge) {
      console.log("ST4");
      if (err) {
        response.send("Failed!");
      }
      else {
        response.send({ success: true });
      }
    })
  }

{ 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:98:13)
    at Error.Constructor (/user_code/node_modules/stripe/lib/utils.js:98:13)
    at ClientRequest.<anonymous> (/user_code/node_modules/stripe/lib/StripeResource.js:192:9)
    at emitOne (events.js:96:13)
    at ClientRequest.emit (events.js:188:7)
    at TLSSocket.socketErrorListener (_http_client.js:310:9)
    at emitOne (events.js:96:13)
    at TLSSocket.emit (events.js:188:7)
    at connectErrorNT (net.js:1020:8)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickDomainCallback (internal/process/next_tick.js:122:9)   type: 'StripeConnectionError', stack: 'Error: An error occurred with our connection to Stripe\n    at Error._Error (/user_code/node_modules/stripe/lib/Error.js:12:17)\n    at Error.Constructor (/user_code/node_modules/stripe/lib/utils.js:98:13)\n    at Error.Constructor (/user_code/node_modules/stripe/lib/utils.js:98:13)\n    at ClientRequest.<anonymous> (/user_code/node_modules/stripe/lib/StripeResource.js:192:9)\n    at emitOne (events.js:96:13)\n    at ClientRequest.emit (events.js:188:7)\n    at TLSSocket.socketErrorListener (_http_client.js:310:9)\n    at emitOne (events.js:96:13)\n    at TLSSocket.emit (events.js:188:7)\n    at connectErrorNT (net.js:1020:8)\n    at _combinedTickCallback (internal/process/next_tick.js:74:11)\n    at process._tickDomainCallback (internal/process/next_tick.js:122:9)',   rawType: undefined,   code: undefined,   param: undefined,   message: 'An error occurred with our connection to Stripe',   detail:     { Error: getaddrinfo ENOTFOUND api.stripe.com api.stripe.com:443
       at errnoException (dns.js:28:10)
       at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)
     code: 'ENOTFOUND',
     errno: 'ENOTFOUND',
     syscall: 'getaddrinfo',
     hostname: 'api.stripe.com',
     host: 'api.stripe.com',
     port: '443' },   raw:     { message: 'An error occurred with our connection to Stripe',
     detail: 
      { Error: getaddrinfo ENOTFOUND api.stripe.com api.stripe.com:443
          at errnoException (dns.js:28:10)
          at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)
        code: 'ENOTFOUND',
        errno: 'ENOTFOUND',
        syscall: 'getaddrinfo',
        hostname: 'api.stripe.com',
        host: 'api.stripe.com',
        port: '443' } },   requestId: undefined,   statusCode: undefined } Reply
2个回答

33

这个不错!Firebase免费账户会阻止外部API连接,只需获取任何付费账户即可解决问题!


1
你确定吗?我有两个项目,都在同一个账户下,而且都是未付款的项目,但是 Stripe Connect 对其中一个项目有效,而对另一个项目无效。 - royherma
如果您授权,即使在免费版本中也可以使用。如果您想处理未经授权的用户,则只能使用付费版本。 - Dimitri
@Dimitri,你如何进行授权?你是指在Firebase账户中允许Stripe作为外部API吗? - mitrenegade
@mitrenegade 不,需要访问此内容的用户(客户端)必须经过授权(登录)。这很容易实现,因为Firebase提供了开箱即用的解决方案,如Facebook登录或简单的电子邮件+密码注册/登录。所以您可以手动在Firebase的身份验证部分创建一个用户(电子邮件+密码),并通过该用户进行业务处理。然后它就会工作。或者只需获取按量付费帐户,这将花费您最多几美分每月,流量也不大。 - Dimitri
2
你的回答救了我。 - core114
1
哇,那真是太好了,非常有帮助。以授权用户身份登录对我没有起作用,我不得不升级。现在不得不为Dev环境付费并不理想。 - MadMac

1

Dimitris的回答是正确的,简单来说,只需使用Blaze计划即可从Firebase Functions调用Stripe API。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接