PHPでiOSのレシートを検証したい(超簡易メモ版)

前回はAndroidのレシート検証について超簡易的なメモを残したので、その流れでiOSについても超簡易的なメモを残します。 ohshige.hatenablog.com

参考:
レシート検証プログラミングガイド

iOSの場合、公式の特別なライブラリは無いようなので、PHPからそのままAPIを叩くことにします。

そのためにguzzleを使います。

composer require guzzlehttp/guzzle

開発環境もしくは審査中の場合にはsandbox環境用のURL、本番環境の場合にはproduction環境用のURLが用意されているので、それを使います。

環境 URL
sandbox https://sandbox.itunes.apple.com/verifyReceipt
production https://buy.itunes.apple.com/verifyReceipt
// 環境に応じたURL
$verify_url = 'https://buy.itunes.apple.com/verifyReceipt';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', $verify_url, [
    'json' => [
        'receipt-data' => [base64でエンコードされたレシートデータ],
        'password' => [アプリケーションの共有シークレット],
    ],
]);

if ($response->getStatusCode() !== 200) {
    // 何かしらの通信エラー
    return;
}

$body = json_decode($response->getBody()->getContents(), true);

// sandbox用のレシートがproductionに送信された場合の処理
if ($body['status'] === 21007) {
    // 必要ならsandbox用URLへ再送するなどの処理
}

// レシートが有効でなかった場合の処理
if ($body['status'] !== 0) {
    // 必要なら何かしらの処理
}

// バンドルIDが異なる場合の処理
if ($body['receipt']['bundle_id'] !== [バンドルID]) {
    // 必要なら何かしらの処理
}

// レシート検証に成功した場合の処理