gpt4 book ai didi

node.js - 使用aws api网关的钱包通行证自动更新网络服务

转载 作者:搜寻专家 更新时间:2023-11-01 00:37:37 32 4
gpt4 key购买 nike

我正在开发一项 Web 服务,以使用 AWS Lambda/API 网关/NodeJS 更新 Apple Wallet 通行证。 Apple 钱包点击 api 获取更新通行证,但每次我都收到以下错误:

遇到错误:接收到无效的通行证数据(通行证无效,因此无法读取。)

我在浏览器中尝试了相同的 URL 以获得通过。通行证每次都在下载,每次都打开有效通行证。但是当 Apple 钱包点击 URL 时它不起作用。我在 Postman 中尝试过相同的 URL,它给我 base64 而不是二进制数据。

我试图用 NodeJS 实现相同的功能并部署在 heroku 上,它与 Wallet 一起正常工作(也在 Postman 中提供二进制文件)。但我需要使用 AWS Lambda/API 网关/NodeJS。

我不确定 AWS 在交付二进制数据时是否会更改某些内容。

在此方面的任何帮助表示赞赏。

最佳答案

我刚刚经历过这种情况,并花了几个小时试图诊断发生了什么。

对于将 AWS API Gateway 和 Lambda 用于其 PassKit Web 服务端点的任何人来说,API 网关的逻辑如何确定它是否需要转换来自 base64 的响应,存在一个主要的“问题”(至少在我回复之日如此) ==> 二进制。

如果您检查来自 Apple Wallet/PassKit 的请求 header ,您会看到 Accept header 是 */*

API 网关显然会遍历请求 Accept header 中的项目,并确定是否与您在 下定义的任何 Binary Media Types 匹配>您的 API 名称 > 设置。它将使用找到的第一个匹配项,然后如您所愿,将 base64 字符串(来自 Lambda)转换为二进制。

这是疯狂的部分——如果您将 application/vnd.apple.pkpass 定义为“请转换为二进制”媒体类型之一,来自 Apple Wallet/PassKit 的请求 不会工作。为什么?好吧,AWS(无论出于何种原因......)尚未对 */* 进行编程以匹配 any 类型......它会字面上 < em>仅匹配*/*

因此,Accept header 的 */*application/vnd.apple.pkpass 和您的 base64 编码的 .pkpass 响应(来自 Lambda)将不会转换为二进制,导致 PassKit 阻塞 + 报告错误。


TL;DR -- AWS API Gateway 存在一些问题。要成功返回PassKit pass数据,需要在Your下添加*/*(不是 application/vnd.apple.pkpass) API 名称 > 设置 > 二进制媒体类型

关于node.js - 使用aws api网关的钱包通行证自动更新网络服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45982129/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com