一、内购支购买项目类型:
1.消耗型商品
2.非消耗型商品
3.非续期订阅
4.自动续期订阅
苹果官方网址:
https://help.apple.com/app-store-connect/#/dev3cd978dbd
https://developer.apple.com/in-app-purchase/
二、内购支付流程:
1.用户点击发起购买请求
2.APP服务器获生成一份订单并返回App Store商品id给客户端
3.客户端对这个商品id进行苹果服务器IAP商品查询
4.用户支付调起IAP支付
5.支付成功获取到一份交易成功凭证
6. 客户端发送订单号和成功支付的凭证到服务器(区分沙盒环境还是正式环境)
7. 服务器验证凭证是否合法,对用户业务操作(成功增加一个月会员)
8.返回查询结果到客户端
9.客户端业务逻辑处理
三、注意事项:
申请相关:
需要注意的是如果应用是第一次进行IAP开发, 首先要完善苹果商店内的个人信息 (银行卡信息、 税务相关信息)才能创建相关商品, 而且需要在下一个发布版本中审核商品, 如果曾经审核过IAP开发, 可直接在后台进行新增商品审核。
测试相关:
1.内购必须用真机测试;
2.测试时必须退出App Store自己的Apple ID,登录沙盒的测试Apple ID .
3.本身请求美国服务器就慢,为防止审核人员误解,我们需要在购买时加载动画;
丢单处理
由于IAP服务器无法保证质量, 或者自己服务器验证凭证出现问题时, 可能会出现丢单(用户付费成功, 但是凭证无法成功向自己服务器验证)的情况, 对于这种情况, 我们可以这样处理。
在
用户成功下单后,储存订单&uid&凭证。
存储 订单&uid&凭证
@param orderID 订单
@param uid 用户uid
@param receipt 凭证
@param saveKey 储存key
*/
- (void)saveOrderReceiptWithOrderID:(long long)orderID
uid:(NSString *)uid
receipt:(NSString *)receipt
saveKey:(NSString *)saveKey;
在用户向服务器验证成功后或者非网络原因造成的失败后, 删除此条记录,
删除 订单&凭证
@param orderID 订单
@param receipt 凭证
@param saveKey 储存key
*/
- (void)removeOrderReceiptWithOrderID:(long long)orderID
receipt:(NSString *)receipt
saveKey:(NSString *)saveKey;
这样如果由于网络问题或者服务器出现问题造成丢单, 我们可以在下一次用户启动APP再次去进行验证这笔订单, 重复上面流程
核对支付成功但是验证失败的订单
*/
- (void)checkLocalLostVipOrder;