Google pay java 后端验证方式二

Google Pay主要支付流程

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

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

3.Google服务器将支付结果返回给手机端(因这边用到的是消耗型的产品,所以购买后必须要通知gp我已经消耗了这次交易)

4.手机端向Java服务端发送校验请求,校验通过后即可处理订单(服务端重试校验,发货,保证订单正常发货成功)

配置

packageName:应用包名

credential:密钥

Java服务端处理

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

maven依赖:

<project>
  <dependencies>
    <dependency>
      <groupId>com.google.apis</groupId>
      <artifactId>google-api-services-androidpublisher</artifactId>
      <version>v3-rev20211125-1.32.1</version>
    </dependency>
  </dependencies>
</project>

 校验代码:

@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();
        //处理业务
        Integer purchaseState = purchase.getPurchaseState();
        if (!GooglePayStatus.PURCHASED.getValue().equals(purchaseState) &&!GoogleConsumptionStatus.YET_TO_BE_CONSUMED.getValue().equals(purchase.getConsumptionState())) {
            log.info("==========>订单校验【成功】");
        } else {
            log.info("==========>订单校验【失败】");
        }
        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:支付凭证

结果:

image.png

### 如何使用Google Pay进行收款 为了通过Google Pay接收支付开发者需遵循特定流程以确保应用程序能够安全有效地处理交易。当集成了Google Pay之后,在`task`对象上添加`addOnCompleteListener`用于验证Google Pay API的可用性[^1]。 一旦确认API可以正常使用并接收到成功响应,则应激活界面中的Google Pay按钮以便用户点击发起支付请求。此过程涉及调用相应的接口来获取用户的付款信息,并将其传递给商家服务器或者第三方支付处理器(如Stripe),后者负责执行实际的资金转移操作[^2]。 对于具体实现细节,通常会涉及到以下几个方面: - **配置环境**:确保开发环境中已安装必要的SDK和支持库。 - **初始化客户端**:创建一个实例化后的PaymentDataRequest对象,设置所需的参数,比如允许使用的卡片网络、国家/地区代码等。 - **显示付款选项**:向用户提供选择Google Pay作为付款方式的机会;如果满足条件则展示对应的UI控件。 - **处理回调事件**:监听来自系统的异步消息通知,解析返回的数据结构,提取出重要的支付令牌和其他元数据。 - **提交订单详情**:将收集到的信息发送至后端服务端点,由其进一步与银行网关交互完成最终结算工作。 ```java // Java示例代码片段 Task<PaymentData> task = paymentsClient.loadPaymentData(paymentDataRequest); task.addOnCompleteListener(this, new OnCompleteListener<PaymentData>() { @Override public void onComplete(@NonNull Task<PaymentData> completedTask) { if (completedTask.isSuccessful()) { PaymentData paymentData = completedTask.getResult(); String tokenizedPaymentMethod = paymentData.getPaymentMethodToken().getToken(); // 提交tokenizedPaymentMethod 到您的服务器或支付网关... } else { Log.w("loadPaymentDataTask", completedTask.getException()); } } }); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值