【发布时间】: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");
}
});
涉及的技术:
- create-react-app / React
- 使用 wallet-py3k 生成传递的烧瓶
- download.js下载生成的文件
【问题讨论】:
标签: flask safari create-react-app