【问题标题】:Flask/React app, downloaded binary (pkpass) file differs from the same file on the serverFlask/React 应用程序,下载的二进制(pkpass)文件与服务器上的相同文件不同
【发布时间】:2019-10-03 17:52:32
【问题描述】:

我正在构建一个 React 应用程序,该应用程序访问 Flask 服务器以进行 Stripe 支付处理和 Apple Wallet 密码生成。我的服务器脚本生成文件,并将其保存到一个目录,然后将 pkpass 文件的名称返回给客户端,客户端尝试将其下载并加载到钱包中。

通行证似乎生成正确。我可以下载它们(sftp)并将它们放在模拟器上,它们打开就好了。我可以解压缩它们,所有必要的组件似乎都在那里并且似乎有效。

但是,使用网络应用程序时,我无法让它们下载并安装到电子钱包中。在我的 iPhone 上,我收到一个简单的“Safari 无法下载文件”错误。

如果我在桌面上使用 Safari,pkpass 文件会下载到我的 Mac。当我将它拖放到模拟器上时,我在控制台中看到以下错误:

BOM could not extract archive: Couldn't read PKZip signature

Failed to add pass: 'file:///Users/tpoulsen/Downloads/ch_1FPYBoAzcfAbJsLnXDsVRcrc.pkpass' Error Domain=PKPassKitErrorDomain Code=1 "The pass cannot be read because it isn’t valid." UserInfo={NSLocalizedDescription=The pass cannot be read because it isn’t valid., NSUnderlyingError=0x6000016dbbd0 {Error Domain=PKPassKitErrorDomain Code=1 "(null)"}}.

我使用VBinDiff 比较下载(通过 sftp 和 Safari),文件完全不同。因此,问题似乎出在我的 Flask 应用或我的网络应用上。

这是我的 Flask 路线

@application.route("/passes/<path:fname>")
def passes_proxy(fname):
    """static passes serve"""
    return send_from_directory("passes", fname, mimetype="application/vnd.apple.pkpass")

在我的组件中:

paymentRequest.on('token', async (ev) => {
  try {
    const response = await fetch('https://my_server.com/charge', {
      method: 'POST',
      body: JSON.stringify({
        token: ev.token.id,
        amount: totalInCents,
        description: purchasedItems.join(',\n')
      }),
      headers: {'content-type': 'application/json'},
    });
    if (!response.ok) {
      throw new Error('Network response was not ok.');
    }
    ev.complete('success');
    const pkpass = await response.json();
    download(`https://my_server.com/passes/${pkpass.filename}`, pkpass.filename, "application/vnd.apple.pkpass");
  } catch (error) {
    throw new Error("There was a problem processing your payment");
  }
});

涉及的技术:

【问题讨论】:

    标签: flask safari create-react-app


    【解决方案1】:

    知道了。我太花哨了。而不是使用 download.js 来获取文件,我只需要:

    window.location.href = `https://my_server.com/passes/${pkpass.filename}`;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多