3

J'essaie de traiter un paiement par carte de crédit à partir de mon application Android à l'aide de Firebase et Stripe. J'ai récupéré un jeton Stripe sur mon client, et j'utilise un déclencheur de base de données dans ma fonction Cloud Firebase pour détecter une nouvelle commande. Voici mon code de fonction.Erreur lors de la connexion à Stripe depuis la fonction Cloud de Firebase

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 

Cela génère l'erreur suivante:

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)

Je ne trouve aucune documentation sur cette erreur. Et j'ai essayé tout ce que je pouvais penser. Toutes les variables contiennent des données valides.

Répondre

4

La cause la plus probable pour quelque chose comme ceci n'a rien à voir avec votre code - il a à voir avec le Firebase plan auquel vous êtes inscrit. Le «plan Spark», qui est le niveau totalement gratuit (et celui auquel la plupart des gens commencent), n'autorise pas les connexions réseau sortantes, sauf pour les services HTTPS de Google.

Même pour le développement et les tests, je suggère d'aller avec le "plan Blaze". Cela permet les connexions réseau. Bien qu'il affiche des prix d'utilisation (à la fois pour le traitement et les connexions réseau), le bouton Info indique qu'il y a un free usage level each month avant que ces prix ne soient activés, et ce niveau est généralement suffisant pour le développement et les tests.

+0

Qui l'a fait, merci beaucoup –

+0

Par hasard savez-vous comment capturer une demande de charge échouée? Tout fonctionne avec le code ci-dessus tant que j'utilise une bonne carte. Si j'utilise une carte refusée, le flux continue dans la section d'erreur du bas, mais la variable d'erreur est vide. Je pensais que ça retournerait juste un objet de charge échoué –

+0

Je ne sais rien sur Stripe lui-même, désolé. {: On dirait que vous pourriez être mieux servi en publiant cela comme une question distincte et ciblée. – Prisoner