LoginSignup
8
11

More than 5 years have passed since last update.

iOSアプリ内課金(自動更新購読型)のレシート検証をcurlで試す

Last updated at Posted at 2018-03-03

iOSの自動更新型アプリ内課金を実装している中で、レシート検証を行う必要がありますが、ドキュメントでは基本的にサーバーで行われることを前提としているようです(以下レシート検証 プログラ ミングガイドから引用)。

App Store を使用したレシートの検証
App Store を使用して検証する場合、App とサーバの間に安全な接続があることと、App Store を使用 してレシートを検証するためのコードがサーバ上にあることが必要です。

そのためクライアントではレシート検証をあまり意識しないのですが、サーバー側の実装をするために、リクエストボディとレスポンスのフォーマットを早めに把握したい、といったやりとりが発生したことがあります。

その時に使用したレシート検証用のcurlについて書きます。

POST request

$ curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"receipt-data": "<RECEIPT_ENCODED_WITH_BASE64>",  "password": "<SHARED_SECRET>"}' <REQUEST_URL>

補足情報

  • <RECEIPT_ENCODED_WITH_BASE64>: クライアント側で取得できるレシートデータをbase64エンコードしたもの
  • <SHARED_SECRET>: 購読型課金のレシート検証に必要な共有秘密キー
    • iTunesConnect > My App > Features > In-App Purchases > App-Specific Shared Secret から取得(無い場合は生成)可能
  • <REQUEST_URL>: Appleのレシート検証用URL

Response


{
    "status": 0,
    "environment": "Sandbox",
    "receipt": {
        "receipt_type": "ProductionSandbox",
        "adam_id": 0,
        "app_item_id": 0,
        "bundle_id": "com.gram30.joinus.dev.PurchaseSample",
        "application_version": "1",
        "download_id": 0,
        "version_external_identifier": 0,
        "receipt_creation_date": "2018-02-24 09:45:37 Etc/GMT",
        "receipt_creation_date_ms": "1519465537000",
        "receipt_creation_date_pst": "2018-02-24 01:45:37 America/Los_Angeles",
        "request_date": "2018-03-03 05:56:03 Etc/GMT",
        "request_date_ms": "1520056563571",
        "request_date_pst": "2018-03-02 21:56:03 America/Los_Angeles",
        "original_purchase_date": "2013-08-01 07:00:00 Etc/GMT",
        "original_purchase_date_ms": "1375340400000",
        "original_purchase_date_pst": "2013-08-01 00:00:00 America/Los_Angeles",
        "original_application_version": "1.0",
        "in_app": [{
            "quantity": "1",
            "product_id": "<PRODUCT_ID>",
            "transaction_id": "1000000378478086",
            "original_transaction_id": "1000000378478086",
            "purchase_date": "2018-02-24 09:45:35 Etc/GMT",
            "purchase_date_ms": "1519465535000",
            "purchase_date_pst": "2018-02-24 01:45:35 America/Los_Angeles",
            "original_purchase_date": "2018-02-24 09:45:37 Etc/GMT",
            "original_purchase_date_ms": "1519465537000",
            "original_purchase_date_pst": "2018-02-24 01:45:37 America/Los_Angeles",
            "expires_date": "2018-02-24 09:50:35 Etc/GMT",
            "expires_date_ms": "1519465835000",
            "expires_date_pst": "2018-02-24 01:50:35 America/Los_Angeles",
            "web_order_line_item_id": "1000000037930156",
            "is_trial_period": "false",
            "is_in_intro_offer_period": "false"
        }]
    },
    "latest_receipt_info": [{
        "quantity": "1",
        "product_id": "<PRODUCT_ID>",
        "transaction_id": "1000000378478086",
        "original_transaction_id": "1000000378478086",
        "purchase_date": "2018-02-24 09:45:35 Etc/GMT",
        "purchase_date_ms": "1519465535000",
        "purchase_date_pst": "2018-02-24 01:45:35 America/Los_Angeles",
        "original_purchase_date": "2018-02-24 09:45:37 Etc/GMT",
        "original_purchase_date_ms": "1519465537000",
        "original_purchase_date_pst": "2018-02-24 01:45:37 America/Los_Angeles",
        "expires_date": "2018-02-24 09:50:35 Etc/GMT",
        "expires_date_ms": "1519465835000",
        "expires_date_pst": "2018-02-24 01:50:35 America/Los_Angeles",
        "web_order_line_item_id": "1000000037930156",
        "is_trial_period": "false",
        "is_in_intro_offer_period": "false"
    }],
    "latest_receipt": "<RECEIPT_ENCODED_WITH_BASE64>",
    "pending_renewal_info": [{
        "expiration_intent": "2",
        "auto_renew_product_id": "<PRODUCT_ID>",
        "original_transaction_id": "1000000378478086",
        "is_in_billing_retry_period": "0",
        "product_id": "<PRODUCT_ID>",
        "auto_renew_status": "0"
    }]
}

各キーと値についてはレシート検証 プログラ ミングガイドから確認可能です。

8
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11