PHPでGoogle Play Developer APIを使ってAndroidのレシートを検証した後にAcknowledgeしたい(超簡易メモ版)

調査してもほとんど情報を見つけることができない「Acknowledge」の挙動について超簡易的にまとめてみます。

以降、間違った情報もある可能性が高く、課金処理は慎重に実装されるべきなので、鵜呑みにはしないようお願いします。

基本的にはこちらの続きで、タイトルもほぼ一緒ですが、今回は Acknowledge についてです。 ohshige.hatenablog.com

Acknowledgeとは?

Acknowledgeとは公式によると以下です。 developer.android.com

端的に言うと、ユーザの購入行動の「確定処理」をアプリ側なりサーバ側なりでやれということでしょうか。
これをしないと払い戻しになってしまうため大変です。

そういうわけなので、言われた通りにAcknowledgeすればいいわけですが、いくつかの挙動の違いに悩んだのでまとめます。

Google APIs Client Library for PHP

google-api-php-clientでAcknowledgeを実装するには以下のように行います。
(ライブラリのインストールや認証の事前準備は前の記事の通りです)

// 定期購読の場合
$postBody = new \Google_Service_AndroidPublisher_SubscriptionPurchasesAcknowledgeRequest();
$result = $publisher->purchases_subscriptions->acknowledge([packageName], [productId], [purchaseToken], $postBody);
// 都度課金の場合
$postBody = new \Google_Service_AndroidPublisher_ProductPurchasesAcknowledgeRequest();
$result = $publisher->purchases_products->acknowledge([packageName], [productId], [purchaseToken], $postBody);

必要なパラメータがあれば公式のリファレンスを参照してください。
Purchases.subscriptions: acknowledge  |  Google Play Developer API  |  Google Developers
Purchases.products: acknowledge  |  Google Play Developer API  |  Google Developers

挙動まとめ

全体的に挙動の把握に苦労したのでまとめます。

都度課金定期購読
新バージョンのレシートそのまま204 No Content204 No Content
払い戻し済み500 Internal Server Error ( null )400 Bad Request (subscriptionNotOwnedByUser)
継続利用停止済み-400 Bad Request (subscriptionNotOwnedByUser)
旧バージョンのレシート204 No Content400 Bad Request (subscriptionNotOwnedByUser)

Acknowledgeに成功すれば204が返ってきます。

成功しなかった場合がよくわかりません。
旧バージョンのレシートに対して実行してしまった場合に都度課金と定期購読とで挙動が異なる上に、払い戻し済みのレシートに対して実行してしまった場合でも都度課金と定期購読で挙動が違って都度課金に至っては500が返ってきてしまいます。

これらに関しては今後変更になる可能性もあるため注意が必要がかもしれません。