const session = await stripe.checkout.sessions.create({
payment_method_types: ['card'],
line_items: lineItems,
mode: 'payment',
success_url: 'http://localhost:80/OBV/success',
cancel_url: 'http://localhost:80/OBV/cancel',
invoice_creation: {
enabled: true,
},
});
const retrievedSession = session.id;
console.log('retrieved session : ' + retrievedSession);
const sessionInvoice = session.invoice;
console.log('session Invoice : ' + sessionInvoice);
这是我在控制台中得到的响应:[编辑1]:回应@Tarzan 评论:
现在我在结帐会话完成后、加载成功页面后放置检索到的请求:
const successPage = async(ctx:any)=>{
try{
const session = await stripe.checkout.sessions.retrieve(
retrievedSession
);
console.log('session id : ' + session.id);
const sessionInvoice = session.invoice;
console.log('session Invoice : '+ sessionInvoice);
const invoice = await stripe.invoices.retrieve(
sessionInvoice
);
const invoicePdf = invoice.invoice_pdf;
console.log('invoice pdf url : '+ invoicePdf);
/* ctx.cookies.set('invoice_pdf', invoicePdf);*/
ctx.render('./OBV/checkout/success.ejs',{Voyant: true, invoiceUrl: 'Empty'});
console.log('success page reached !');
}catch(err) {
ctx.response.status = 200;
ctx.response.body = {
success: false,
msg: err.toString()
}
}finally{
await client.end();
}
const successPage = async(ctx:any)=>{
try{
const session = await stripe.checkout.sessions.retrieve(retrievedSession,{expand: ["invoice"]});
console.log('session invoice : ' + session.invoice);
ctx.render('./OBV/checkout/success.ejs',{Voyant: true, invoiceUrl: 'Empty'});
console.log('success page reached !');
}catch(err) {
ctx.response.status = 200;
ctx.response.body = {
success: false,
msg: err.toString()
}
}finally{
await client.end();
}
};
结帐会话完成之前不会创建发票。您似乎正在尝试在创建时访问发票字段。这是预期的结果。
通常,发票创建是异步发生的,在结帐会话完全完成之前(发票已创建并分配给结帐会话),您的客户将被重定向到成功页面。一个快速修复方法是设置一个监听
checkout.session.completed
这是履行结账订单的最佳方式,如此处
checkout.session.completed
已发送到您的 Webhook 端点,然后再将客户重定向到您的成功页面,此时应填充发票。
在一个单独但也相关的说明中,将 retrievedSession
passed
到您的成功页面。