目前的一个需求是:app把购买令牌(purchaseToken)
传过来了,服务端需要使用这个purchaseToken
去请求Google的接口,以检测app内商品的购买和消费状态
若要使用 Google Play Developer API,您需有一个 Google Cloud 项目。
如上图,你可以选择关联现有项目,也可以选择创建新项目
选择现有项目前,需确认该项目开启了Google Play Android Developer API
创建新项目就方便了,系统会自动开启Google Play Android Developer API
要访问Google Play Developer API
,你可以选择OAuth 客户端ID或服务帐号,这里推荐使用 服务帐号
创建一个服务帐户:
点击add创建服务帐户。 在服务帐户的详细信息,键入一个名称,ID和服务帐户的描述,然后单击创建并继续。 可选:在授予此服务帐户访问到项目中,选择IAM角色授予服务帐户。(我理解应该是必选) 点击继续。 可选:在授予用户访问该服务帐户,添加允许使用和管理服务帐户的用户或组。(我理解也是可选,我没选) 点击完成。 点击add创建键,然后单击创建。
在创建帐号的过程中,您需要向自己的服务帐号授予对 Google Cloud 项目的访问权限,这样它才能显示在 Google Play 管理中心内。
如需使用 Google Play 结算服务 API,您必须授予以下权限:
密钥创建成功,会提示你保存到本地,一个pc-api-***-797-ac21a2656c65.json
文件,保存好,后面PHP要用
此时,您应该能够通过服务帐号访问 Google Play Developer API。
Google为PHP提供了库,安装
composer require google/apiclient
以请求purchases.products.get
接口为例
$configLocation = $this->app->path.'/config/pc-api-***-797-ac21a2656c65.json';
// echo file_get_contents($configLocation);exit;
// 将 JSON 设置 环境变量
putenv('GOOGLE_APPLICATION_CREDENTIALS='.$configLocation);
//包名
$package_name='net.cuiwei.voice';
//商品ID
$product_id='voice_0';
//客户端传过来的 purchaseToken
$purchase_token='facbncnplohikbjmf。。。';
try {
$google_client = new \Google_Client();
$google_client->useApplicationDefaultCredentials();
$google_client->addScope(\Google_Service_AndroidPublisher::ANDROIDPUBLISHER);
$androidPublishService = new \Google_Service_AndroidPublisher($google_client);
$result = $androidPublishService->purchases_products->get(
$package_name,
$product_id,
$purchase_token
);
echo json_encode($result, JSON_UNESCAPED_UNICODE);exit;
//purchaseState 0。已购买1.已取消2.待定 consumptionState 0。尚未消耗1.已消耗
if($result->purchaseState==1 && $result->consumptionState==1){
//业务处理
}
}catch (Exception $exception){
return show(0, $exception->getMessage());
}
注意:上述权限设置完不是立马生效的。我就是刚设置完,就使用PHP请求,结果提示401,然后各种找原因,未果;刚好到饭点,我就去吃饭了,等回来继续试,竟奇迹般的成功了。中间大概隔了1~2个小时