Angular6 - Как проверить, был ли платеж Stripe успешным - PullRequest
0 голосов
/ 21 декабря 2018

Я использую Angular6, я внедряю платежи Stripe в своем приложении и использую функции Google Cloud для запуска кода на стороне сервера.Я могу успешно заставить платеж работать, но я добавляю больше логики к своей функции.В этой функции я обрабатываю платеж.Моя облачная функция запускается, когда я onWrite документ в /payments/${this.userId}/payments коллекцию.

в блоке кода .then, я хочу проверить, был ли платеж Stripe успешным, и только если он был успешнымзатем обновите данные пользователя в базе данных соответствующими документами.Однако я не уверен, что это лучший метод.

Кроме того, в настоящее время я слушаю изменения в документе, где будет возвращен объект заряда Stripe, используя onSnapshot, однако, как только он будетуспешно, я не хочу слушать эти изменения значения, пока не будет произведен другой платеж.

Как мне добиться этого поведения?

processPayment(token: any, amount: number){

    const payment = { token, amount };
  this.paymentCollection.doc(`${this.userId}`).collection('payments').add({
            payment
        })
    .then(docRef => {
        this.docRefId = docRef.id;
        //if payment successful then add to the db of purchased lessons
        console.log(this.docRefId);
        this.db.collection("payments/"+`${this.userId}`+"/payments").doc(`${this.docRefId}`)
        .onSnapshot(function(doc) {
            if(doc.data().status === "succeeded"){

            const updatedBalance = this.balance - amount;;

            let writeBatch = firebase.firestore().batch();

            //CAN'T SEE CART CONTENTS

            for(let buyable of this.cartContents){
                let purchasedLessonsRef = this.afs.firestore.doc(`/purchased_lessons/${this.userId}/lessons/${buyable.b_id}`);
                writeBatch.update(purchasedLessonsRef, buyable);
            }

            //Update balance ref
            let userBalanceRef = this.afs.firestore.doc(`/users/${this.userId}`);
            writeBatch.update(userBalanceRef, {balance: updatedBalance});

            this.docRefId = null;

            return writeBatch.commit().then(function () {
                console.log("commiting batch")
            });
        }
    });

    console.log("finished function");
    })
.catch(error => console.error("Error adding document: ", error))

}

...