Google支付与服务端验证
一、Google 开发者平台配置回调
订阅后台地址
Google Cloud Pub/Sub 主题列表
新建主题
创建订阅:输入回调服务端地址(付款成功后进行回调)
注意:需要设置 [email protected]
(必须添加)。
参考网址:Google Play 计费准备
Google Play 控制台
最后通过 创收设置 来检查是否能够由 Google 通知到我们。
配置步骤
- 创建 API 项目:这个项目与登录用的项目不同。
- 开启 Google Play Android Developer API。
- 设置 OAuth 同意屏幕:即开发者授权账号登录时的登录页面。
- 创建 Web 应用的 OAuth 客户端 ID。
- 在 Google Play 开发者后台的 API 权限 菜单中关联刚刚创建的项目。一个 Google Play 账号只需关联一个 API 项目,该项目可以查询关联账号中的所有应用的订单。
- 拉起授权页面,使用 Google 开发者账号给项目授权,得到 code。
- 通过 code 获取 refreshToken,该 token 仅在第一次返回,需要永久保存(非常重要)。如果丢失,需重新创建 OAuth 客户端 ID,并重复步骤 6 和 7。
- 刷新 refreshToken,获取 accessToken,通过 accessToken 查询订单状态。accessToken 一般有效期为 5 分钟,过期后需重新用 refreshToken 获取新的 accessToken。
操作截图
步骤 1:创建 API 项目
步骤 2:开启 Google Play Android Developer API
搜索“Google Play Android Developer API”
开启“Google Play Android Developer API”
步骤 3:开启同意屏幕
填写必填项即可。
步骤 4:创建 OAuth2 客户端 ID
创建页面和创建成功后的修改页面可以获取到 clientId 和 clientSecret。
到此,API 项目已创建完成。
步骤 5:在 Google Play 后台关联 API 项目
步骤 6:获取 code
地址:https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri={填写的重定向地址}&client_id={创建的clientId}
将 {XX}
替换为创建 API 项目时填写的重定向地址和 clientId,然后在浏览器中打开,授权登录。
请求方式:浏览器中打开。
步骤 7:使用 code 换取 refreshToken
地址:https://accounts.google.com/o/oauth2/token
请求方式:POST
参数:
– grant_type=authorization_code
– code=获取到的code(需 urldecode)
– client_id=创建 API 项目时的 clientId
– client_secret=创建 API 项目时的 clientSecret
– redirect_uri=创建 API 项目时的重定向地址
获取到 refreshToken,务必保存,它只会在第一次请求中返回。
步骤 8:使用 refreshToken 获取 accessToken
地址:https://accounts.google.com/o/oauth2/token
请求方式:POST
参数:
– grant_type=refresh_token
– refresh_token=刚刚获取到的 refreshToken
– client_id=创建 API 项目时的 clientId
– client_secret=创建 API 项目时的 clientSecret
步骤 9:查询订单状态
地址:https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}?access_token={access_token}
packageName
:应用包名,需与创建 API 项目时的包名一致。productId
:对应购买商品的商品 ID。token
:购买成功后 Purchase 对象的 getPurchaseToken()。access_token
:上面获取到的 accessToken。
请求方式:GET。
总结
到此,整个支付验证流程已完成。以下是笔者在试用过程中遇到的一些问题总结:
- Google 应用必须在封闭测试状态下并审核通过才能支付,文档提到内部测试即可,但笔者每次都需在封闭测试状态下才能支付。
- 在 Firebase 中创建的项目会自动同步到 Google API 后台,无需单独创建登录使用的项目。
- 登录使用的 API 项目与查询支付的 API 项目是两个不同的项目,查询支付的 API 项目一个 Google Play 账号对应一个项目,该账号中的所有应用均可通过此项目查询。
- 获取 code 授权 API 项目时,需使用 Google Play 后台的开发者账号授权。
关于 RefreshToken 过期问题
- API 项目同意屏幕发布状态为测试(有效期 7 天)。
- RefreshToken 6 个月未使用,需维护 accessToken 的有效性。
- 授权账号改密码可能导致过期(未测试)。
- 授权超过 50 个刷新令牌,最先的刷新令牌会失效。
- 取消授权。
- 属于具有有效会话控制策略的 Google Cloud Platform 组织。