提问人:mike927 提问时间:7/4/2023 更新时间:8/2/2023 访问量:559
Apple App Store 服务器通知 v2 - verifyReceipt 新流程
Apple App Store Server Notification v2 - verifyReceipt new flow
问:
我正在尝试了解移动应用程序/服务器应用程序的正确流程 - 自动续订订阅。
由于已被标记为已弃用,我正在努力解决如何将 App Store Server Notification v2 消息与数据库中的用户链接的问题。verifyReceipt
目前,流程如下:
首先,移动应用程序使用 .其次,服务器调用以验证收据。然后,我能够将用户的订阅/事务与他们的数据进行匹配(使用内部 JWT 与第一步中的用户数据和解码响应中的 originalTransactionId)。现在,如果我们省略第一步,我将如何确定谁应该成为 App Store 服务器通知 v2 消息的收件人?receipt-data
verifyReceipt
verifyReceipt
答:
0赞
chaiyut
7/17/2023
#1
我也开始工作了(还没有完成,但我想我可以分享我的想法)。
我的流程更像是你的流程。这是你今天的流程:
- 移动应用程序使用收据数据调用我们的服务器。
- 服务器调用 verifyReceipt 来验证收据。然后,我能够将用户的订阅/交易与他们的数据进行匹配
- 您的服务器对移动设备的响应,即订阅已完成或失败。
我认为新流程会像这样:
- 移动应用程序使用收据数据调用我们的服务器。
- 服务器调用 App Store Server API 来验证付款,可能来自交易信息 api(仍然不确定)然后您可以按照今天的流程进行订阅
- 您的服务器对移动设备的响应,即订阅已完成或失败。
正如我所描述的,我认为对于这部分(新订阅),您需要实现 App Store Server API(需要有 JWS 才能使用 App Store Server API 进行身份验证)
下一部分是针对(服务器通知)您可以将服务器通知更改为版本2启用App Store服务器通知,对于这部分,我仍在检查,如果我有更清楚的,我会分享给您。
在完成迁移后更新。 我开始首先处理新的付款,以在我的服务器和我的应用程序之间处理,然后对应用程序通知应用相同的方法。
- 应用和我的服务器之间的句柄
- 我的应用程序仍在使用 StoreKit 版本 1,因此我将向服务器发送相同的数据
- 我的服务器获取数据并查找“交易 ID”并调用 [获取所有订阅状态]:https://developer.apple.com/documentation/appstoreserverapi/get_all_subscription_statuses?language=objc 您的产品是否为订阅
- 对于解码 JWT,您可以检查 [此站点]:https://jwt.io/ 检查和验证更容易。
- 检查解码的有效负载并更新数据库,完成。
- 应用通知版本 2
- 首先使用开发环境进行测试
- 带有签名的Payload发送通知需要先解码有效负载,解码有效负载后,你会得到[此链接]:https://developer.apple.com/documentation/appstoreservernotifications/responsebodyv2decodedpayload?language=objc
- 验证JWS时,您将从标头获得公共证书,您可以获取公共证书并使用[苹果根G3证书]进行验证:https://www.apple.com/certificateauthority/AppleRootCA-G3.cer
- 解码和验证后,您可以更新数据库并完成。
我不放代码,因为所有这些都在服务器端,如果你需要,我可以提供更多。
评论
0赞
a programer
9/26/2023
您好@chaiyut,感谢您的解决方案。但是我有一个问题:如何在本地主机环境中进行测试?我可以部署沙盒环境,但无法调试
0赞
chaiyut
9/29/2023
你好@a程序员 您只能在 localhost 中测试第一次付款(更改应用程序中的 url 以在 localhost 中验证),但对于测试来自 Apple 的 IPN,您不能在 localhost 中进行测试。对我来说,我通过模拟 Apple IPN 数据并在 localhost 中进行测试并使用 Postman 发送数据。
0赞
a programer
9/29/2023
嗨,@chaiyut,非常感谢<3
评论