定期購入や 1 回だけの購入については、日常業務の一環として管理操作が必要になることがあります。たとえば、カスタマー サービスがユーザーに対して全額払い戻しまたは一部払い戻しを行う必要がある場合や、利用資格の取り消しが必要になる場合が考えられます。Google Play Console から注文を管理できます。また、独自のシステムから注文を管理したい場合は、Google Play Developer API を使用して管理できます。
定期購入を解約する
ユーザーは Google Play ストアを使用していつでも Google Play の定期購入を解約できますが、定期購入を解約するオプションをアプリとウェブサイトで提供する必要があります(該当する場合)。
ユーザーが自発的に解約できるようにする最も簡単な方法は、Play ストアへのディープリンクを使用することです。Play ストアでは、ユーザーが定期購入を表示、管理できます。
バックエンドからキャンセルをトリガーする必要が生じる場合もあります。purchases.subscriptions.cancel
メソッドを使用すると、定期購入をキャンセルできます。たとえば、この方法を使用して以前のサービスを停止できます。定期購入を解約しても払い戻しは行われず、ユーザーは現在の請求対象期間が終了するまで引き続きアクセスできます。このメソッドで定期購入を解約すると、ユーザーは Play ストアで定期購入を再開できなくなりますが、必要な場合は引き続きアプリから定期購入を登録できます。
この操作を実行すると、SUBSCRIPTION_CANCELED
リアルタイム デベロッパー通知がトリガーされます。これらの解約は解約の説明に沿って処理します。
課金を延期する
subscriptions.defer
を使用して、定期購入の利用資格期間を延長します。延期期間中、ユーザーはコンテンツを定期購入した状態を維持しますが、延長期間中については課金されません。定期購入の課金を延期すると、それに応じてステータス情報が更新され、購入ステータス情報の expiryTime
フィールドに反映されます。
- 有効な定期購入の場合、課金の延期は次の更新日が延長されます。
- プリペイド プランの場合、課金を延期すると有効期限が延長されます。
延期された課金の使用例を次に示します。
- 特典として、既存の定期購入者にフィードバック アンケートの回答期間を 1 週間分無料にするなど、ユーザーに無料アクセス権を付与します。
- カスタマーケアの対応として、お客様に無料のアクセス権を付与します。たとえば、長期間のサービス停止によってサービスの利用に影響が生じた可能性がある場合などです。
課金の延期は、API 呼び出しごとに最短で 1 日、最長で 1 年間です。利用資格の終了をさらに延期するには、新しい有効期限の前に再度 API を呼び出します。
この操作を実行すると、SUBSCRIPTION_DEFERRED
リアルタイム デベロッパー通知がトリガーされます。これらのイベントの処理方法については、定期購入についての定期購入者の課金を延期するをご覧ください。
例:
FitnessGoals ストリーミング サービスは、2 月に定期的なエクササイズを促すプロモーションを実施したいと考えています。
そこで、2 月中に少なくとも 10 回 FitnessGoals を使用してエクササイズをした会員に対して、さらに 1 か月分のサービスを提供することにしました。
チャレンジの結果を追跡し、3 月 1 日に、2 月にチャレンジを達成したユーザーの有効な定期購入ごとに
subscriptions.defer
API を呼び出します。これらのユーザーは、通常のエクササイズ動画を 1 か月間無料で視聴できるほか、FitnessGoals が健康づくりにどう役立つかを友だち全員に教えてくれます。
払い戻しと取り消しを行う
定期購入や 1 回だけの購入の払い戻しやアクセス権の取り消しが必要となる状況はよくあります。
オーダー ID で注文の全額払い戻しを行う
orders.refund
API を使用すると、購入から 3 年以内の注文に対して全額払い戻しを行うことができます。orders.refund
メソッドは、払い戻しを行うとともに、アクセス権を取り消すかどうかを示す取り消しパラメータを受け取ります。
定期購入の払い戻し呼び出しで取り消しを行うと、定期購入は直ちに終了し、リアルタイム デベロッパー通知がトリガーされます。SUBSCRIPTION_REVOKED
これらのイベントの処理方法については、定期購入ライフサイクル管理ガイドの取り消しセクションをご覧ください。
例:
新しいワールドカップの開幕を祝うため、e スポーツ アプリ「Football-Not-Soccer」は、最初の 24 時間以内に新しいチームキットを購入したすべてのユーザーを対象に、無料のバーチャル ジャージを抽選で当たることにしました。
Football-Not-Soccer は、取り消しパラメータを渡さずに
orders.refund
API を使用して、ユニフォームの購入を勝者に払い戻します。
定期購入の取り消しと購入トークンによる払い戻し
ユースケースによっては、ユーザーの定期購入へのアクセス権を取り消して払い戻しが必要になることがあります。Play 請求サービスは一部払い戻し(日割り計算を含む)を行い、subscriptionsv2.revoke
API を使用して実施できます。このエンドポイントでは、revocationContext
を指定して払い戻しの計算方法を決定できます。
このアクションを実行すると、SUBSCRIPTION_REVOKED
リアルタイム デベロッパー通知がトリガーされます。アプリでは取り消しの説明に沿って、これらの解約を処理する必要があります。
例:
- 購入トークン
1a2b3c4d5e6f7g8h9i0j
で購入 - パッケージ名が
com.your.app
のアプリ - 日割り計算による払い戻しの目的
HTTP POST リクエスト:
https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.app/purchases/subscriptionsv2/tokens/1a2b3c4d5e6f7g8h9i0j:revoke
リクエストの本文:
{
"revocationContext": {
"proratedRefund": {}
}
}
日割り計算による払い戻し
定期購入を終了し、残りの利用資格期間を一部払い戻しする必要がある場合は、日割り計算による払い戻しを行います。purchases.subscriptionsv2.revoke
関数を使用し、払い戻しタイプとして "proratedRefund": {}
を設定します。
例:
マリアさんは、
SuperMovies
ストリーミング プランの 30 日間の自動更新プランに加入しています。彼女はしばらくの間、サービスを楽しんで利用していました。マリアさんは、請求期間の 15 日目にカスタマー サービスに連絡し、海外に引っ越すため翌日以降はサービスを利用できなくなると報告しました。カスタマー サービスが、ユーザーの定期購入の詳細をシステム内で見つけ、日割り計算による払い戻しをリクエストする
purchases.subscriptionsv2.revoke
の呼び出しをトリガーします。カスタマー サービスから、定期購入料金の約 50% が払い戻されることと、サービスへのアクセスを直ちに終了することを伝えました。