【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地址)

  

posted @ 2022-06-07 15:52  听风是雨  阅读(2724)  评论(1编辑  收藏  举报
/* 看板娘 */