У меня возникла проблема с организацией моего кода, и я не мог понять, как решить эту проблему в течение последних 48 часов. Мой мозг в основном застрял, и я хотел бы помочь, как найти решение. Я использую expressjs для сервера и Svelte для фронта.
Проблема : Я могу создавать клиентов, методы оплаты, платежные намерения и прикреплять метод оплаты к клиенту, устанавливать указанный метод оплаты в качестве метода оплаты по умолчанию для своего клиента... и т. д.
Чтобы отобразить методы оплаты клиента, я должен использовать Stripe.paymentMethods.list, который возвращает массив карт. Объект карты не содержит поля, указывающего, что карта является способом оплаты по умолчанию для клиента.
Default_payment_method, в котором хранится метод оплаты по умолчанию, находится в объекте клиента. Итак, мне нужно получить объект клиента, и здесь мне нужна помощь. Как мне решить эту проблему, как получить доступ к Stripe.paymentMethods.list(), чтобы получить список карт и stripe.customer.retrieve(), чтобы у меня был доступ к методу оплаты по умолчанию в моем дескрипторе сервера, чтобы я мог вернуть всю эту информацию спереди?
// 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.info("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({})) с двумя отдельными функциями, могу ли я объединить их обе и вернуть один возврат?
Похоже, вы прошли 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}))
Рад, что помогло :)
Спасибо. Оно работает. В итоге у меня было два обработчика сервера для возврата каждого объекта, и я объединил их на переднем плане, но это было много работы. Теперь я знаю, как сделать это проще :) ... Я пытаюсь использовать async/await больше, но я все еще не на 100% осознаю преимущества. Звездочки были оценены - после того, как я так долго смотрел на экран, я не смогу найти свою опечатку (я написал этот вопрос так расстроен, что не обратил внимания на то, что я печатал) ... Большое спасибо ты.