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 | { |
到这里就获得了 refreshToken.
当获得了这些所需的就可以去申请商品,由客户端发起内购了.但是要注意,商品的申请一定要在谷歌开发者账号关联 client 之前.否则就会报错
1 | { |
如果报这个错,并且已经确定开发者账号已经关联的应用,那可以重新申请商品试试.
一个开发者账号下有多个App的情况有一个坑:
主要是Google Console的这个API权限,只能关联一个项目,所以谷歌支付的客户端ID和应用私钥参数都要配指定关联App的
只有谷歌公钥 (publishKey)是配各自App自己的