12
9

More than 1 year has passed since last update.

[iOS]サンドボックスでテスト課金が急にできなくなった!!

Last updated at Posted at 2022-07-14

はじめに

あるとき突然、「テスト課金ができない。特に課金周りのコードはいじっていないのに...」ということがあったので記事を書いておこうと思います。

この記事で問題を解決できるかもしれない人

以下の3つ条件に当てはまればおそらく解決できます。
逆に以下の3つの条件を満たさない場合は、この記事で問題を解決できない可能性が高いです。

  • サーバー側、アプリ側のコードをいじっていないのに、消費型の課金テストが急にできなくなった
  • レシート検証で「21003」が返ってくる
  • 直近でサブスクのアイテムをAppStoreConnectに追加した

※レシート検証時のstatusの値のそれぞれの意味は以下のドキュメントに記載があります。

結論

  • レシート検証の時にApp用共有シークレットをレシート情報と一緒に送れば解決!

解決方法

①AppStoreConnectから該当アプリの「App用共有シークレット」の値を取得する

  • AppStoreConnectにログインします
  • 課金ができなくなってしまったアプリのメニューのサブスクリプションを開きます(以下の画像参照)
    ※画像は2022年7月14日現在のもので、この記事をご覧いただいている時点では場所が変わっているかもしれません
  • App用共有シークレットの管理をクリックします

スクリーンショット 2022-07-14 23.30.36.png

  • 以下の画像のような画面が表示されると思います
  • もし共有シークレットが表示されていない場合は作成してください
  • 共有シークレットの値をコピーします

スクリーンショット 2022-07-14 23.31.07.png

②レシート検証時に共有シークレットをリクエストのBodyに入れる

  • レシート検証を行う際には自前のサーバーからAppleに対して「"receipt-data": "Base64エンコードしたレシート情報"」を送っているはず
  • そこに「"password": "取得したApp共有シークレット"」も追加する
    これで、テスト課金ができるようになっているはずです。

※レシート検証時リクエストとレスポンスのbody

※一応レシート検証用のエンドポイントも載せておきます
本番課金のレシート検証用エンドポイント
https://buy.itunes.apple.com/verifyReceipt

テスト課金のレシート検証用エンドポイント
https://sandbox.itunes.apple.com/verifyReceipt

原因

結論から言うと詳細はよくわかりませんでした。しかし、消費型の課金のみの場合はレシート検証時にpasswordをレシート検証時のパラメータに追加しなくても大丈夫なようですが、サブスクを追加すると消費型課金のレシート検証においてもApp共有シークレットpasswordのキーと共にパラメータとして入れておかなければならないみたいです。
もし、詳細情報を知っている方がいたら教えてほしいです....

終わりに

もし誰かの役に立っていたら嬉しいです。
おーわーり。

参考記事

12
9
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
12
9