Firebase Functions集成PayPal支付遇日志错误,请求技术协助
解决Firebase Cloud Functions集成PayPal Payouts的问题
我来帮你一步步排查和解决这两天遇到的问题:
问题1:SYNC_MODE_NOT_APPLICABLE 错误
你已经意识到要把sync_mode改为false,但这里有个细节要注意:必须用布尔值false,而不是字符串类型的'false'。你的原代码里sync_mode是字符串'true',改成布尔值后才能正确触发PayPal要求的异步模式(同步模式确实已经对新集成弃用了)。
另外还有个小优化:不需要把付款请求对象payReq转成JSON字符串,PayPal的REST SDK直接接受JavaScript对象,转字符串反而可能引发不必要的解析问题。修改后的代码片段如下:
const functions = require('firebase-functions'); const paypal=require('paypal-rest-sdk'); const admin=require('firebase-admin'); admin.initializeApp(functions.config().firebase); paypal.configure({ mode:"sandbox", client_id:functions.config().paypal.client_id, client_secret:functions.config().paypal.client_secret }); exports.payout = functions.https.onRequest((request, response) => { const sender_batch_id = Math.random().toString(36).substring(9); // 改为布尔值false const sync_mode = false; // 直接用对象,不用JSON.stringify const payReq = { sender_batch_header: { sender_batch_id: sender_batch_id, email_subject: "You have a payment" }, items: [ { recipient_type: "EMAIL", amount: { value: 0.1, currency: "USD" }, receiver: "ammah6600@crowns.com", note: "Thank you.", sender_item_id: "item_3" } ] }; paypal.payout.create(payReq,sync_mode,(error,payout) =>{ if(error){ console.warn(error.response); response.status(500).end(); throw error; }else{ console.info("payout created"); console.info(payout); response.status(200).end(); } }); });
问题2:INSUFFICIENT_FUNDS 错误
这个错误很明确:你的PayPal沙箱商户账户余额不足,无法发起这笔付款。解决步骤很简单:
- 登录PayPal开发者平台,进入沙箱账户管理页面
- 找到你用来发起付款的商户沙箱账户,点击「查看/编辑账户」
- 在余额板块,点击「添加资金」,选择USD币种并输入足够的金额(比如10 USD)
- 保存后重新测试你的Cloud Function
另外补充一点:你在埃及不影响沙箱测试,只要商户和收款账户都是有效的美国区沙箱账户就没问题,重点是确保沙箱账户有足够的测试资金。
额外检查建议
- 确认Firebase环境变量里的
paypal.client_id和paypal.client_secret是沙箱环境的凭证,别不小心用了生产环境的 - 检查收款邮箱
ammah6600@crowns.com是否是已验证的沙箱账户,未验证的账户可能无法接收付款 - 可以直接去PayPal沙箱的交易日志里查看更详细的失败细节,方便进一步排查
内容的提问来源于stack exchange,提问作者Amr Mohammed
相关产品推荐
相关产品推荐

