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

基于Firebase后端的Android/iOS国际支付集成方案问询(含PayPal适配)

我刚好做过类似的跨端支付项目,结合Firebase+PayPal的踩坑经验,给你梳理下全流程实操干货:

1. Firebase后端+Android/Xcode集成PayPal简易指南

Android端(Android Studio)

  • 第一步:PayPal开发者平台配置
    先去PayPal开发者后台创建REST应用,获取沙箱环境的CLIENT_ID(先测沙箱,别碰生产),一定要把你的APP包名添加到PayPal应用的「Allowed Android Package Names」里,不然会直接触发支付失败。
  • 第二步:添加项目依赖
    在app模块的build.gradle里加稳定版依赖(别用测试版,我之前踩过兼容性坑):
    implementation 'com.paypal.sdk:paypal-android-sdk:2.16.0'
    
  • 第三步:初始化PayPal服务
    在支付页面或者Application类里初始化配置:
    PayPalConfiguration config = new PayPalConfiguration()
            .environment(PayPalConfiguration.ENVIRONMENT_SANDBOX)
            .clientId("你的沙箱CLIENT_ID");
    
  • 第四步:发起支付请求
    用户点击支付按钮时,构建订单并启动PayPal支付页面:
    PayPalPayment payment = new PayPalPayment(
            new BigDecimal("10.00"), 
            "USD", 
            "会员订阅费",
            PayPalPayment.PAYMENT_INTENT_SALE
    );
    Intent intent = new Intent(this, PaymentActivity.class);
    intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
    intent.putExtra(PaymentActivity.EXTRA_PAYMENT, payment);
    startActivityForResult(intent, 1001); // 自定义请求码
    
  • 第五步:Firebase后端验证(核心!)
    客户端回调只能拿到表面结果,必须用后端验证防止篡改。用Firebase云函数写个验证接口:
    const functions = require("firebase-functions");
    const axios = require("axios");
    
    exports.verifyPayPalPayment = functions.https.onCall(async (data, context) => {
      const orderId = data.orderId;
      const clientId = functions.config().paypal.client_id;
      const secret = functions.config().paypal.secret;
      const auth = Buffer.from(`${clientId}:${secret}`).toString("base64");
    
      try {
        const response = await axios.get(
          `https://api-m.sandbox.paypal.com/v2/checkout/orders/${orderId}`,
          { headers: { "Authorization": `Basic ${auth}` } }
        );
        if (response.data.status === "COMPLETED") {
          // 这里可以写更新Firestore订单状态的逻辑
          return { success: true, orderInfo: response.data };
        }
        return { success: false, message: "支付未完成" };
      } catch (error) {
        functions.logger.error("PayPal验证失败:", error);
        return { success: false, message: error.message };
      }
    });
    
    客户端拿到支付成功的orderId后,立刻调用这个云函数验证,再更新本地UI。

iOS端(Xcode)

  • 第一步:PayPal配置
    在PayPal开发者后台添加APP的Bundle ID到「Allowed iOS Bundle IDs」,确保和Xcode里的Bundle ID完全一致。
  • 第二步:集成SDK
    用CocoaPods添加依赖:
    pod 'PayPal-iOS-SDK'
    
    执行pod install后,打开.xcworkspace文件。
  • 第三步:初始化PayPal
    在AppDelegate里完成初始化:
    import PayPalMobile
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
      PayPalMobile.initialize(clientId: "你的沙箱CLIENT_ID", environment: .sandbox)
      return true
    }
    
  • 第四步:发起支付
    在支付页面构建订单并弹出PayPal支付窗口:
    let payment = PayPalPayment(
      amount: NSDecimalNumber(string: "10.00"),
      currencyCode: "USD",
      shortDescription: "会员订阅费",
      intent: .sale
    )
    let config = PayPalConfiguration()
    let paymentVC = PayPalPaymentViewController(payment: payment, configuration: config, delegate: self)
    present(paymentVC!, animated: true)
    
  • 第五步:回调与后端验证
    实现PayPalPaymentDelegate协议,拿到orderId后调用和Android端相同的Firebase云函数验证,逻辑完全复用。

