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

使用react-native-apay集成Apple Pay时金额未从钱包扣除的问题

Apple Pay支付后未扣款问题排查与解决

核心问题分析

你当前的代码仅完成了Apple Pay的前端授权流程,但没有发起实际的扣款请求。Apple Pay的requestPayment方法仅用于获取用户的支付授权令牌,真正的扣款操作需要你的后端服务结合支付网关(如对应银行支付接口、专业支付服务商接口等)完成。

具体修复步骤

  1. 处理支付令牌,发起后端扣款请求
    在requestPayment的回调中,必须将返回的paymentData(包含关键的支付令牌paymentToken)发送到你的后端服务,由后端调用支付网关的接口完成实际扣款。示例修改后的代码:
requestData = {
  merchantIdentifier: 'merchant.dumy.pkg',
  supportedNetworks: ['mastercard', 'visa'],
  countryCode: 'SA',
  currencyCode: 'SAR',
  id: sessionId,
  paymentSummaryItems: [
    {
      amount: 100,
      label: 'dummy', // 修复原代码中字符串未闭合的语法错误
    }
  ],
};

ApplePay.requestPayment(requestData)
  .then(paymentData => {
    // 第一步:将支付令牌发送到后端发起扣款
    fetch('你的后端扣款接口地址', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        paymentToken: paymentData.paymentToken,
        amount: 100,
        currency: 'SAR'
      })
    })
    .then(response => response.json())
    .then(backendResult => {
      // 根据后端扣款结果,通知Apple Pay完成流程
      if (backendResult.success) {
        ApplePay.complete(ApplePay.SUCCESS);
      } else {
        ApplePay.complete(ApplePay.FAILURE);
      }
    })
    .catch(err => {
      // 处理后端请求失败的情况
      ApplePay.complete(ApplePay.FAILURE);
    });
  })
  .catch(err => {
    // 处理Apple Pay授权失败的情况
    console.error('Apple Pay授权失败:', err);
  });
  1. 修正代码语法错误
  • 原代码中label: 'dummy,缺少闭合引号,会导致语法错误,已在上述代码中修复。
  • 原代码catch(){语法错误,应改为catch(err => {}),确保错误能被正常捕获处理。
  1. 验证商家配置
  • 确认苹果开发者后台中,你的merchantIdentifier已正确配置,并且关联了有效的Apple Pay Merchant ID证书。
  • 检查后端服务是否已正确配置支付网关的密钥、商户信息,确保能正常调用扣款接口。
  1. 测试环境注意事项
  • 沙箱测试环境需使用苹果官方提供的沙箱测试银行卡,真实银行卡在沙箱环境不会产生实际扣款。
  • 沙箱环境下的扣款仅为模拟流程,需切换到生产环境才能进行真实账户的金额扣除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:42:41