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 }

配列の 2 番目の要素は以前latest_receipt_infoは でしたが、現在はlatest_EXPIRED_receipt_infoです。ドキュメントの内容は次のとおりです。

receive_data フィールドに加えて、応答には 2 つの新しいフィールドが含まれる場合もあります。ユーザーのサブスクリプションがアクティブであり、サーバーが App Store に送信したレシートの後に行われたトランザクションによって更新された場合latest_receiptフィールドには、このサブスクリプションの最後の更新の base-64 でエンコードされたレシートが含まれますこの新しいレシートのデコードされたデータも latest_expired_receipt_infoフィールドに提供されます。サーバーは、この新しい領収書を使用して、最新の更新の記録を維持できます。

したがって、サーバーが最後にチェックしてからサブスクライブが更新された場合、更新のデコードされた領収書は にあるはずですlatest_expired_receipt_info。そのオブジェクトのexpires_dateは、元の領収書の と同じexpires_dateです。

なんてこったい?サブがアクティブかどうかを確認したいだけです。誰でも簡単な言葉で説明できますか?

ありがとうございました!

4

1 に答える 1

34

私の経験。想定してみましょう。最初のレシートは常に Apple のサーバーに送信されます。

いずれにせよ、少なくとも 2 つのフィールドstatus(コメントなし) とreceipt(送信した領収書に関する情報) を含む JSON を取得します。

それに加えて:

1) サブスクリプションがまだ有効である場合は、さらにlatest_receipt(base64 でエンコードされた文字列) とlatest_receipt_info(そのレシートに関する情報) を取得します。

2) サブスクリプションの有効期限が既に切れている場合は、さらにlatest_expired_receipt_info(最後の更新レシートに関する情報) を取得します。はい、それに関する情報のみを取得し、base64 でエンコードされた文字列は取得しません。

はい、私の知る限り、それはどこにも文書化されていません。それが役立つことを願っています。

于 2013-08-10T10:45:59.127 に答える