0

我正在 Mac 和 iOS 应用中进行应用内购买。

当根据https://buy.itunes.apple.com/verifyReceipt验证沙盒环境收据时,我们了解到我们得到的状态代码为 21007: CargoBayStatusSandboxReceiptSentToProduction

这在 iOS 中完美运行,但对于 Mac 应用程序,结果是不同的。

我的 Mac 应用程序中有一个有效的沙盒环境收据,我使用https://sandbox.itunes.apple.com/verifyReceipt进行了验证。

当我使用https://buy.itunes.apple.com/verifyReceipt验证同一张收据时, 我需要将状态码取回为 21007,但这并没有发生。相反,我得到以下响应:

<html><head><title>Error</title></head><body>Your request produced an error.  <BR>[newNullResponse]</body></html>

基本上,如果我在 Mac 应用商店中提交此应用程序进行验证并且 Apple 人员使用测试 ID,我将获得一个沙盒收据,该收据将失败并显示生产 URL 收据验证的状态代码,然后我可以回退到沙盒 URL 以进行收据验证. 但如前所述,响应不包含有效的状态代码。

我在终端中执行了以下命令:

  1. 使用 base 64 编码对收据进行编码,其中receipt是收据文件的路径:

      base64 -i receipt
    
  2. 发布数据以验证收据:

    curl -d '{ "receipt-data": "<your b64 string here>" }' https://sandbox.itunes.apple.com/verifyReceipt
    

    或者

    curl -d '{ "receipt-data": "<your b64 string here>" }' https://buy.itunes.apple.com/verifyReceipt
    

生产 URL 的响应是:

<html><head><title>Error</title></head><body>Your request produced an error.  <BR>[newNullResponse]</body></html>

理想情况下应该是{status code = 210007}。以前有人遇到过这个问题吗?还是我错过了什么?

4

2 回答 2

0

在 MAC 应用程序中实现 IAP 与在 iOS 中相同,但有以下更改。您需要在添加以下代码后制作二进制文件

-(void)applicationDidFinishLaunching:(NSNotification *)aNotification {

    NSString *receiptPath = [[[NSBundle mainBundle] appStoreReceiptURL] path];

   // Test whether the receipt is present at the above path
    if (![[NSFileManager defaultManager] fileExistsAtPath:receiptPath]) {

       // Validation fails
        exit(173);
    }
}

此代码将为您的 MAC 创建收据。因此,在它之后,您可以在您的应用程序中检查 IAP。请检查您是否也在做同样的事情。

于 2013-05-28T12:03:35.190 回答
0

沙盒收据不同于 iTunes 收据。您说当您将沙盒收据发送到https://buy.itunes.apple.com/verifyReceipt时会发生错误。但这项服务是为 iTunes 商店收据而设计的。不要把它们混在一起。

于 2014-12-18T23:39:51.633 回答