0%

google服务

google服务

谷歌登录

谷歌登录只需要 clientId.客户端会获取到 idToken,发送给后端以后,后端拿 idToken请求谷歌,谷歌会解析出这个 Google 账号的信息,其中azp参数就是 clientId,与本地的 clientId 对比,校验这个账号是不是本应用登录的.是的话就创建账号或登录,返回账号信息给客户端.

谷歌支付

谷歌支付需要的参数:

  • clientId
  • clientSecret
  • googlePublicKey
  • 最麻烦的refreshToken

其中 clientId 和 clientSecret还有googlePublicKey在谷歌开发者后台可以拿到.
refreshToken 需要一连串的流程

1.生成Code:

这个code 只能用一次!!!

https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri={your_web_index}&client_id={your_client_id}
访问成功后会弹出一个对话框,点击同意即可,如果你没有登录,请登录您被开发者邀请共同开发且已经授权的帐号,切记这里的帐号一定是在Google Pay Control中可以查到的并已经授于访问权限的。接下来浏览器会定位到你的Web Index页面。并在浏览器地址上多出了?code=……的字符串,取出这个code。

2.获取Refresh Token:

首先要注意,refreshToken 只有在第一次请求的时候会返回,以后请求都不会有了,所以请妥善保存

请求 POST https://accounts.google.com/o/oauth2/token
参数放在body 里,用 x-www-form-urlencoded 方式

params data
code {your_code}
client_id {your_client_id}
client_secret {your_client_secret}
redirect_uri {you_redirect_url}
grant_type authorization_code

因为这个是请求谷歌 API 的,所以是需要翻墙的,而本地请求postman App 和 iterm2 都是没有走 ss 代理的,所以都没法访问,需要使用 postman 的 Chrome 应用,并且安装Postman Interceptor插件.
访问格式是这样:

这样就会返回:

1
2
3
4
5
6
7
{
"access_token":"{{access_token}}",
"expires_in": 3600,
"refresh_token": "{{refresh_token}}",
"scope": "[https://www.googleapis.com/auth/androidpublisher](https://www.googleapis.com/auth/androidpublisher)",
"token_type": "Bearer"
}

到这里就获得了 refreshToken.

当获得了这些所需的就可以去申请商品,由客户端发起内购了.但是要注意,商品的申请一定要在谷歌开发者账号关联 client 之前.否则就会报错

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"error": {
"code": 403,
"message": "The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console.",
"errors": [
{
"domain": "androidpublisher",
"message": "The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console.",
"reason": "projectNotLinked"
}
]
}
}

如果报这个错,并且已经确定开发者账号已经关联的应用,那可以重新申请商品试试.

一个开发者账号下有多个App的情况有一个坑:

主要是Google Console的这个API权限,只能关联一个项目,所以谷歌支付的客户端ID应用私钥参数都要配指定关联App的
只有谷歌公钥 (publishKey)是配各自App自己的