【GooglePay支付】GooglePay支付通道对接(二)
需求背景
接上文:GooglePay支付通道对接(一) 本文主要整理和总结在对接过程中的出现的问题以及解决的办法
问题QA
后端:SpringCloud + SpringBoot(版本号:2.1.x)+MySQL +Redis+Maven
前端:安卓 APP
Google 支付 Maven依赖
<!--谷歌支付sdk--> <dependency> <groupId>com.google.apis</groupId> <artifactId>google-api-services-androidpublisher</artifactId> <version>v3-rev24-1.24.1</version> </dependency>
问题1
客户端购买完成,服务端验证purchaseToken时网络无法连通问题
例如提示
Exception in thread ...... java.net.SocketTimeoutException: connect timed out
...省略...
at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:113)
原因
由于国内访问谷歌服务器以及相关的API被墙,导致出现连接失败
解决方式
方案一: 如果在服务器上调试,需要一台可以连接外网的服务器
方案二: 如果在本地调试,需要先打开VPN,然后将以下配置添加代码中
//下方的 1080端口 为 VPN所监听的本地的端口,详情可以打开自己的VPN查看 Properties systemProperties = System.getProperties(); systemProperties.setProperty("http.proxyHost", "127.0.0.1"); systemProperties.setProperty("http.proxyPort", "1080"); systemProperties.setProperty("https.proxyHost", "127.0.0.1"); systemProperties.setProperty("https.proxyPort", "1080"); systemProperties.setProperty("socksProxyHost", "127.0.0.1"); systemProperties.setProperty("socksProxyPort", "1080"); systemProperties.setProperty("http.nonProxyHosts","localhost"); systemProperties.setProperty("https.nonProxyHosts","localhost"); System.setProperty("sun.net.client.defaultConnectTimeout", String.valueOf(8000));// (单位:毫秒) System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2,SSLv3");
问题2
订单支付成功,后端验证支付订单时提示
Error 403: Google Play Android Developer API has not been used in project
原因
当前开发者账号没有关联安卓应用
解决方式
登录 谷歌开发者后台 https://play.google.com/console/developers
左侧菜单栏:设置--API权限--Google Cloud项目
查看 自己的项目是否有关联当前开发者账号 如果没有关联 ,则需要关联
查看 Play Android Developer API 是否时启用状态,如果不是启用状态,则需要设置为启动
问题3
订单支付成功,后端验证支付订单时提示
Error 403: The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console
原因
使用服务账号调用谷歌API时,服务账号与APP没有绑定关系
解决方式
登录 谷歌开发者后台 https://play.google.com/console/developers
左侧菜单栏:设置--API权限--服务账号
1.查看当前开发者账号下是否有服务账号,以及调用查看订单的服务者账号在当前服务账号列表内,如果没有,可以新创建一个服务账号
2.查看当前服务账号是否有权限,如果是做支付业务,则需要开通对应的权限,
左侧菜单栏:用户和权限--->找到对应的服务者账号-->服务账号-->查看权限 见下图2
权限-->账号权限 勾选财务相关的权限 见下图3
问题4
订单支付成功,后端验证支付订单时提示
Error 401: The current user has insufficient permissions to perform the requested operation
原因
使用服务账号调用谷歌API时,当前服务者账号没有权限执行当前操作(查询操作)
解决方式
登录 谷歌开发者后台 https://play.google.com/console/developers
左侧菜单栏:
所有应用-->选择自己的那个应用-->查看应用 见图1和图2
商品-->查看商品-->修改名称或者说明 见图3
问题5
订单支付成功,后端验证支付订单时需要对身份进行认证
认证方式这里有两种
1.通过服务账号完成(结合Java SDK完成)
2.通过Oauth2的方式,获取accessToken后,调用查询支付订单的restAPI完成
解决方式
文档地址 https://developers.google.com/android-publisher/getting_started
如何配置Oauth2和服务账号,见图1
参考资料
https://blog.csdn.net/qq_37611096/article/details/118030549
https://icode.best/i/51498834207457
https://www.likecs.com/show-66686.html
https://blog.csdn.net/Blog_Sun/article/details/108261941
https://www.dandelioncloud.cn/article/details/1439375725127360514 (连接问题)
https://developers.google.com/android-publisher/getting_started (谷歌开发者API)
https://developers.google.com/android-publisher (谷歌API地址)