2. Adaptive Payments集成方法

先说明:PayPal现在更推荐用v2的Payouts API做分账,但如果你的需求是复杂多方转账(比如平台+商家+达人分润),Adaptive Payments还是能用的,实操步骤如下:

  • 第一步:申请启用权限
    登录PayPal开发者后台,找到你的应用,申请启用Adaptive Payments权限,一般1-2天就能通过审核。
  • 第二步:后端创建支付请求(Firebase云函数)
    Adaptive Payments主要靠后端处理,客户端只需要引导用户跳转支付:
    exports.createAdaptivePayment = functions.https.onCall(async (data, context) => {
      const clientId = functions.config().paypal.client_id;
      const secret = functions.config().paypal.secret;
      const auth = Buffer.from(`${clientId}:${secret}`).toString("base64");
    
      const payload = {
        actionType: "PAY",
        currencyCode: "USD",
        receiverList: {
          receiver: [
            { email: "平台邮箱", amount: "7.00" },
            { email: "商家邮箱", amount: "2.00" },
            { email: "达人邮箱", amount: "1.00" }
          ]
        },
        returnUrl: "your-app://payment-success", // 自定义URL Scheme回调
        cancelUrl: "your-app://payment-cancel"
      };
    
      try {
        const response = await axios.post(
          "https://svcs.sandbox.paypal.com/AdaptivePayments/Pay",
          payload,
          { headers: { 
            "Authorization": `Basic ${auth}`,
            "X-PAYPAL-REQUEST-DATA-FORMAT": "JSON"
          }}
        );
        const payKey = response.data.payKey;
        const redirectUrl = `https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_ap-payment&paykey=${payKey}`;
        return { success: true, redirectUrl };
      } catch (error) {
        functions.logger.error("Adaptive支付创建失败:", error);
        return { success: false, message: error.message };
      }
    });
    
  • 第三步:客户端引导支付
    拿到redirectUrl后,用WebView或者直接打开PayPal APP跳转,用户完成支付后,后端调用PaymentDetails API查询状态,再更新Firestore里的订单数据。
  • 踩坑提醒:所有收款方的PayPal账号必须完成验证,否则会直接支付失败,我之前因为这个卡了半天。

3. PayPal替代支付网关及Firebase集成方案

如果PayPal的费率、地区覆盖不符合需求,推荐以下几个实操性强的替代:

Stripe(最推荐)

  • 适用场景:多币种支持、全球覆盖、订阅/一次性支付都友好,开发者文档很清晰。
  • 集成实操:
    • 客户端:Android加implementation 'com.stripe:stripe-android:20.13.0',iOS用CocoaPods加pod 'Stripe',集成官方支付组件即可。
    • 后端:Firebase云函数创建Payment Intent:
      exports.createStripePaymentIntent = functions.https.onCall(async (data, context) => {
        const stripe = require("stripe")(functions.config().stripe.secret_key);
        const paymentIntent = await stripe.paymentIntents.create({
          amount: data.amount, // 单位是分,1000=10美元
          currency: data.currency,
          metadata: { order_id: data.orderId }
        });
        return { clientSecret: paymentIntent.client_secret };
      });
      
    • 客户端拿到clientSecret后调用Stripe组件完成支付,后端通过Webhook接收支付状态通知。

Google Pay/Apple Pay(本地支付)

  • 适用场景:针对系统原生用户,支付体验流畅,用户信任度高,费率比PayPal低。
  • 集成实操:
    • Google Pay:Android端配置支付参数,调用API获取支付凭证,后端用Firebase云函数把凭证发送到Stripe/Google Pay官方接口验证。
    • Apple Pay:iOS端在Xcode开启Apple Pay权限,配置开发者证书,创建支付请求拿到凭证后,后端验证并完成交易。

Adyen

  • 适用场景:全球多支付方式支持(含支付宝、微信、本地银行卡),适合面向全球用户的APP。
  • 集成实操:客户端集成Adyen SDK,后端用Firebase云函数调用Adyen Checkout API创建支付会话,客户端完成支付后,后端接收Webhook确认状态。

内容的提问来源于stack exchange,提问作者Arjun Ram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:50:49