-
流程
1.跟你們的后臺拿到商品ID
2.連接到GooglePay服務(wù)
3.查詢這個商品ID得到商品詳情
4.根據(jù)商品詳情打開GooglePay購買頁面
-
前言
1.請使用海外版的手機(jī)或者你可以刷一個國際版MIUI司草,否則即使你的手機(jī)安裝了Google服務(wù)也無法購買
2.科學(xué)上網(wǎng)
3.你的App必須已經(jīng)在Google Play應(yīng)用市場上架成功(https://play.google.com/apps/publish)
4.當(dāng)你把下面的代碼集成好之后 需要先把這個APP發(fā)布到測試艰垂,并添加測試人員的賬號,然后給鏈接邀請他們進(jìn)入測試 并下載測試包埋虹。否則你會無法購買
5.有疑問請聯(lián)系我的郵箱我每天上班的時候會看一下742831652@qq.com
- AndroidManifest.xml
<!-- Google Play 內(nèi)購權(quán)限 -->
<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();
}
}
//消耗商品 使得商品可以重復(fù)購買
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() {
//自己寫關(guān)于支付失敗后的操作
}
private void onSuccess(List<Purchase> list) {
//自己寫關(guān)于支付成功后的操作
}
}
- 支付成功JSON數(shù)據(jù)示例
{
"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默認(rèn)只能購買一次搔课,如果你需要重復(fù)購買一個商品 請調(diào)用consume方法