如何发送含meta字段的HTTP POST请求?Flutterwave接口问题求助
问题:Flutterwave v3/transfers接口含meta字段请求失败,普通请求返回200但未达预期
我需要调用Flutterwave的v3/transfers转账接口,发送包含meta嵌套对象的JSON格式POST请求。用Postman发送带meta字段的请求体时直接报错;发送不含meta的普通请求虽返回HTTP 200,但实际没达到预期效果。以下是相关请求示例和Node.js后端代码,求排查问题。
带meta的请求体
{ "amount": 500, "narration": "Test Int'l bank transfers", "currency": "USD", "beneficiary_name": "Mark Cuban", "meta": { "AccountNumber": "09182972BH", "RoutingNumber": "0000000002993", "SwiftCode": "ABJG190", "BankName": "BANK OF AMERICA, N.A., SAN FRANCISCO, CA", "BeneficiaryName": "Mark Cuban", "BeneficiaryAddress": "San Francisco, 4 Newton", "BeneficiaryCountry": "US" } }
普通请求体
{ "account_bank":"044", "account_number":"09182972BH", "RoutingNumber":"0000000002993", "SwiftCode": "ABJG190", "amount":"450.40", "email":"john_kross2@yopmail.com", "narration":"test USD transfer", "currency":"NGN", "reference":"akhlm-pstmnpyt-rfxx007_PMCKDU_6876677", "debit_currency":"USD" }
Node.js后端代码
router.post("/us-transfer", async (req, res, next) => { try { if ( !req.headers.authorization || !req.headers.authorization.startsWith("Bearer ") || !req.headers.authorization.split(" ")[1] ) { return res.status(422).json({ message: "Please Provide Token!" }); } var AccountNumber = req.body.AccountNumber; var RoutingNumber = req.body.RoutingNumber; var SwiftCode = req.body.SwiftCode; var amount = req.body.amount; var narration = req.body.narration; var email = req.body.email; var currency = req.body.currency; var reference = req.body.refernce; var debit_currency = req.body.debit_currency; var beneficiary_name = req.body.beneficiary_name; url = "https://api.flutterwave.com/v3/transfers"; await fetch(url, { method: "POST", headers: { "Accept": "application/json", "Content-type": "application/json", "Authorization": "Bearer FLWSECK_TEST-153740d351951b5f6d5ae8b903e0c467-X", }, body: JSON.stringify({ AccountNumber: AccountNumber, RoutingNumber : RoutingNumber, SwiftCode : SwiftCode, amount: amount, narration: narration, currency: currency, reference: reference, debit_currency: debit_currency, beneficiary_name: beneficiary_name, }), }) .then((response) => response.json()) .then(async (json) => { const debit = await User.find({ email: email}); const debit_balance = parseInt(debit[0].balance); const debit_amt = debit_balance - amount; await User.findOneAndUpdate({email : email}, {$set: {balance: debit_amt}}); const transactions = new Trans({ email: email, narration: narration, credit: 0.0, debit: amount, amount: amount, }); try { transactions.save(); //res.send(savedUser); console.log("transaction saved"); } catch (err) { //res.status(400).send(err); console.log(err); } //sendTransferConfirmation(email); return res.send({ error: false, data: json, message: "US Bank Transfer Complete" }); }) .catch((err) => { throw err; }); } catch (err) { next(err); } });
核心问题排查及修复建议
未读取
meta嵌套字段
带meta的请求中,银行信息都嵌套在meta对象下,但后端直接从req.body根节点取AccountNumber等字段,导致这些字段值为undefined,参数缺失引发接口报错。
修复:从req.body.meta中读取对应字段:var AccountNumber = req.body.meta?.AccountNumber; var RoutingNumber = req.body.meta?.RoutingNumber; var SwiftCode = req.body.meta?.SwiftCode;普通请求参数不匹配
普通请求里的account_number等字段,后端没有对应读取,导致传给Flutterwave的参数不全/错误,接口返回200但未执行正确转账逻辑。
修复:调整参数读取逻辑,比如var AccountNumber = req.body.account_number;,确保和请求体字段对应。拼写错误
后端代码中var reference = req.body.refernce;是拼写错误,应为req.body.reference,会导致reference字段值为undefined,影响接口有效性。错误处理不完整
fetch的catch块仅抛出错误未返回响应给前端;更新余额、保存交易记录失败时仅打印错误,前端无法感知异常,易导致数据不一致。
修复:在catch块返回错误响应,同时在数据库操作失败分支返回前端错误信息。
内容的提问来源于stack exchange,提问作者Pamela
相关产品推荐
相关产品推荐

