如何检测并验证自动续订订阅的续订?

时间:2013-08-10 10:34:38

标签: ios app-store in-app-purchase itunesconnect storekit

所以我为我的应用设置了一个可自动更新的订阅,期限为1个月,相当于沙盒中的5分钟左右。在我订阅的客户端应用程序中,将收据发送到我的服务器,它得到验证,我在我的数据库中记录了该用户订阅的记录。

我的问题是如何检查此订阅是否已续订?我已经阅读了文档,无法弄清楚我应该怎么做。

这是我到目前为止的地方:

  1. 发送到我的服务器的初始收据已通过状态0进行验证,非常棒。我也得到latest_receipt,我用我最早的收据替换了我的数据库。
  2. 在我尝试验证latest_receipt后6分钟后,我收到状态21006(已过期收据)并且:
  3.    { receipt: 
           { original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles',
             unique_identifier: '------------',
             original_transaction_id: '----------',
             expires_date: '1376129825000',
             transaction_id: '------------',
             quantity: '1',
             product_id: 'subscription',
             item_id: '--------',
             bid: 'com.--------',
             unique_vendor_identifier: '---------',
             web_order_line_item_id: '---------',
             bvrs: '2.0',
             expires_date_formatted: '2013-08-10 10:17:05 Etc/GMT',
             purchase_date: '2013-08-10 10:12:05 Etc/GMT',
             purchase_date_ms: '1376129525000',
             expires_date_formatted_pst: '2013-08-10 03:17:05 America/Los_Angeles',
             purchase_date_pst: '2013-08-10 03:12:05 America/Los_Angeles',
             original_purchase_date: '2013-08-06 18:58:04 Etc/GMT',
             original_purchase_date_ms: '1375815484000' },
          latest_expired_receipt_info: 
           { original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles',
             unique_identifier: '-------',
             original_transaction_id: '-',
             expires_date: '1376129825000',
             transaction_id: '-',
             quantity: '1',
             product_id: 'subscription',
             item_id: '-',
             bid: 'com.-',
             unique_vendor_identifier: '--',
             web_order_line_item_id: '-',
             bvrs: '2.0',
             expires_date_formatted: '2013-08-10 10:17:05 Etc/GMT',
             purchase_date: '2013-08-10 10:12:05 Etc/GMT',
             purchase_date_ms: '1376129525000',
             expires_date_formatted_pst: '2013-08-10 03:17:05 America/Los_Angeles',
             purchase_date_pst: '2013-08-10 03:12:05 America/Los_Angeles',
             original_purchase_date: '2013-08-06 18:58:04 Etc/GMT',
             original_purchase_date_ms: '1375815484000' },
          status: 21006 }
    

    数组中的第二个元素曾经是latest_receipt_info,但现在它是latest_EXPIRED_receipt_info。以下是文档的说法:

      

    除了receipt_data字段外,响应还可以包括   两个新领域。 如果用户的订阅处于活动状态且是   通过在收到您的帐户后发生的交易续订   服务器发送到App Store, latest_receipt字段包含一个   此订阅的上次续订的base-64编码收据。   此新收据的解码数据也在   latest_expired_receipt_info字段。您的服务器可以使用这个新的   收据以保持最近更新的记录。

    因此,如果自我的服务器上次检查后该子订单已续订,则续订的解码收据应为 latest_expired_receipt_info 。在该对象中,expires_date与原始收据的expires_date相同。

    到底是什么?我只想检查子是否有效。任何人都可以用简单的词语解释我该怎么做?

    谢谢!

1 个答案:

答案 0 :(得分:30)

我的经历。我们假设,我们总是将初始收据发送到Apple的服务器。

在任何情况下,您都会获得至少包含两个字段的JSON:status(无评论)和receipt(有关您已发送的收据的信息)。

除此之外:

1)如果订阅仍处于活动状态,您还将获得latest_receipt(base64编码的字符串)和latest_receipt_info(有关该收据的信息)。

2)如果订阅已过期,您还会获得latest_expired_receipt_info(有关上次续订收据的信息)。是的,您只获得有关它的信息,没有base64编码的字符串。

是的,AFAIK,在任何地方都没有记录。希望有所帮助。