赞
踩
苹果内购支付和我们平时接入支付宝或者微信支付有很大的差别。
在国内用的比较多的类型应该是消耗型商品,我们一般都是通过自己的服务器来处理支付逻辑的。而使用订阅类型商品还要处理一些其他的逻辑。
注意:所有的消耗型商品就需要实现 “恢复购买” 功能的,否则过不了审核。
苹果内购支付和微信/支付宝支付的流程有一个很大的不同。
微信/支付宝支付的结果通过notify_url 回调支付结果到自己的服务器。这样就能极大的保证了用户支付成功后,后台是能够接受到支付结果的。
而苹果内购支付成功后还需要客户端请求服务器的验证的接口,验证成功后才能判断支付有效。这个过程中容易因为网络闪退等问题导致漏单情况。
漏单情况的处理
针对上面的分析,我们需要在购买前让后台产生一个订单。在得知苹果支付成功后,将订单和苹果返回的验证数据保存到本地。最后请求后台接口进行验证,验证通过了再删除本地的验证数据。否者下次打开APP要自动进行验证。
说不上很坑,只是开发完不能通过实际支付来测试,让人心里没底。实际测试要上线之后测,出问题了也只能是重新提一个版本来修改了。不过让人值得安慰的是在沙盒没问题上线了一般也没问题的。
由于苹果内购要收取30%的手续费。那么实际支付测试就不能用产品的实际金额来支付了。只能配置1元的商品来进行测试。而问题就是小额的支付,苹果的扣款延时可能比较大。我们就遇到连续的支付三次后,商品购买成功了。不过绑定的支付宝没有扣款提醒。还以为漏扣钱了,结果几个小时后才扣款。
flutter_inapp_purchase: ^3.0.1
var result = await FlutterInappPurchase.instance.initConnection; //设置结果监听 // 更新购买订阅消息 _purchaseUpdatedSubscription = FlutterInappPurchase.purchaseUpdated.listen((productItem) { print('purchase-updated: $productItem'); if(productItem.transactionStateIOS == TransactionState.purchased) { //todo }else{ closeProgressDialog(); } }); // 购买报错订阅消息 _purchaseErrorSubscription = FlutterInappPurchase.purchaseError.listen((purchaseError) { print('purchase-error: $purchaseError'); closeProgressDialog(); });
List<IAPItem> items =
await FlutterInappPurchase.instance.getProducts( ['0001', '0002', '0003'] );
var result = FlutterInappPurchase.instance.requestPurchase(‘0001’);
List<PurchasedItem> items =
await FlutterInappPurchase.instance.getAvailablePurchases();
如果创建的是消耗型商品,常用的方法就这些了。
苹果内购并不复杂,只是对于第一次接触苹果内购的人来说,很多配置都莫名其妙的。不过你后面理解了就会焕然大悟。
所以,我这篇文章并不是一个很细致的教程,不过是把一些坑和一些对苹果支付的理解写下来罢了。不过,我相信你看完这篇文章后,再去做苹果内购会顺很多。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。