Google Pay主要支付流程

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

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

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

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

配置

packageName:应用包名

例如:

java 对接clickhouse Java 对接google pay_java 对接clickhouse

credential:密钥

例如:

{
		"type": "service_account",
		"project_id": "123456789526755524298661-783",
		"private_key_id": "1234567890ac89f9c70f245f1798587ae9b7",
		"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQASCBKcwggSjAgEAAoIBAQCX1kMC4Au/\n-----END PRIVATE KEY-----\n",
		"client_email": "test02661-783.iam.gserviceaccount.com",
		"client_id": "123456789",
		"auth_uri": "https://accounts.google.com/o/oauth2/auth",
		"token_uri": "https://oauth2.googleapis.com/token",
		"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
		"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/83.iam.gserviceaccount.com"
	}

credential获取步骤:

 

java 对接clickhouse Java 对接google pay_java_02

 

java 对接clickhouse Java 对接google pay_服务端_03

java 对接clickhouse Java 对接google pay_java_04

 

java 对接clickhouse Java 对接google pay_开发语言_05

 

java 对接clickhouse Java 对接google pay_android_06

 

java 对接clickhouse Java 对接google pay_android_07

 

java 对接clickhouse Java 对接google pay_android_08

 

java 对接clickhouse Java 对接google pay_android_09

 

java 对接clickhouse Java 对接google pay_服务端_10

 

java 对接clickhouse Java 对接google pay_服务端_11

顺带提下需要设置下商品模板: 

java 对接clickhouse Java 对接google pay_开发语言_12

 

 订单校验-响应结果

{
         "resource": {
         object (ProductPurchase)
         }
         }
         ProductPurchase:
         {
         "kind": string, //这种表示 androidpublisher 服务中的一个 inappPurchase 对象
         "purchaseTimeMillis": string,//购买产品的时间,自纪元(1970 年 1 月 1 日)以来的毫秒数。
         "purchaseState": integer,//订单的购买状态。可能的值为:0. 已购买 1. 已取消 2. 待定
         "consumptionState": integer,//inapp产品的消费状态。可能的值为: 0. 尚未消耗 1. 已消耗
         "developerPayload": string,//包含有关订单的补充信息的开发人员指定的字符串。
         "orderId": string,//与购买 inapp 产品关联的订单 ID
         "purchaseType": integer,//inapp 产品的购买类型。仅当此购买不是使用标准应用内结算流程进行时才设置此字段。可能的值为: 0. 测试(即从许可测试帐户购买) 1. 促销(即使用促销代码购买) 2. 奖励(即通过观看视频广告而不是付费)
         "acknowledgementState": integer,//inapp 产品的确认状态。可能的值为: 0. 尚未确认 1. 确认
         "purchaseToken": string,//为识别此次购买而生成的购买令牌。
         "productId": string,//inapp 产品 SKU。
         "quantity": integer,//与购买 inapp 产品相关的数量。
         "obfuscatedExternalAccountId": string,//与您应用中的用户帐户唯一关联的 id 的混淆版本。仅在购买时使用https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedaccountid指定时出现。
         "obfuscatedExternalProfileId": string,//与您应用中的用户个人资料唯一关联的 id 的混淆版本。仅在购买时使用https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedprofileid指定时出现。
         "regionCode": string //授予产品时用户的 ISO 3166-1 alpha-2 计费区域代码。
         }

 校验使用字段:

purchaseState = 0
acknowledgementState = 1

obfuscatedExternalAccountId = userId(此字段是由客户端在购买的时候上传给谷歌)

obfuscatedExternalProfileId = orderId(此字段是由客户端在购买的时候上传给谷歌)

服务端代码设计

java 对接clickhouse Java 对接google pay_java 对接clickhouse_13