如何将Stripe Session的unit_amount转换为实际产品价格(AED币种)
问题描述
我正在使用Stripe支付网关,采用AED币种,实际产品价格为100.00 AED,支付页面显示金额正确,但打印会话详情时,unit_amount显示为10000。
我的代码如下:
return { price_data: { currency: "aed", product_data: { name: product.product_name, // images: [productImagePath], metadata: { address: JSON.stringify(address) }, }, unit_amount: parseInt(product.product_price) * 100, }, quantity: parseInt(product.product_qty), }; } ); console.log("Name:", lineItems);
我希望打印lineItems时,unit_amount显示为100.00而非10000,请问如何实现?
解决方案
Stripe的unit_amount字段要求传入对应币种的最小单位数值(AED的最小单位是费尔,1迪拉姆=100费尔),所以100.00 AED对应10000费尔,这是Stripe API的强制要求,支付页面显示正常就是因为这个逻辑是正确的。
如果只是想在控制台打印时看到100.00的格式,绝对不能修改传给Stripe的unit_amount值(否则会导致扣款金额错误),只需在打印前对数值做格式化处理即可:
示例代码:
// 保留原有生成lineItems的逻辑 const lineItems = { price_data: { currency: "aed", product_data: { name: product.product_name, metadata: { address: JSON.stringify(address) }, }, unit_amount: parseInt(product.product_price) * 100, }, quantity: parseInt(product.product_qty), }; // 打印时格式化unit_amount为带两位小数的格式 console.log("Name:", { ...lineItems, price_data: { ...lineItems.price_data, unit_amount: (lineItems.price_data.unit_amount / 100).toFixed(2) } });
这样既不会影响Stripe的支付流程,又能在控制台看到你需要的100.00格式。
内容的提问来源于stack exchange,提问作者ajo
相关产品推荐
相关产品推荐

