因为应用要上架Google
Play,所以需要接入Google支付和Paypal支付,本篇先记录一下Google支付接入流程。首先来一波定心丸,Google支付的接入还是很简单的;然后就是官方文档啦
实现应用内购买结算 <https://developer.android.com/google/play/billing/billing_integrate>。

个人理解,购买流程大致如下:
(1)查询当前设备是否支持应用内购买
(2)在支持的情况下,通过商品id查询拥有,未消耗的商品。
(3)如果没有,可以直接调起购买支付;如果有需要先消耗,否则购买失败
(4)购买成功,记得把商品消耗

可能会觉得奇怪,怎么有两次消耗的逻辑。正常来说购买成功之后,消耗即可,但是无法保证在这个过程中不出现问题,比如应用退出等,所以在每次购买之前我们需要再查询一次啊。
在正式写代码之前有两件事需要做:
(1)aidl文件的拷贝
(2)AndroidManifest文件的配置
aidl文件的话,按照官网上到sdk中去下,去找我是没找到,后面直接从官方给出的demo中拷贝。至于AndroidManifest的话,只要加上一句即可:
<uses-permission android:name="com.android.vending.BILLING" />
其它的其实参考官方demo <https://github.com/googlesamples/android-play-billing>
即可,主要流程就是上面说到的那样。

不过有几点需要需要一下:
(1)处于安全考虑,在应用上架时,我们一般都会做混淆,注意在混淆文件中添加如下规则:

-keep class com.android.vending.billing.**


(2)在官方demo中为了让开发者对整个流程有一个完整的认识,它把校验支付的逻辑和代码也放在了里面,我们需要把它移除。主要就是IabHelper中的base64签名参数,把它删了,并且用到该参数的地方也删除。这个到时候让后台验证即可。
(3)在校验支付的时候,我们一般会把Google返回的支付信息字符串传递给后台,格式如下:
{ "orderId":"GPA.1234-5678-9012-34567", "packageName":"com.example.app", "
productId":"exampleSku", "purchaseTime":1345678900000, "purchaseState":0, "
developerPayload":"bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ", "purchaseToken":
"opaque-token-up-to-1000-characters" }

在这里其实没有什么,但是我硬是踩了一个坑。因为除了以上字段,后台还需要签名字符串和自己服务器生成的订单号,让我合并成一个对象,然后再转换成字符串传递给后台校验。结果就悲催了,因为一个新的对象重新转换为字符串是字段乱序了,上面中的purchaseTime和purchaseState顺序调换了,后台怎么校验都不过,两人大眼瞪小眼,搞了一天。。。后面发现这个问题,自己去拼字符串传给后台。
(4)调起支付时传递的商品id为我们在Google Play Console中创建的应用内商品的id

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信