Mac App Store 收据 - 哈希值不匹配。为什么?

Mac App Store Receipt - Hash not matching. Why?

我正在尝试创建一个 Mac 应用程序,请多多关照,因为这是我的第一次尝试!基本上 t运行 将我在 iOS 上所做的工作转移到 Mac 并且它几乎准备好了,剩下的一部分 - App Store 验证以防止人们能够复制它。

我的几个 iOS 应用程序中有收据验证码 运行ning,它们可以帮我找到(用于应用程序内购买)。使用 Mac 我只是想验证收据并希望这就足够了。这是我创建的代码的基础:

char buf[512] = "";
get_platform_uuid(buf, sizeof(buf));

NSString *uuidString = [NSString stringWithUTF8String:buf];
NSUUID *myUUID = [[NSUUID UUID] initWithUUIDString:uuidString];

unsigned char uuidBytes[16];
[myUUID getUUIDBytes:uuidBytes];

NSMutableData *input = [NSMutableData data];
[input appendBytes:uuidBytes length:16];
[input appendData:[receipt objectForKey:kReceiptOpaqueValue]];
[input appendData:[receipt objectForKey:kReceiptBundleIdentifierData]];

NSMutableData *hash = [NSMutableData dataWithLength:SHA_DIGEST_LENGTH];
SHA1([input bytes], [input length], [hash mutableBytes]);

NSLog(@"kReceiptHash: %@", [receipt objectForKey:kReceiptHash]);
NSLog(@"hash: %@", hash);

最后两个 NSLog 命令只是为了让我可以在调试期间记录它,但会比较哈希值。这是我知道两者不正确的地方。 "get_platform_uuid" 是我发现的用于获取 Mac 的 UUID 的函数,它似乎工作正常。

我获取了整个 "input" 变量并将信息插入其中,并在 iOS 上 运行 插入了信息,并且我从 [=32] 中做了同样的事情=] 设备和 运行 它在 Mac 上。在这两种情况下,计算出的哈希是相同的;我觉得计算的还行。

但在 Mac 上它仍然不同于收据哈希。该应用的 iOS 计算和收据哈希匹配。

我已经在 iTunes Connect 上设置了应用程序,它似乎选择了正确的包标识符。我已在 Mac 退出 App Store。我将应用程序从 Xcode 构建应用程序的位置复制到与 运行 不同的目录。然后它要求我登录,我使用测试帐户登录。然后反复尝试重新运行 应用程序并退出(我将其复制回调试文件夹,这打破了重新运行 循环)。

我已经在 Apple Developer 网站上为 Mac 设置了用于开发和分发的证书,但我确定我没有正确使用应用程序权限或我如何正在 运行 应用程序。但是我就是想不通(而且我已经看了 - 很长时间了!)。

我敢肯定这很愚蠢,但作为一个孤独的开发者,我唯一的希望就是问问你我做错了什么?

谢谢。

经过大量搜索,我找到了另一种构建和比较哈希值的方法。但这还需要对 Mac 上的 运行 进行修改,因为它是相当旧的代码。我现在拥有的是这种方法和它的混合体。

我无法解释为什么旧代码适用于 iOS 但不适用于 Mac,我不是一个足够好的程序员来研究原因。我所知道的是这种混合方法似乎有效。