Результат дескриптора Stripe redirectToCheckout (Angular) - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть код для оплаты с помощью Stripe checkout

Вот код

async pay(price: number, name: string, description: string) {
    const stripe = await loadStripe('***************');
    this._subscriptionService.createStripeSession(price, name, description, this.document.location.origin)
    .subscribe(async result => {
        this.sessionId = result;
        const { error } = await stripe.redirectToCheckout({
            sessionId: this.sessionId
        });
    });
}

Теперь он работает хорошо, и после успешного выполнения I go для SuccesUrl, определенного в сеансе, который создан на бэк-энде.

Но мне также нужно отловить результат функции и запустить другую функцию. Как я могу это сделать?

ОБНОВЛЕНИЕ

Здесь createStripeSession

createStripeSession(price: number | null | undefined, name: string | null | undefined, description: string | null | undefined, locationUrl: string | null | undefined): Observable<string> {
    let url_ = this.baseUrl + "/api/services/app/Subscription/CreateStripeSession?";
    if (price !== undefined)
        url_ += "price=" + encodeURIComponent("" + price) + "&"; 
    if (name !== undefined)
        url_ += "name=" + encodeURIComponent("" + name) + "&"; 
    if (description !== undefined)
        url_ += "description=" + encodeURIComponent("" + description) + "&"; 
    if (locationUrl !== undefined)
        url_ += "locationUrl=" + encodeURIComponent("" + locationUrl) + "&"; 
    url_ = url_.replace(/[?&]$/, "");

    let options_ : any = {
        observe: "response",
        responseType: "blob",
        headers: new HttpHeaders({
            "Accept": "application/json"
        })
    };

    return this.http.request("post", url_, options_).pipe(_observableMergeMap((response_ : any) => {
        return this.processCreateStripeSession(response_);
    })).pipe(_observableCatch((response_: any) => {
        if (response_ instanceof HttpResponseBase) {
            try {
                return this.processCreateStripeSession(<any>response_);
            } catch (e) {
                return <Observable<string>><any>_observableThrow(e);
            }
        } else
            return <Observable<string>><any>_observableThrow(response_);
    }));
}

1 Ответ

0 голосов
/ 12 апреля 2020

Преобразование вашей функции redirectToCheckout для возврата Observable, а затем вы можете подписаться на нее.

    async pay(price: number, name: string, description: string) {
        const stripe = await loadStripe('***************');
        this._subscriptionService.createStripeSession(price, name, description, this.document.location.origin)
        .subscribe(async result => {
            this.sessionId = result;
            const { error } = await stripe.redirectToCheckout({
                sessionId: this.sessionId
            }).subscribe(result2 =>{
               //run another function code here
            });
        });
    }

Преобразование Promise в Observable в вашей функции redirectToCheckout

    import { from } from 'rxjs';

    redirectToCheckout(){
      return from(your promise code in here);
    }
...