GooglePay接入
1.开发者文档:
https://developer.android.google.cn/google/play/billing/billing_library_overview
2.添加配置文件
1).在您的模块(应用级)Gradle 文件(通常是 app/build.gradle)中,添加核心 Firebase SDK 的依赖项:
dependencies {
...
implementation 'com.android.billingclient:billing:3.0.0’
}
<!--谷歌商店应用内购买结算需要的权限-->
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="com.farsitel.bazaar.permission.PAY_THROUGH_BAZAAR" />
3.应用内使用
1)创建链接
private BillingClient billingClient;
...
billingClient = BillingClient.newBuilder(activity).setListener(this).build();
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingResponseCode.OK) {
// The BillingClient is ready. You can query purchases here.
}
}
@Override
public void onBillingServiceDisconnected() {
// Try to restart the connection on the next request to
// Google Play by calling the startConnection() method.
}
});
2)查询和购买
//查询
List<String> skuList = new ArrayList<> ();
skuList.add("premium_upgrade");
skuList.add("gas");
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(SkuType.INAPP);
billingClient.querySkuDetailsAsync(params.build(),
new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult,
List<SkuDetails> skuDetailsList) {
// Process the result.
}
});
//购买
// Retrieve a value for "skuDetails" by calling querySkuDetailsAsync().
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.build();
int responseCode = billingClient.launchBillingFlow(flowParams);
通过唯一的商品id去查询得到SkuDetails,然后得到的SkuDetails去购买
3)购买回调
@Override
void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
if (billingResult.getResponseCode() == BillingResponse.OK
&& purchases != null) {
for (Purchase purchase : purchases) {
handlePurchase(purchase);
}
} else if (billingResult.getResponseCode() == BillingResponse.USER_CANCELED) {
// Handle an error caused by a user cancelling the purchase flow.
} else {
// Handle any other error codes.
}
}
4)消耗(需要三天内确认所有购买交易。如果没能正确确认,将导致系统对相应购买交易按退款处理。)
ConsumeParams consumeParams =
ConsumeParams.newBuilder()
.setPurchaseToken(purchaseToken)
.build();
mBillingClient.consumeAsync(consumeParams, new ConsumeResponseListener() {
@Override
public void onConsumeResponse(BillingResult billingResult, String s) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
}
}
});
}
4.参考
https://download.csdn.net/download/u013334392/12001347
用的版本是2.多的,升级之后有的函数无法使用了,不过可以自己修改重构下,有兴趣的参考参考。
https://download.csdn.net/download/weixin_42495311/12651555
改装过的。
//支付
public void googlePay(String sku,String billingType){
mSku = sku;
mBillingType = billingType;
List<String> skuList = new ArrayList<>();
skuList.add(mSku);
//skuList.add("gas");//
mBillingManager.querySkuDetailsAsync(mBillingType, skuList, new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
if (billingResult.getResponseCode() != BillingClient.BillingResponseCode.OK) {
SystemUtils.callbackLua(1,"商品列表获取失败。");
} else if (skuDetailsList != null && skuDetailsList.size() > 0) {
mSkuDetails.clear();
//成功地获得了sku详细
for (SkuDetails details : skuDetailsList) {
if (mSku.equals(details.getSku())) {
mSkuDetails.add(details);
}
}
if (mBillingManager != null
&& mBillingManager.getBillingClientResponseCode()
> BillingManager.BILLING_MANAGER_NOT_INITIALIZED) {
if (mSkuDetails != null && mSkuDetails.size() > 0) {
mBillingManager.initiatePurchaseFlow(mSkuDetails.get(0), "");
}
}
}
}
});
}
谷歌支付开发遇到的一些问题
1.获取商品列表时,请求code是ok,但是获取不到商品列表
原因:需要提交的版本是发布状态,否则就无法获取商品列表