目录

Google内购-Java服务端Springboot校验订单详细流程

Google内购 Java服务端(Springboot)校验订单详细流程

因为产品需要接入Google支付,这里记录一下进行Java服务端校验的过程。

一、 Google Pay主要支付流程

1.手机端向Java服务端发起支付,生成预订单,给手机端返回生成的订单号

2.手机端向Google发起支付(传入本地服务器生成的订单号)

3.Google服务器将支付结果返回给手机端

4.手机端向Java服务端发送校验请求,校验通过后即可处理订单

二、前提条件

1.一台海外服务器(国内服务器请求Google服务器进行校验会出现请求超时的问题)

2.接入Google服务的手机客户端

3.浏览器能访问Google Paly控制台

三、Google Paly控制台准备

1.进入 ,选择开发者者账号登陆。

2.进入api权限设置,初始状态是没有的(我这里是已经创建了),直接创建一个新的项目就可以了。

https://i-blog.csdnimg.cn/blog_migrate/e38bfb3d29576d47e75a7fcaaed48f2c.png

3.给该api服务创建一个服务账号

https://i-blog.csdnimg.cn/blog_migrate/02a751a496f91980f3397532df825a7a.png

4.按照弹窗的提示进行操作

https://i-blog.csdnimg.cn/blog_migrate/09f9ff29cc0535f3a3279e74a97d2433.png

5.点击创建一个服务账号

https://i-blog.csdnimg.cn/blog_migrate/63e36b60cc8a72aad03ec9cb1d6d02fd.png

6.写好必填的名称即可直接点击完成

https://i-blog.csdnimg.cn/blog_migrate/ce8dad8878d662e54055c82191aa7342.png

7.点击进入刚刚创建好的账号(可以复制一下,等等添加权限的时候需要粘贴过去),选择添加密钥

https://i-blog.csdnimg.cn/blog_migrate/6c937a87fe8e5006def55ef5e2edc569.png

8.选择Json格式,点击创建,然后保存好生成的Json文件

https://i-blog.csdnimg.cn/blog_migrate/5977f07c747164fe30609518d713e2b8.png

9.回到控制台,给刚刚创建好的服务账号添加权限

https://i-blog.csdnimg.cn/blog_migrate/a1f0affd20dcec8130dde75d7ee7fd28.png

10.邀请刚刚添加的服务账户并授权后完成邀请

https://i-blog.csdnimg.cn/blog_migrate/b8a42115d8649e4e08c889736de280b4.png

https://i-blog.csdnimg.cn/blog_migrate/5dc4e692875f4626af2c54238a959d44.png

11.进入应用的商品页面, 重新保存一下商品 (修改一下描述信息,然后修改回来即可),不然请求Google服务器进行校验时,会出现401没有用户没有api权限的问题!!!!!!

https://i-blog.csdnimg.cn/blog_migrate/a4c1faff8a859c2afb5d31b67cf4104d.png

至此完成了控制台的准备工作

三、Java服务端处理

前提条件,需要在海外服务器才能成功调取Google Api否则会出现超时的情况

maven依赖:

        <dependency>
            <groupId>com.google.apis</groupId>
            <artifactId>google-api-services-androidpublisher</artifactId>
            <version>v3-rev24-1.24.1</version>
        </dependency>

校验代码:

@RestController
public class GoogleController {

    //    packageName为应用程序包名、productId商品id、purchaseToken谷歌返回的收据
    @PostMapping("/")
    public ProductPurchase checkOrder(@RequestBody GooglePayDto googlePayDto,
                              HttpServletRequest requestDto) throws IOException, GeneralSecurityException {
        //使用服务帐户Json文件获取Google凭据
        List<String> scopes = new ArrayList<>();
        scopes.add(AndroidPublisherScopes.ANDROIDPUBLISHER);
        ResourceLoader resourceLoader = new DefaultResourceLoader();
        Resource resource = resourceLoader.getResource("classpath:static/刚下载的json文件,这里放到了static目录下");
        GoogleCredential credential = GoogleCredential.fromStream(resource.getInputStream())
                .createScoped(scopes);
//        使用谷歌凭据和收据从谷歌获取购买信息
        HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
        JacksonFactory jsonFactory = new JacksonFactory();
        AndroidPublisher publisher = new AndroidPublisher.Builder(httpTransport, jsonFactory, credential)
                .setApplicationName("应用程序名").build();
        AndroidPublisher.Purchases purchases = publisher.purchases();
        final AndroidPublisher.Purchases.Products.Get request = purchases.products().get(googlePayDto.getPackageName(), googlePayDto.getProductId(),googlePayDto.getPurchaseToken());
        System.out.println("==============="+request+"================");
        final ProductPurchase purchase = request.execute();
        //处理业务
        return purchase;
    }
}
public class GooglePayDto {

    String packageName;
    String productId;
    String purchaseToken;

    public String getPackageName() {
        return packageName;
    }

    public void setPackageName(String packageName) {
        this.packageName = packageName;
    }

    public String getProductId() {
        return productId;
    }

    public void setProductId(String productId) {
        this.productId = productId;
    }

    public String getPurchaseToken() {
        return purchaseToken;
    }

    public void setPurchaseToken(String purchaseToken) {
        this.purchaseToken = purchaseToken;
    }
}

四、测试

前台传入三个参数

packageName:包名

productId:商品id

purchaseToken:支付凭证

结果:

https://i-blog.csdnimg.cn/blog_migrate/cd362ddf55d170fcf1850caf4268b09c.png