6

Próbuję ustawić ostatnią kartę dodaną do paska jako domyślną poprzez funkcje firebase, chociaż nie mogę sprawić, żeby działała.paskowych funkcji firebase do ustawiania domyślnej płatności

// Add a payment source (card) for a user by writing a stripe payment source token to Realtime database 
exports.addPaymentSource = functions.database.ref('/users/{userId}/sources/{pushId}/token').onWrite(event => { 
    const source = event.data.val(); 
    if (source === null) return null; 
    return admin.database().ref(`/users/${event.params.userId}/customer_id`).once('value').then(snapshot => { 
    return snapshot.val(); 
    }).then(customer => { 
    return stripe.customers.createSource(customer, {source}); 
    return stripe.customers.update(customer, {default_source: source}); 
    }).then(response => { 
     return event.data.adminRef.parent.set(response); 
    }, error => { 
     return event.data.adminRef.parent.child('error').set(userFacingMessage(error)).then(() => { 
     // return reportError(error, {user: event.params.userId}); 
     consolg.log(error, {user: event.params.userId}); 
     }); 
    }); 
}); 

Odpowiedz

2

Próbujesz zwrócić dwie rzeczy w tej jednej funkcji. To się nie uda. Powinien utworzyć źródło, ale go nie zaktualizuje.

return stripe.customers.createSource(customer, {source}); 
return stripe.customers.update(customer, {default_source: source}); 
+0

tak tworzy i aktualizuje robi, muszę aktualizację karty domyślnej, ponieważ krytyczny prawidłowa karta jest pobierana –

+1

Nie można powrócić dwie funkcje. Musisz więc utworzyć źródło, a następnie dodać dodatkowe wywołanie zwrotne po utworzeniu źródła, które następnie zaktualizuje domyślne źródło. Musiałbym zagłębić się w ich dokumenty, ale pomysł byłby taki. createSource(). then (=> update()). then (=> zaktualizuj swoją bazę danych). Próbujesz tworzyć i aktualizować w tym samym czasie (i próbujesz zwrócić obie funkcje). Więc po prostu wpadnij drugi na własną funkcję zwrotną i będziesz gotowy do pracy. – Notmfb

+1

To się zgadza. Tylko pierwsza zwrotna deklaracja będzie używana do propagowania obietnicy, druga nigdy nie zostanie nawet oceniona. @ Paul'Whippet'McGuane proszę rozważyć użycie narzędzia analitycznego, takiego jak jslint lub eslint, również statycznie złapać tego typu shenanigany. –