Apple 的 VerificationController.m 无法验证沙盒应用内购买收据的签名
Apple's VerificationController.m failed verifying sandbox in-app purchase receipt's signature
我很长时间以来一直在使用 Apple 的示例在本地验证应用内购买收据,但它最近停止在沙盒模式下工作(在生产中工作)。
可能与 iOS 9.3.1 相关,或者他们在服务器端更改了某些内容,
尝试验证 transaction.transactionReceipt
时失败并显示 -
AssertMacros: signature_blob_ptr->version == 2, file: ../VerificationController.m
Transaction is invalid!
它有一个不同的 version
(3 而不是 2)并且证书的其余部分 不 匹配以下结构 -
struct signature_blob {
uint8_t version;
uint8_t signature[128];
uint32_t cert_len;
uint8_t certificate[];
}
知道如何验证 Apple 应用内购买收据的第 3 版吗?
Apple 似乎在服务器端支票上贬值了 iOS6 风格的收据:
https://forums.developer.apple.com/thread/44603
目前看来 live 仍然有效,但我们可能应该转向新格式
详情见link。
我遇到了与您描述的相同的问题。当我在本地与 Apple 验证收据时,一切都在醒来,然后停止使用无效收据。今天(2016 年 4 月 14 日)我安装了最新版本的 iOS (iOS 9.3.1) 和新的 xCode 版本 (7.3),验证又开始工作了。没有更改我的代码中的任何内容!
我查看了 "version 3" 签名并成功对其进行了逆向工程。
唯一的变化是签名长度,现在是 256 位 而不是 128。blob 的其余部分应该使用 [=10= 中的代码按预期解压缩和验证].
签名证书现在是在 https://www.apple.com/certificateauthority/ 找到的 Apple 最新根证书。您将需要使用其中的 public 密钥来验证版本 3 的 blob 中包含的签名证书。
我建议在解压其余签名之前先获取版本,这样您就可以同时支持版本 2 和 3。
基本上苹果破坏了我所有的应用程序。无法更新它们,因为为新设备尺寸制作所有艺术品需要一到四天,而且它们卖得不好。不幸的是,我什至不能免费提供它们,因为即使有免费的应用内购买,收据也会失败。
自我提醒:永远不要再制作使用我无法控制的服务器端功能的应用程序。
我很长时间以来一直在使用 Apple 的示例在本地验证应用内购买收据,但它最近停止在沙盒模式下工作(在生产中工作)。
可能与 iOS 9.3.1 相关,或者他们在服务器端更改了某些内容,
尝试验证 transaction.transactionReceipt
时失败并显示 -
AssertMacros: signature_blob_ptr->version == 2, file: ../VerificationController.m
Transaction is invalid!
它有一个不同的 version
(3 而不是 2)并且证书的其余部分 不 匹配以下结构 -
struct signature_blob {
uint8_t version;
uint8_t signature[128];
uint32_t cert_len;
uint8_t certificate[];
}
知道如何验证 Apple 应用内购买收据的第 3 版吗?
Apple 似乎在服务器端支票上贬值了 iOS6 风格的收据: https://forums.developer.apple.com/thread/44603
目前看来 live 仍然有效,但我们可能应该转向新格式
详情见link。
我遇到了与您描述的相同的问题。当我在本地与 Apple 验证收据时,一切都在醒来,然后停止使用无效收据。今天(2016 年 4 月 14 日)我安装了最新版本的 iOS (iOS 9.3.1) 和新的 xCode 版本 (7.3),验证又开始工作了。没有更改我的代码中的任何内容!
我查看了 "version 3" 签名并成功对其进行了逆向工程。
唯一的变化是签名长度,现在是 256 位 而不是 128。blob 的其余部分应该使用 [=10= 中的代码按预期解压缩和验证].
签名证书现在是在 https://www.apple.com/certificateauthority/ 找到的 Apple 最新根证书。您将需要使用其中的 public 密钥来验证版本 3 的 blob 中包含的签名证书。
我建议在解压其余签名之前先获取版本,这样您就可以同时支持版本 2 和 3。
基本上苹果破坏了我所有的应用程序。无法更新它们,因为为新设备尺寸制作所有艺术品需要一到四天,而且它们卖得不好。不幸的是,我什至不能免费提供它们,因为即使有免费的应用内购买,收据也会失败。
自我提醒:永远不要再制作使用我无法控制的服务器端功能的应用程序。