You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:16:06