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

Cordova应用集成Stripe Apple Pay失败,咨询可行实现方案

Cordova + Stripe + Apple Pay 集成问题解答

Stripe Checkout在Cordova中支持Apple Pay的情况

Stripe Checkout的Apple Pay功能主要针对Safari浏览器(包括iOS端的Safari),Cordova应用本质是WebView包裹的网页,默认的UIWebView/WKWebView不会被Stripe Checkout的Apple Pay检测逻辑识别为支持环境,所以直接用Stripe Checkout在Cordova里基本没法触发Apple Pay。

关于cordova-plugin-applepay提示“Apple Pay is not available.”的排查方向

你碰到的这个错误,大概率是以下几个原因:

  • 设备/账户不满足条件:Apple Pay要求iOS 10及以上设备,且已绑定有效支付卡片,设备所在地区要支持Apple Pay,同时你的Apple开发者账号得开启Apple Pay功能并配置好Merchant ID。
  • 插件配置出错:检查config.xml里是否正确配置了Merchant ID,示例如下:
    <plugin name="cordova-plugin-applepay" spec="~1.2.0">
      <variable name="MERCHANT_ID" value="merchant.com.yourapp" />
    </plugin>
    
  • WebView环境问题:Cordova的WKWebView要正确配置ATS(App Transport Security),确保能正常访问Stripe相关域名;另外要确认Xcode项目里已经添加了PassKit.framework。
  • 代码调用时机不对:必须等deviceready事件触发后再调用Apple Pay的检测方法,示例代码:
    document.addEventListener('deviceready', function() {
      ApplePay.canMakePaymentsWithActiveCard('merchant.com.yourapp', function(canMakePayments) {
        if (canMakePayments) {
          // 初始化支付流程
        } else {
          console.log('Apple Pay is not available.');
        }
      }, function(error) {
        console.error('检测失败:', error);
      });
    }, false);
    

Stripe.js + Cordova + Apple Pay 的可行集成方案

不少开发者成功实现过这种组合,核心思路是放弃Stripe Checkout,直接用Stripe.js搭配cordova-plugin-applepay完成支付流程:

  1. 后端通过Stripe API创建Payment Intent,返回client secret给前端。
  2. 调用cordova-plugin-applepay发起Apple Pay授权,获取支付令牌(payment token)。
  3. 将Apple Pay返回的令牌传给后端,由后端调用Stripe API完成Payment Intent的确认(敏感操作绝对不能在前端做)。

具体步骤示例:

  • 前端触发Apple Pay请求:
    var paymentRequest = {
      merchantIdentifier: 'merchant.com.yourapp',
      supportedNetworks: ['visa', 'masterCard', 'amex'],
      countryCode: 'US',
      currencyCode: 'USD',
      paymentSummaryItems: [
        { label: '商品名称', amount: '9.99' }
      ]
    };
    
    ApplePay.makePaymentRequest(paymentRequest, function(paymentResponse) {
      // 提取Apple Pay返回的支付令牌
      var token = paymentResponse.paymentData.token;
      // 调用后端接口传递令牌和client secret
      fetch('/api/confirm-payment', {
        method: 'POST',
        body: JSON.stringify({
          stripeClientSecret: '你的client_secret',
          applePayToken: token
        })
      }).then(function(response) {
        return response.json();
      }).then(function(result) {
        if (result.success) {
          // 处理支付成功逻辑
        } else {
          // 处理支付失败逻辑
        }
      });
    }, function(error) {
      console.error('支付请求失败:', error);
    });
    
  • 后端接收请求后,调用Stripe的paymentIntents.confirm接口,传入client secret和payment_method_data: { apple_pay: { token: applePayToken } }完成支付确认。

关键注意事项

  • 所有涉及Stripe密钥、支付确认的操作必须放在后端执行,前端只负责收集用户授权和传递必要数据,避免泄露敏感信息。
  • 确保你的Apple开发者账号完成了Apple Pay的全流程配置,包括Merchant ID、支付处理证书等。
  • 测试必须用真实iOS设备(模拟器不支持Apple Pay),且设备已绑定有效支付卡片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:37:05