Mac应用程序的应用内购买问题

时间:2013-05-28 10:02:22

标签: macos

我正在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
    
  3. 生产URL的响应是:

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

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

2 个答案:

答案 0 :(得分: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。请检查您是否也这样做。

答案 1 :(得分:0)

沙盒收据与iTunes收据不同。您说当您将沙盒收据发送到https://buy.itunes.apple.com/verifyReceipt时,错误就会出现问题。但此服务适用于iTunes商店收据。不要混淆它们。