-
流程
1.跟你们的后台拿到商品ID
2.连接到GooglePay服务
3.查询这个商品ID得到商品详情
4.根据商品详情打开GooglePay购买页面
-
前言
1.请使用海外版的手机或者你可以刷一个国际版MIUI,否则即使你的手机安装了Google服务也无法购买
2.科学上网
3.你的App必须已经在Google Play应用市场上架成功(https://play.google.com/apps/publish)
4.当你把下面的代码集成好之后 需要先把这个APP发布到测试,并添加测试人员的账号,然后给链接邀请他们进入测试 并下载测试包。否则你会无法购买
image.png
5.有疑问请联系我的邮箱我每天上班的时候会看一下742831652@qq.com
- AndroidManifest.xml
<!-- Google Play 内购权限 -->
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="com.farsitel.bazaar.permission.PAY_THROUGH_BAZAAR" />
- build.gradle
dependencies {
//GooglePay
implementation 'com.android.billingclient:billing:3.0.0'
}
- 开始支付
/**
* 开始支付
*
* @param activity
* @param skuId 商品ID
*/
GooglePayUtil.getInstance().start(Activity activity, String skuId);
GooglePayUtil.java
import android.app.Activity;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.billingclient.api.BillingClient;
import com.android.billingclient.api.BillingClientStateListener;
import com.android.billingclient.api.BillingFlowParams;
import com.android.billingclient.api.BillingResult;
import com.android.billingclient.api.ConsumeParams;
import com.android.billingclient.api.ConsumeResponseListener;
import com.android.billingclient.api.Purchase;
import com.android.billingclient.api.PurchasesUpdatedListener;
import com.android.billingclient.api.SkuDetails;
import com.android.billingclient.api.SkuDetailsParams;
import com.android.billingclient.api.SkuDetailsResponseListener;
import java.util.ArrayList;
import java.util.List;
public class GooglePayUtil implements PurchasesUpdatedListener {
private String TAG = "GooglePayUtil";
private static GooglePayUtil instance;
//获取实例
public static synchronized GooglePayUtil getInstance() {
if (instance == null) {
instance = new GooglePayUtil();
}
return instance;
}
private Activity activity;
private BillingClient billingClient;
/**
* 开始支付
*
* @param activity
* @param skuId 商品ID
*/
public void start(Activity activity, String skuId) {
this.activity = activity;
if (billingClient == null) {
billingClient = BillingClient.newBuilder(activity).setListener(this).enablePendingPurchases().build();
}
if (billingClient.isReady()) {
checkSku(skuId);
} else {
connectGooglePay(skuId);
}
}
//连接到GooglePay
private void connectGooglePay(String skuId) {
//请求连接到GooglePay
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
int code = billingResult.getResponseCode();
if (code != BillingClient.BillingResponseCode.OK) {
String msg = billingResult.getDebugMessage();
Log.e(TAG, "连接到GooglePay失败 code = " + code + " msg = " + msg);
onFail();
return;
}
Log.e(TAG, "连接到GooglePay成功");
checkSku(skuId);
}
//连接失败
@Override
public void onBillingServiceDisconnected() {
Log.e(TAG, "连接到GooglePay失败,请重试");
}
});
}
//查询商品
private void checkSku(String id) {
List<String> skuList = new ArrayList<>();
skuList.add(id);
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder()
.setSkusList(skuList)
.setType(BillingClient.SkuType.INAPP);
billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(@NonNull BillingResult billingResult, @Nullable List<SkuDetails> list) {
int code = billingResult.getResponseCode();
if (code != BillingClient.BillingResponseCode.OK || list == null || list.isEmpty()) {
String msg = billingResult.getDebugMessage();
Log.e(TAG, "查询商品失败 code = " + code + " msg = " + msg);
onFail();
return;
}
Log.e(TAG, "查询商品成功");
buyIt(list.get(0));
}
});
}
//购买
private void buyIt(SkuDetails skuDetails) {
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.build();
BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
int code = billingResult.getResponseCode();
if (code != BillingClient.BillingResponseCode.OK) {
String msg = billingResult.getDebugMessage();
Log.e(TAG, "购买商品失败 code = " + code + " msg = " + msg);
onFail();
return;
}
Log.e(TAG, "购买商品" + skuDetails.toString());
}
@Override
public void onPurchasesUpdated(@NonNull BillingResult billingResult, @Nullable List<Purchase> list) {
int code = billingResult.getResponseCode();
String msg = billingResult.getDebugMessage();
Log.e(TAG, "onPurchasesUpdated:code = " + code + " msg = " + msg);
if (list != null) {
for (Purchase purchase : list) {
Log.e(TAG, "onPurchasesUpdated:" + purchase.toString());
}
}
if (code == BillingClient.BillingResponseCode.OK && list != null) {
Log.e(TAG, "支付成功");
onSuccess(list);
} else if (code == BillingClient.BillingResponseCode.USER_CANCELED) {
Log.e(TAG, "支付取消");
onFail();
} else {
Log.e(TAG, "支付失败:code = " + code + " msg = " + msg);
onFail();
}
}
//消耗商品 使得商品可以重复购买
private void consume(List<Purchase> list) {
if (list == null || list.isEmpty() || billingClient == null) {
return;
}
for (Purchase purchase : list) {
billingClient.consumeAsync(ConsumeParams.newBuilder().setPurchaseToken(purchase.getPurchaseToken()).build(), new ConsumeResponseListener() {
@Override
public void onConsumeResponse(BillingResult billingResult, String purchaseToken) {
Log.e(TAG, "onConsumeResponse code = " + billingResult.getResponseCode() + " , msg = " + billingResult.getDebugMessage() + " , purchaseToken = " + purchaseToken);
}
});
}
}
private void onFail() {
//自己写关于支付失败后的操作
}
private void onSuccess(List<Purchase> list) {
//自己写关于支付成功后的操作
}
}
- 支付成功JSON数据示例
{
"orderId": "GPA.3326-0188-4891-58028",
"packageName": "com.xxx.xxx",//你APP的包名
"productId": "1235",//你的SkuId
"purchaseTime": 1613978031669,
"purchaseState": 0,
"purchaseToken": "kcjjnpeomlglnbnodpfdocdm.AO-J1OwrW_apUdDL6icLsqUlvp8JH-CD8ID35fCF1WtPnDvRUnS-AbkW_eNiwAoVFoYEnrho1txWinDibganiZRv8cSspkXXXQ",
"acknowledged": false
}
-
坑
1.GooglePay默认只能购买一次,如果你需要重复购买一个商品 请调用consume方法
网友评论