您的位置:首页 > 编程语言 > Go语言

google pay 支付踩过的坑

2015-06-04 00:00 387 查看
摘要: 海外android的支付,首选,一定是google pay。但在大陆串接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。

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



现在说说说第一个坑:

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

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

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



第二步:修改IabHelper类

[code=plain] 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;
// }


第二个坑:

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

[code=plain]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方法。

[code=plain]onActivityResult(requestCode, resultCode, Intent data) {
(!.handleActivityResult(requestCode, resultCode, data)) {
.onActivityResult(requestCode, resultCode, data);
} {
Log.();
}
}


这些都是我在串接google play中,踩过的一些坑。希望可以给大家提供一些帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: