iOS 服务器端验证 - 收据类型

标签 ios in-app-purchase server-side-validation

当我尝试在服务器上验证购买时,我从 Apple 收到了两种格式的收据。

知道有什么区别吗?

1)

  content: {
    status: 0,
    receipt: {
      item_id: "662554154",
      original_purchase_date: "2012-10-12 08:32:12 Etc/GMT",
      purchase_date_pst: "2012-10-12 01:32:12 America/Los_Angeles",
      purchase_date: "2012-10-12 08:32:12 Etc/GMT",
      product_id: "com.example.mygame.tool1",
      bid: "com.example.mygame",
      version_external_identifier: "5647854",
      bvrs: "1.0",
      quantity: "1",
      transaction_id: "8844567822225544",
      app_item_id: "659563252",
      original_purchase_date_ms: "1350030732000",
      original_transaction_id: "8844567822225544",
      purchase_date_ms: "1350030732000",
      original_purchase_date_pst: "2012-10-12 01:32:12 America/Los_Angeles"
    }
  }

2)

content: {
  receipt: {
    in_app: [
      {
        is_trial_period: "false",
        original_purchase_date_pst: "2013-10-09 20:55:27 America/Los_Angeles",
        original_purchase_date_ms: "1386571707000",
        original_purchase_date: "2013-10-09 04:55:27 Etc/GMT",
        purchase_date_pst: "2013-10-09 20:55:27 America/Los_Angeles",
        purchase_date_ms: "1386571707000",
        purchase_date: "2013-10-09 04:55:27 Etc/GMT",
        original_transaction_id: "654888452251325",
        transaction_id: "654888452251325",
        product_id: "com.example.mygame.tool1",
        quantity: "1"
      }
    ],
    original_application_version: "1.0",
    original_purchase_date_pst: "2013-10-09 20:55:27 America/Los_Angeles",
    original_purchase_date_ms: "1386569706000",
    original_purchase_date: "2013-10-09 04:55:27 Etc/GMT",
    request_date_pst: "2013-10-09 20:55:27 America/Los_Angeles",
    request_date_ms: "1386571710087",
    request_date: "2013-10-09 04:55:27 Etc/GMT",
    download_id: 215425636588954,
    application_version: "1.0",
    bundle_id: "com.example.mygame",
    adam_id: 654225311,
    receipt_type: "Sandbox"
  },
  environment: "Sandbox",
  status: 0
}

最佳答案

在 iOS 6 中,每个 IAP(应用内购买)交易都有自己的收据(StoreKit API 中的 SKPaymentTransaction.transactionReceipt)。当您将此收据数据发送到他们的验证 API 时,您会得到以前的响应。

在 iOS 7 中,Apple 开始使用他们称为“Grand Unified Receipt”的东西。这意味着应用有一张收据,其中包含有关购买应用本身以及 IAP 的信息。您使用 -[NSBundle appStoreReceiptURL] API 从磁盘加载此收据数据(如果它似乎不存在,则可能使用 SKReceiptRefreshRequest 来获取它)。当您将此收据数据发送到他们的验证 API 时,您会得到后者的响应。

主要区别在于,前一种收据格式表示一次 IAP 交易,而后者表示一组交易(以及应用程序本身的购买)。

“Using Receipts to Protect Your Digital Sales” WWDC 2013 session 中查看更多信息.

关于iOS 服务器端验证 - 收据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20466627/

相关文章:

iPhone 如何使用 ARC 正确处理 Core Foundation 引用?

ios - 如何更改 ios 中的 tabBar 图标颜色

ios - Apple 应用内购买和收据刷新

ios - 标准检查用户是否有有效订阅(自动更新订阅)。 iOS swift

javascript - 日期格式验证出现错误

ios - 尝试显示 FirebaseStorage 中我的用户的用户名

ios - 如何停止从另一个 ViewController 播放音频?

iphone - 在应用内购买正在进行时显示 UIAlertView

jquery - 使用 ASP.NET MVC4 禁用取决于变量 Razor 的 div

Javax Bean验证: @Max and @Min is not working