Google Android應用內支付訂單服務端驗證
阿新 • • 發佈:2018-12-15
最近公司的APP新增了收費版本,針對一些高階功能需要使用者付費才能使用,付費的方式是使用者通過應用內支付去訂閱一個月或一年的賬戶高階許可權,相當於QQ裡面的VIP功能。
大概的流程是使用者下載APP後註冊之後預設為普通使用者,使用者通過應用內支付去訂閱高階賬戶許可權包之後,客戶端應用把訂單的收據資料提交到伺服器,伺服器儲存使用者的支付訂單收據資料,並且去驗證收據的合法性,確保不是偽造的收據,並且在後續管理使用者的取消訂閱和訂閱過期的行為。
以Google Play為例
一、為訪問Google API做準備
2、進入選單Developer account -> API access -> Service Accounts;
3、建立好賬戶之後需要更新賬戶許可權,然後點選View in Google Developers Console;
4、建立Credentials,選擇Service account key;
5、在新的頁面中選擇剛剛建立的Service Accounts;
5、點選建立之後將下載的JSON檔案放到伺服器的指定目錄下;
二、新增依賴庫到專案
composer require google/apiclient:"^2.0"
三、驗證收據資訊
$path_parts = pathinfo(__FILE__); $dir_name = $path_parts['dirname']; $oauth_file = $dir_name."/GooglePlayAndroidDeveloper-xxxxxx.json"; $google_client = new \Google_Client(); $google_client->setApplicationName($package_name); $google_client->setClientId(GOOGLE_CLIENT_ID); $google_client->setScopes(array('https://www.googleapis.com/auth/androidpublisher')); $google_client->setAuthConfig($oauth_file); $androidPublishService = new \Google_Service_AndroidPublisher($google_client); $result = $androidPublishService->purchases_subscriptions->get( $package_name, $product_id, $purchase_token ); Log::info($result);
根據expiryTimeMillis欄位來驗證訂單是否有效:
$current_time = time();
$valid_time = $result['expiryTimeMillis'] / 1000;
if ($current_time < $valid_time) {
$status = 1;
}