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

如何在Firebase上实现回调端点以接收第三方API支付通知

Firebase实现第三方支付回调端点方案

在Firebase生态中,你可以通过Cloud Functions for Firebase的HTTP触发器来实现公网可访问的回调端点,完整实现步骤如下:

前置准备

  • 确认你的Firebase项目已升级到Blaze付费计划,Cloud Functions接收公网请求、访问第三方服务需使用付费计划
  • 本地已安装Firebase CLI,且完成账号登录、项目关联操作
  • 已在本地完成Cloud Functions项目初始化

步骤1:编写HTTP触发的回调云函数

你可以参考以下示例代码编写回调逻辑,包含请求校验、数据解析、实时数据库更新三个核心环节:

const functions = require("firebase-functions");
const admin = require("firebase-admin");
// 初始化Firebase Admin SDK
admin.initializeApp();
// 初始化实时数据库实例
const realtimeDB = admin.database();

// 支付回调专用云函数
exports.paymentNotifyCallback = functions.https.onRequest(async (req, res) => {
  // 拦截非POST请求,直接返回405错误
  if (req.method !== "POST") {
    return res.status(405).send("Method Not Allowed");
  }

  try {
    // 1. 签名校验:替换为第三方支付API要求的验签逻辑,防止伪造请求
    // 通常需要从请求头获取平台签名,和本地计算的签名做比对
    const thirdPartySign = req.headers["x-pay-platform-sign"];
    // 示例验签逻辑,需替换为实际规则
    // const isValid = verifySign(thirdPartySign, req.body);
    // if (!isValid) return res.status(403).send("Invalid Sign");

    // 2. 解析回调数据,字段名需和第三方返回的字段对应
    const notifyData = req.body;
    const orderId = notifyData.out_trade_no; // 商户侧订单号字段
    const payStatus = notifyData.trade_status; // 支付状态字段

    // 3. 更新实时数据库对应订单数据
    await realtimeDB.ref(`/user_orders/${orderId}`).update({
      pay_status: payStatus,
      pay_success_time: admin.database.ServerValue.TIMESTAMP,
      raw_notify_data: notifyData // 可选:存储原始回调数据便于排查问题
    });

    // 按第三方要求返回成功响应,避免重复回调
    return res.status(200).send("SUCCESS");
  } catch (err) {
    functions.logger.error("支付回调处理失败", err);
    return res.status(500).send("PROCESS ERROR");
  }
});

步骤2:部署云函数获取回调地址

在本地Functions项目目录下执行部署命令:
firebase deploy --only functions:paymentNotifyCallback
部署完成后,终端会输出云函数的公网访问地址,格式为https://<部署区域>-<你的Firebase项目ID>.cloudfunctions.net/paymentNotifyCallback,该地址即为你需要传给第三方API的callbackUrl参数值。

注意事项

  • 必须严格完成请求签名校验,不要直接信任所有发送到回调地址的请求,避免伪造支付通知导致业务损失
  • 必须按照第三方API的要求返回指定格式的成功响应,否则第三方会重复推送支付通知
  • 回调处理逻辑需要做幂等性判断,避免同一订单的多次回调触发重复业务操作
  • 如果回调处理逻辑耗时较长,建议先存储回调数据后立即返回响应,后续通过云数据库触发器异步处理后续业务,避免触发云函数超时限制

内容的提问来源于stack exchange,提问作者Philip Mintah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:09:02