#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. Рад, что это помогло 🙂