google pay 支付踩过的坑

集成google pay自然是需要相应的对接文档。官方地址:http://developer.android.com/intl/zh-cn/google/play/billing/index.html

文档中,会详细介绍串接的步骤。

在SDK中,也会有一个demo。 SDK_root/extras/google/play_billing/samples/TrivialDrive。

若没有这个目录,则需要更新如图所求的目录:

google pay 支付踩过的坑_第1张图片

现在说说说第一个坑:

demo中,google pay订单验证的key是放在apk中的。这种做法对于安全性来说是很不科学的一个做法。

所以,我们需要改进。将这个key,放到后台中去进行验证。

第一步:就是删除如图所求的类

google pay 支付踩过的坑_第2张图片

第二步:个性IabHelper类

 public IabHelper(Context ctx) {
        mContext = ctx.getApplicationContext();
//        mSignatureBase64 = base64PublicKey;
        logDebug("IAB helper created.");
    }
    
 在handleActivityResult(int requestCode,int reslutCode,Intent data)方法中,注释如下代码
                // Verify signature
                if (!Security.verifyPurchase(mSignatureBase64, purchaseData, dataSignature)) {
                    logError("Purchase signature verification FAILED for sku " + sku);
                    result = new IabResult(IABHELPER_VERIFICATION_FAILED, "Signature verification failed for sku " + sku);
                    if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, purchase);
                    return true;
                }
            
   在int queryPurchases(Inventory inv, String itemType)中修改如下代码:
               //if (Security.verifyPurchase(mSignatureBase64, purchaseData, signature)) {
                    logDebug("Sku is owned: " + sku);
                    Purchase purchase = new Purchase(itemType, purchaseData, signature);

                    if (TextUtils.isEmpty(purchase.getToken())) {
                        logWarn("BUG: empty/null token!");
                        logDebug("Purchase data: " + purchaseData);
                    }

                    // Record ownership and token
                    inv.addPurchase(purchase);
               // }
               // else {
               //     logWarn("Purchase signature verification **FAILED**. Not adding item.");
               //     logDebug("   Purchase data: " + purchaseData);
               //     logDebug("   Signature: " + signature);
               //     verificationFailed = true;
               // }


第二个坑:

订单查询的时候,如果是调用 

public Inventory queryInventory(boolean querySkuDetails, List<String> moreItemSkus,List<String> moreSubsSkus)

这个方法的查询是同步的,当网络不好的时候,此方法会阻塞UI线程。需要开发者修改成异步的方法。


第三个坑:

在测试支付的时候,会出现 此版本的应用未配置为对通过 google play 结算 的错误提示。

造成这个错误的原因有两个,第一个是打包的时候,versionCode的值比提交到google play后台的版本要高。 第二个就是:打包的时候,和google play后台上的包的签名不一致。


第四个坑:

在支付的时候,不能使用大陆的信用卡,google pay会提示你不支付此地区的购买。


第五个坑:

在测试过程中,明明上一个订单都可能支付,但再测试的时候,就会报 从服务器检索信息时出错rpc s 7 aec 0 。

造成原因:未知

解决方案:在商店的设置里把google账号删除,然后清除商店数据,重新登录就能可以了。


第六个坑:

google pay 支付的结果是通过Activity之间的传参进行数据返回的。

故一定要在调用的activity或者fragment中重写 onActivityResult方法。

onActivityResult(requestCode, resultCode, Intent data) {
    (!.handleActivityResult(requestCode, resultCode, data)) {
        .onActivityResult(requestCode, resultCode, data);
    } {
       Log.();
    }
}


这些都是我在串接google play中,踩过的一些坑。希望可以给大家提供一些帮助。




你可能感兴趣的:(google pay 支付踩过的坑)