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

基于React Native与Expo实现Apple和Google Pay的技术求助

React Native + Expo 实现 Apple Pay/Google Pay(无Stripe)

Apple Pay 实现步骤

  • 前置准备
    • 苹果开发者账号已开通Apple Pay服务,配置好Merchant ID及对应支付证书
    • Expo项目已关联苹果开发者账号(通过expo build:ios或eas build流程完成配置)
  • 安装依赖:expo install expo-apple-pay
  • 核心代码示例:
    import * as ApplePay from 'expo-apple-pay';
    
    // 检测设备是否支持Apple Pay
    const checkApplePaySupport = async () => {
      return await ApplePay.isAvailableAsync();
    };
    
    // 构建支付请求参数
    const buildApplePayRequest = () => ({
      countryCode: 'CN', // 替换为业务对应地区编码
      currencyCode: 'CNY',
      merchantIdentifier: 'com.your.merchant.id', // 替换为你的Merchant ID
      supportedNetworks: ['unionpay', 'visa'], // 配置支持的卡组织
      merchantCapabilities: ['3DS', 'credit', 'debit'],
      total: {
        label: '你的商户名称',
        amount: '19.99',
        type: 'final',
      },
    });
    
    // 发起Apple Pay支付
    const triggerApplePay = async () => {
      const paymentRequest = buildApplePayRequest();
      try {
        const paymentResult = await ApplePay.requestPaymentAsync(paymentRequest);
        if (paymentResult.status === 'success') {
          // 将Apple返回的支付凭证传给后端完成交易验证
          const paymentToken = paymentResult.payment.token;
          // 调用后端支付接口
        }
      } catch (err) {
        console.error('Apple Pay支付失败:', err);
      }
    };
    
  • 注意事项
    • 仅真实苹果设备支持Apple Pay,模拟器无法测试
    • 支付凭证必须由后端对接苹果支付接口完成验证,前端仅负责收集传递
    • 支付请求参数需与后端配置严格一致,否则会触发支付失败

Google Pay 实现步骤

  • 前置准备
    • 谷歌开发者账号已完成Google Pay商户信息配置,获取Merchant ID
    • Expo安卓项目已完成基础权限配置(Expo会自动处理Google Pay相关权限)
  • 安装依赖:expo install expo-google-pay
  • 核心代码示例:
    import * as GooglePay from 'expo-google-pay';
    
    // 检测设备是否支持Google Pay
    const checkGooglePaySupport = async () => {
      return await GooglePay.isAvailableAsync({
        environment: GooglePay.Environment.TEST, // 上线后切换为PRODUCTION
        allowedPaymentMethods: ['CARD'],
      });
    };
    
    // 构建Google Pay支付请求
    const buildGooglePayRequest = () => ({
      environment: GooglePay.Environment.TEST,
      merchantInfo: {
        merchantId: 'your-google-merchant-id', // 替换为你的Google Merchant ID
        merchantName: '你的商户名称',
      },
      allowedPaymentMethods: [
        {
          type: 'CARD',
          parameters: {
            allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],
            allowedCardNetworks: ['VISA', 'MASTERCARD'],
          },
          tokenizationSpecification: {
            type: 'PAYMENT_GATEWAY',
            parameters: {
              gateway: 'your-custom-gateway', // 与后端支付流程对应的网关标识
              gatewayMerchantId: 'your-gateway-merchant-id',
            },
          },
        },
      ],
      transactionInfo: {
        totalPriceStatus: 'FINAL',
        totalPrice: '19.99',
        currencyCode: 'CNY',
        countryCode: 'CN',
      },
    });
    
    // 发起Google Pay支付
    const triggerGooglePay = async () => {
      const paymentRequest = buildGooglePayRequest();
      try {
        const paymentResult = await GooglePay.requestPaymentAsync(paymentRequest);
        if (paymentResult.status === 'success') {
          // 将Google返回的支付数据传给后端完成验证
          const paymentData = paymentResult.paymentData;
          // 调用后端支付接口
        }
      } catch (err) {
        console.error('Google Pay支付失败:', err);
      }
    };
    
  • 注意事项
    • 测试环境可使用谷歌官方提供的测试卡号,无需真实卡片
    • 上线前需切换为Environment.PRODUCTION,并确保商户信息通过谷歌审核
    • tokenizationSpecification参数需与后端支付逻辑匹配,不可随意配置

定制化替代方案

若Expo官方模块无法满足定制需求,可基于Expo模块工具链开发自定义原生模块:

  • iOS端:基于Apple Pay原生SDK编写Swift/Objective-C代码,通过Expo桥接层暴露给React Native调用
  • 安卓端:基于Google Pay原生SDK编写Kotlin/Java代码,实现支付请求、结果回调的桥接逻辑
  • 核心逻辑为:前端触发支付请求→原生层调用系统支付组件→将支付凭证传回前端→前端传给后端完成验证

核心原则提醒

  • 所有支付核心逻辑(金额校验、凭证验证、交易确认)必须放在后端,前端仅负责触发支付和传递凭证
  • 严格遵循苹果、谷歌的支付规范配置商户信息,否则会导致支付功能无法正常使用或应用审核不通过

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:55:16