使用服务账号请求Google Play Developer API

编辑于 2022-07-12 23:03:25 阅读 4686

Google Play 虽然提供了纯客户端的对接方案,但是官方也更推荐将敏感逻辑移至后端

Google Play Developer API 是一种服务器到服务器 API,与 Android 平台上的 Google Play 结算库相辅相成。此 API 提供了 Google Play 结算库中未提供的功能,如安全地验证购买交易以及为用户办理退款。

配置 Google Play Developer API

若要使用 Google Play Developer API,您需有一个 Google Cloud 项目。

关联Google Cloud项目

WX202207091017492x.jpg

如上图,你可以选择关联现有项目,也可以选择创建新项目

关联现有项目

选择现有项目前,需确认该项目开启了Google Play Android Developer API

WX202207091028352x.png

WX202207091030072x.jpg

WX202207091030462x.png

创建新项目

创建新项目就方便了,系统会自动开启Google Play Android Developer API

在已关联Google Cloud项目中创建服务账号

WX202207091037482x.png

要访问Google Play Developer API,你可以选择OAuth 客户端ID或服务帐号,这里推荐使用 服务帐号

创建一个服务帐户:

点击add创建服务帐户。

在服务帐户的详细信息,键入一个名称,ID和服务帐户的描述,然后单击创建并继续。

可选:在授予此服务帐户访问到项目中,选择IAM角色授予服务帐户。(我理解应该是必选)

点击继续。

可选:在授予用户访问该服务帐户,添加允许使用和管理服务帐户的用户或组。(我理解也是可选,我没选)

点击完成。

点击add创建键,然后单击创建。

在创建帐号的过程中,您需要向自己的服务帐号授予对 Google Cloud 项目的访问权限,这样它才能显示在 Google Play 管理中心内。

WX202207091106212x.jpg

如需使用 Google Play 结算服务 API,您必须授予以下权限:

  • 查看财务数据、订单和用户取消订阅时对调查问卷的书面回复
  • 管理订单和订阅

WX202207091100242x.jpg

WX202207091101352x.jpg

为服务账号创建密钥

WX202207091112112x.jpg

密钥创建成功,会提示你保存到本地,一个pc-api-***-797-ac21a2656c65.json文件,保存好,后面PHP要用

此时,您应该能够通过服务帐号访问 Google Play Developer API。

PHP出场,这里应该有尖叫声~

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;
            //更详细的代码请参考 http://www.cuiwei.net/p/1613838190/
        }catch (Exception $exception){
            return show(0, $exception->getMessage());
        }

注意:上述权限设置完不是立马生效的。我就是刚设置完,就使用PHP请求,结果提示401,然后各种找原因,未果;刚好到饭点,我就去吃饭了,等回来继续试,竟奇迹般的成功了。中间大概隔了1~2个小时

参考

Google Play Developer API 使用入门

如何创建服务账号?

将 OAuth 2.0 用于服务器到服务器应用

purchases.products.get接口文档

Google APIs Client Library for PHP API Reference

广而告之,我的新作品《语音助手》上架Google Play了,欢迎下载体验