Stripe Payments с ошибкой Angular: 'Источники ресурса' не существует для типа 'Клиент | DeletedCustomer ' - PullRequest
0 голосов
/ 03 августа 2020
• 1000 'не существует по типу' Клиент | DeletedCustomer '
export const attachSource = async(uid: string, source: string) => {

const customer = await getOrCreateCustomer(uid);

const existingSource = customer.sources.data.filter(s => s.id === source).pop();

if (existingSource) {
    return existingSource;
} 
else {
    await stripe.customers.createSource(customer.id, { source: source });
    // update default
    return await stripe.customers.update(customer.id, { default_source: source });
}

}

ошибка customer.sources.

Вот функция getOrCreateCustomer ():

export const getOrCreateCustomer = async (uid: string) => {
     const user = await getUser(uid);
     const customerId = user && user.stripeCustomerId;

     // If missing customerId, create it
     if (!customerId) {
        return createCustomer(uid);
     } else {
        return stripe.customers.retrieve(customerId);
     }
 }

1 Ответ

0 голосов
/ 03 августа 2020

Ваша функция getOrCreateCustomer возвращает Promise, если идентификатор клиента уже существует, вместо объекта клиента Stripe. Вероятно, ваша функция createCustomer делает то же самое, что и вы не используете await или не используете функции обратного вызова для получения результата асинхронно. Вероятно, вы захотите изменить свой код следующим образом:

export const getOrCreateCustomer = async (uid: string) => {
     const user = await getUser(uid);
     const customerId = user && user.stripeCustomerId;

     // If missing customerId, create it
     if (!customerId) {
        // createCustomer likely uses stripe.customers.create, so needs to work asynchronously 
        return await createCustomer(uid);
     } else {
        // asynchronously wait for a customer
        return await stripe.customers.retrieve(customerId);
     }
 }
...