head_hexagonはにらぼ☆てっくtale_hexagon

Androidアプリの課金 レシート検証

Posted by KusanagiTakaya on 2017/01/13 under Development | Be the First to Comment


こんにちは。
去年の成人式を思い出しました、kusanagiです!

最近はandroidの課金について書いているのですが、
サーバーでのレシート検証について調べたのでシェアしたいと思います。

http://qiita.com/yukatou/items/1809853f9af97288ac9a
(Qiita Androidのアイテム課金でレシート検証をサーバ側で行う)

必要なものは課金時のレシートと署名が正しいかチェックするための公開鍵です。
Google Play Developer Console > サービスとAPI から取得できます。
Qiitaのサイトのようにpem形式で保存しておきました。

レシートと署名ですが、
andoroidアプリでの課金時にすでに署名はbase64でエンコードされています。
サーバー側で合わせるためにレシートだけあえてアプリ側でbase64にエンコードしました。

順調に進むかと思いきや。。。
Qiitaサイトのやり方でつまづいてしまったところがひとつありました。

アプリ側であえてbase64エンコードしたレシートはサーバーでもデコードできたのですが、
元々base64にエンコードされている署名はデコードがうまくいかないようでした。
調べてみると,base64をサーバー側にpostで送信するときに + が ‘ ‘(半角スペース) に変わってしまうことと、
base64をエンコードするときは一行を64文字にしておく必要があるようです。

$post_signature = $_POST[‘siganture’];

(半角スペースを+に代えて)
$line_signature = str_replace(‘ ‘, ‘+’, $post_signature);

(64文字で改行を入れてから)
$base64_signature = chunk_split($line_signature, 64, “\n”);

(base64でエンコードです。)
$signature = base64_decode($base64_signature);

私はこれでいけました。

コメントを残す