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

如何在React JS网站中实现将Brex发行的卡片添加到Apple Wallet功能

React JS网站实现Brex卡片添加至Apple Wallet方案

可以实现,不需要依赖原生端的React Native相关包,Web端走Apple PassKit的Web侧标准流程即可,具体操作如下:

核心实现逻辑

整个流程的核心是合法生成Apple Wallet认可的.pkpass格式凭证,前端仅做触发交互,核心逻辑由后端对接完成:

  • 先由后端服务对接Brex开放平台接口,获取目标卡片的非敏感展示信息、以及Apple要求的卡片关联凭证,全程不向前端透漏完整卡号、安全码等敏感数据。
  • 后端使用提前在Apple Developer平台申请的Pass Type ID、对应签名证书,按照PassKit规范生成带合法签名的.pkpass格式凭证文件。
  • React前端触发打开.pkpass文件后,苹果设备的浏览器会自动识别该格式,唤起Apple Wallet的卡片添加引导流程。

React端具体实现步骤

1. 封装获取pkpass凭证的请求方法

注意要将响应类型设置为blob,避免文件解析异常:

const getCardPkPass = async (cardId) => {
  const response = await fetch(`/api/brex/cards/${cardId}/apple-pass`, {
    headers: {
      'Authorization': `Bearer ${localStorage.getItem('user_token')}`
    }
  });
  return response.blob();
};

2. 编写添加按钮的点击触发逻辑

拿到二进制凭证文件后生成临时链接,唤起浏览器识别流程:

const handleAddToWallet = async (cardId) => {
  try {
    const passBlob = await getCardPkPass(cardId);
    const tempUrl = window.URL.createObjectURL(passBlob);
    // 新开页面打开凭证,触发Apple Wallet唤起
    window.open(tempUrl, '_blank');
    // 1秒后释放临时链接资源,避免内存泄漏
    setTimeout(() => window.URL.revokeObjectURL(tempUrl), 1000);
  } catch (e) {
    console.error('获取卡片凭证失败:', e);
    alert('添加失败,请稍后重试');
  }
};

3. 页面中渲染添加按钮

可以配合Apple官方的标准添加按钮素材提升用户认知,同时可做设备判断仅在苹果设备下展示入口:

function AddToAppleWalletBtn({ cardId }) {
  // 判断是否为苹果设备
  const isAppleDevice = /Mac|iPhone|iPad|iPod/.test(navigator.userAgent) && !window.MSStream;

  if (!isAppleDevice) return null;

  return (
    <button onClick={() => handleAddToWallet(cardId)} style={{ border: 'none', padding: 0 }}>
      <img 
        src="/static/add-to-apple-wallet.png" 
        alt="添加到Apple Wallet" 
        style={{ height: 42 }}
      />
    </button>
  );
}

注意事项

  • 所有敏感数据处理、pkpass签名逻辑必须放在后端完成,前端绝对不要接触卡片核心敏感信息,避免出现合规和安全风险。
  • 生成的pkpass文件必须使用Apple认可的有效证书签名,否则会出现无法被Wallet识别的问题。
  • 非苹果设备无法使用该功能,建议做设备判断隐藏对应入口,避免用户困惑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:15:03