Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何检测和验证自动续费订阅的续费?_Ios_App Store_In App Purchase_App Store Connect_Storekit - Fatal编程技术网

Ios 如何检测和验证自动续费订阅的续费?

Ios 如何检测和验证自动续费订阅的续费?,ios,app-store,in-app-purchase,app-store-connect,storekit,Ios,App Store,In App Purchase,App Store Connect,Storekit,因此,我为我的应用程序设置了一个自动续费订阅,期限为1个月,在沙箱中大约等于5分钟。在我订阅的客户端应用程序中,将收据发送到我的服务器,它得到验证,我在数据库中记录该用户已订阅 我的问题是如何检查此订阅是否已续订?我看了文件,不知道该怎么办 到目前为止,我的情况如下: 发送到我的服务器的初始收据通过状态验证0,很好。我还得到了最新的收据,我在数据库中将其替换为最旧的收据 6分钟后,当我尝试验证最新收据时,我得到状态21006(过期收据),并且: 数组中的第二个元素过去是latest\u rece

因此,我为我的应用程序设置了一个自动续费订阅,期限为1个月,在沙箱中大约等于5分钟。在我订阅的客户端应用程序中,将收据发送到我的服务器,它得到验证,我在数据库中记录该用户已订阅

我的问题是如何检查此订阅是否已续订?我看了文件,不知道该怎么办

到目前为止,我的情况如下:

  • 发送到我的服务器的初始收据通过状态验证
    0
    ,很好。我还得到了
    最新的收据
    ,我在数据库中将其替换为最旧的收据
  • 6分钟后,当我尝试验证
    最新收据时,我得到状态
    21006
    (过期收据),并且:
  • 数组中的第二个元素过去是
    latest\u receipt\u info
    ,但现在是
    latest\u EXPIRED\u receipt\u info
    。以下是文件中的内容:

    除了接收数据字段外,响应还可能包括 两个新领域如果用户的订阅处于活动状态且 通过收到您的发票后发生的交易续签 服务器发送到应用商店,最新收据字段包括 此订阅上次续订的base-64编码收据此新收据的解码数据也在
    最新\u过期\u收据\u信息
    字段
    。您的服务器可以使用这个新的 保存最近一次续订记录的收据

    因此,如果sub自上次检查我的服务器后已续签,则续签的解码收据应在
    最新\u过期\u收据\u信息中
    。在该对象中,
    expires\u date
    与原始收据的
    expires\u date
    相同

    怎么回事?我只想检查潜艇是否处于活动状态。谁能简单地解释一下我是怎么做到的


    谢谢大家!

    我的经验。让我们假设,我们总是向苹果的服务器发送初始收据

    在任何情况下,您都将获得至少包含两个字段的JSON:
    status
    (无注释)和
    receipt
    (关于您发送的收据的信息)

    除此之外:

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

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


    是的,好吧,这在任何地方都没有记录。希望这能有所帮助。

    还有一个直接的问题-为什么沙盒不能自动续订?或者我自己怎么更新?现在收据在5分钟后过期,仅此而已。我需要以某种方式测试我的代码。在沙盒中,您正在使用测试帐户。您不能使用测试帐户登录iTunes并禁用订阅的自动续订。为了让您测试这种情况,当您的自动续费订阅过期且处于非活动状态时,Apple仅在沙箱中进行5次续费(即,您有初始事务,之后进行5次续费->总订阅队列长度是您订阅长度的6倍)。这将在8小时后刷新。或者你可以使用其他测试帐户。基本上,我只需要验证初始收据。这回答了我的问题。@Alexandrpaly我有一个问题,当他取消并再次激活订阅时,主收据会发生什么?是否会产生新的收据,或者会发生什么?难以置信的是,苹果如何将一个简单的订阅服务转变为面向开发者的火箭科学!!
       { 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 }