Stripe — способ оплаты клиента по умолчанию отсутствует в объекте card

#javascript #express #stripe-payments

#javascript #экспресс #stripe-платежи

Вопрос:

У меня проблема с тем, как организовать мой код, и я не мог понять, как решить эту проблему в течение последних 48 часов. Мой мозг в основном застрял, и я хотел бы помочь, как найти решение. Я использую expressjs для сервера и Svelte для интерфейса.

Проблема: я могу создавать customers, PaymentMethod, paymentIntents и присоединять PaymentMethod к customer, устанавливать указанный PaymentMethod в качестве метода оплаты по умолчанию для своего клиента … и т. Д

Для отображения методов оплаты клиентов я должен использовать Stripe.paymentMethods.список, который возвращает массив карт. Объект card не содержит никакого поля, указывающего, что карта является способом оплаты по умолчанию для клиента.

default_payment_method, который хранит метод оплаты по умолчанию, находится в объекте customer . Итак, мне нужно получить объект customer, и здесь мне нужна помощь. Как мне решить эту проблему, как получить доступ к Stripe.paymentMethods.list(), чтобы получить список карт и stripe.customer.retrieve(), чтобы у меня был доступ к defaultpaymentmethod в моем дескрипторе сервера, чтобы я мог вернуть всю эту информацию на передний план?

 // get cards
stripe.paymentMethods.list({
        customer: customer,
        type: 'card'
    }).then(cards => {
        //I can return cards but not customer
        return res.end(JSON.stringify({ cards: cards}));
        }).catch(err => { console.log("err message :", err.message)});
});    

// now get customer
stripe.customers.retrieve(
  'cus_Ib01d7QtMdz2ez'
).then(customer=>{ 
      // I can return customer but not cards
     return res.end(JSON.stringify({customer : customer}));
});

// next step, send customer and cards to the frontst 

return res.end(JSON.Stringfy({cards : cards; customer : customer}))
    ?????
 

Как вернуть объекты «карты и клиент», чтобы я мог показать клиенту его / ее карты и какой из них является способом оплаты по умолчанию. Как использовать res.end(JSON.stringfy({}))
могу ли я объединить их обе и вернуть один возврат с помощью двух отдельных функций?

Ответ №1:

Похоже, вы прошли 80% пути. Вы определенно можете вернуть оба объекта, хотя я мог бы рекомендовать возвращать только те конкретные фрагменты информации, которые вам нужны. Вместо ответа в .then() блоке используйте async/await для получения обоих ответов.

 const cards = await stripe.paymentMethods.list({
    customer: 'cus_123',
    type: 'card'
})

const customer = stripe.customers.retrieve(
  'cus_123'
)

return res.send(JSON.Stringify({cards : cards, customer : customer}))
// or, send json directly
// return res.json({cards : cards, customer : customer})
 

(Кроме того, обратите внимание, что я заменил точку ; с запятой , и исправил опечатку):

return res.end(JSON.String**i**fy({cards : cards**,** customer : customer}))

Комментарии:

1. Спасибо. Это работает. В итоге у меня получилось два серверных обработчика для возврата каждого объекта, и я объединил их на передней панели, но это была большая работа. Теперь я знаю, как сделать это простым способом :)… Я стараюсь больше использовать async / await, но я все еще не на 100% осознаю эту выгоду. Звездочки были оценены по достоинству — после того, как я так долго смотрел на экран, я не смогу найти свою опечатку (я написал этот вопрос так расстроен, и я не обращал внимания на то, что я печатал) … Большое спасибо.

2. Рад, что это помогло 🙂