Google Pay主要支付流程
1.手机端向Java服务端发起支付,生成预订单,给手机端返回生成的订单号
2.手机端向Google发起支付(传入本地服务器生成的订单号)
3.Google服务器将支付结果返回给手机端(因这边用到的是消耗型的产品,所以购买后必须要通知gp我已经消耗了这次交易)
4.手机端向Java服务端发送校验请求,校验通过后即可处理订单(服务端重试校验,发货,保证订单正常发货成功)
配置
packageName:应用包名
例如:
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获取步骤:
顺带提下需要设置下商品模板:
订单校验-响应结果
{
"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(此字段是由客户端在购买的时候上传给谷歌)
服务端代码设计