本地Node.js应用集成Flutterwave库报错:Cannot read properties of undefined
TypeError: Cannot read properties of undefined (reading 'create') 解决方法(Flutterwave Node.js集成)
错误原因
这个错误说明flutterwave.Payment是undefined,核心问题是Flutterwave SDK实例没有正确初始化,或者你使用的库版本/导入方式不符合官方规范。
解决方案
1. 安装正确的Flutterwave SDK版本
Flutterwave官方推荐使用v3版本的Node.js SDK,先卸载旧版本(如果存在),安装最新版:
npm uninstall flutterwave-node npm install flutterwave-node-v3
2. 正确初始化Flutterwave实例
你缺少SDK实例的初始化步骤,必须用你的API密钥创建实例后才能调用Payment、Transaction等方法。在你的路由/控制器文件顶部添加以下代码:
const Flutterwave = require('flutterwave-node-v3'); // 从环境变量读取密钥,确保.env文件配置了对应的密钥 const flutterwave = new Flutterwave( process.env.FLW_PUBLIC_KEY, process.env.FLW_SECRET_KEY );
注意:FLW_PUBLIC_KEY和FLW_SECRET_KEY需要从Flutterwave后台获取,确保是对应环境(测试/生产)的有效密钥。
3. 验证实例有效性
初始化后,可以添加一行日志确认实例结构:
console.log('Flutterwave instance:', flutterwave);
运行后检查控制台输出,确认flutterwave对象包含Payment和Transaction属性,确保后续调用不会报错。
4. 修正业务代码
你的现有支付和回调逻辑无需修改,只要确保使用的是正确初始化的flutterwave实例即可。
完整修正后的代码示例
const Flutterwave = require('flutterwave-node-v3'); const dotenv = require('dotenv'); const appointmentModel = require('./your-appointment-model-path'); // 替换为你的模型路径 // 加载环境变量 dotenv.config(); // 初始化Flutterwave实例 const flutterwave = new Flutterwave( process.env.FLW_PUBLIC_KEY, process.env.FLW_SECRET_KEY ); const paymentFlutterwave = async (req, res) => { try { const { appointmentId } = req.body; const appointmentData = await appointmentModel.findById(appointmentId); if (!appointmentData || appointmentData.cancelled) { return res.json({ success: false, message: "Appointment Cancelled or not found", }); } // Payload for Flutterwave payment const payload = { tx_ref: `tx_${appointmentId}_${Date.now()}`, amount: appointmentData.amount, currency: process.env.CURRENCY || "NGN", redirect_url: process.env.REDIRECT_URL, payment_options: "card, banktransfer", customer: { email: "testing@gmail.com", phonenumber: "750678786898", name: "test customer", }, customizations: { title: "Appointment Payment", description: `Payment for appointment ID ${appointmentId}`, logo: "https://your-logo-url.com/logo.png", }, }; // Initialize payment const response = await flutterwave.Payment.create(payload); if (response.status === "success") { res.json({ success: true, data: response }); } else { res.json({ success: false, message: response.message }); } } catch (error) { console.error(error); res.json({ success: false, message: error.message }); } }; const paymentCallback = async (req, res) => { try { const transactionId = req.query.transaction_id; if (!transactionId) { return res.status(400).send("Transaction ID is required."); } const response = await flutterwave.Transaction.verify({ id: transactionId }); if (response.status === "success" && response.data.status === "successful") { const appointmentId = response.data.tx_ref.split('_')[1]; await appointmentModel.findByIdAndUpdate(appointmentId, { paid: true }); res.status(200).send("Payment verified successfully!"); } else { res.status(400).send("Payment verification failed."); } } catch (error) { console.error("Error verifying payment:", error); res.status(500).send("An error occurred during payment verification."); } }; module.exports = { paymentFlutterwave, paymentCallback };
额外注意事项
- 确保
dotenv库已安装(执行npm install dotenv),用于加载.env文件中的环境变量 - 测试环境使用Flutterwave提供的测试卡号验证支付,避免使用真实银行卡信息
内容的提问来源于stack exchange,提问作者Ufuoms
相关产品推荐
相关产品推荐

