CakePHPでApp Storeレシート取得

Nao
VELTRA Engineering
Published in
3 min readDec 8, 2017

Boleh VELTRA!! ナオユキです。

ちょっとエンジニアっぽいことをしたのでメモ程度に残しておきます。

iOSアプリにおいて、レシート(課金情報)をサーバーサイドで取得してみました。

公式のプログラミングガイドはこちら

初心者に教える必要があったので、省略せずに書きました

function _checkReceipt($receipt_data=null){
$url = 'https://buy.itunes.apple.com/verifyReceipt';
$options = JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT | JSON_PRETTY_PRINT;
$send_data = array();
$send_data["password"] = {App内課金共有シークレット ※1};
$send_data["receipt-data"] = $receipt_data;
$content = json_encode($send_data, $options); $opts['http'] = [
'method' =>'POST',
'header' => 'Content-type: application/json',
'content' => $content
];
$context = stream_context_create($opts); // 本番環境
$response = file_get_contents($url, false, $context);
// 本番環境にテスト環境のレシートを問い合わせてしまった場合
$response = json_decode($response);
if (@$response->status == 21007) {
$url = 'https://sandbox.itunes.apple.com/verifyReceipt';
$response = file_get_contents($url, false, $context);
$response = json_decode($response);
}
if( @$response->status == 0 ){
★必要な処理を入れる
}
}

※1:App内課金共有シークレットの取得

マイApp→画面左上の「・・・」マークをクリック→App内課金共有シークレット

必要な処理部分は記載しませんでしたが、調べたところlatest_receipt_infoを参照して、動かしたいプログラムをこちょこちょと書けば良さそうです。

in_appとlatest_receipt_infoのどちらを使うの??と言う質問がよく見られますが、こちらは自動更新があった場合に古いレシートでアクセスすると、2つの中身の違いで分かるようです。(他の方のブログがたくさんあるので省略)

たまにエンジニアっぽいことをすると楽しいですね!

--

--