我已经在这个问题上苦苦挣扎了好几天了。我不确定是Apple 的文档不好还是缺少代码示例使一切变得复杂。我还感到惊讶的是,似乎几乎没有人在使用它,因为我无法在网上找到好的例子。
我做了以下过程:
Array
(
[headers] => stdClass Object
(
[alg] => ES256
[x5c] => Array
(
[0] => ...,
[1] => ...,
[2] => ...,
)
)
[payload] => stdClass Object
(
[notificationType] => DID_RENEW
[notificationUUID] => ...uuid...
[data] => stdClass Object
(
[bundleId] => ...app.id...
[bundleVersion] => 1.5
[environment] => Sandbox
[signedTransactionInfo] => ... //long string of encrypted info
)
[version] => 2.0
[signedDate] => 1670890743027
)
[signature] => ... // signature string
)
由于大小原因,我减少了字段,但根据文档基本上如下:
headers->alg
- 使用的算法headers->x5c
- 是一个包含 3 个键的数组引用苹果文档
App Store签署交易及续订 您在 App Store 服务器通知 V2 中收到的信息以及 在 App Store 服务器 API 中。它使用以下x5c证书 链条,按顺序:
- 包含与该密钥对应的公钥的证书 App Store 用于对 JWS 进行数字签名。
- 来自 Apple PKI 站点的 Apple 中级证书,以全球开发者关系开头。
- Apple 根证书。
之后:
payload
是一个包含相关信息的对象,这里相关的是payload->data->signedTransactionInfo
最后是
signature
我不知道如何处理该财产。据我了解,我需要使用响应中给出的密钥来解密 JWT。我尝试使用这个 PHP 库,但我不知道如何继续。数据差异很大,我不确定对应关系是什么。我只知道它使用 ES256,但不知道从那里去哪里。
我知道这是一个相对较老的问题,但我最近偶然发现了您的帖子,自己寻找解决方案。在上届 WWDC 2023 上,Apple 发布了官方库,使 App Store 服务器 API 和服务器通知变得易于使用。不幸的是,只有 Swift、Node.js、Python 和 Java 的库。由于我自己使用 PHP 并且必须使用 Apple 的 API,因此我决定将官方库翻译为 PHP。您可以在这里找到我的实现:https://github.com/hoels/app-store-server-library-php
如果您仍在寻找解决方案,希望对您有所帮助。