31

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

我的问题是如何检查此订阅是否已续订?我已经阅读了文档,但不知道我该怎么做。

这是我到目前为止的位置:

  1. 发送到我的服务器的初始收据已通过状态验证0,太好了。我也得到latest_receipt,我在我的数据库中用最旧的收据替换它。
  2. 6 分钟后,当我尝试验证时latest_receipt,我得到状态21006(过期收据),并且:
   { 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

我勒个去?我只想检查子是否处于活动状态。谁能用简单的话解释我该怎么做?

谢谢!

4

1 回答 1

34

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

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

除此之外:

1) 如果订阅仍然有效,您将另外获得latest_receipt(base64-encoded string) 和latest_receipt_info(关于该收据的信息)。

2)如果订阅已经过期,您将额外获得latest_expired_receipt_info(关于最后更新收据的信息)。是的,您只获得有关它的信息,没有 base64 编码的字符串。

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

于 2013-08-10T10:45:59.127 回答