最新更新:新增了选中项(默认选中第一个)
前言:项目中用到了内购,这里主要想记录一下内购代码封装和充值界面的封装,其实内购代码也参考了网上其他的人的,只是好多都充值不成功,于是研究一下改改,我是一个快乐的代码搬运工😋。。。
看图说话:
废话不多说,直接上栗子🌰:
充值界面封装
简要的记录一下内购的流程说明:
内购的流程:
1.点击充值,发起预订单 :用户点击立即充值,发起充值流程,请求自己服务器,生成预订单 ,生成的预订单给客户端保存本地.(为了服务端验证防止刷单,本地绑定预订单处理漏单需要);
2.客户端请求到订单号后 开始向苹果支付(先向appstore请求商品信息,然后付款)调起内购,绑定预订单:(存储模型:产品id,预订单,交易状态,充值状态,时间戳+产品id);
3.付款成功后appstore会给客户端返回 一个验证信息(用来验证是否合法);
4.客户端将订单号和验证信息发给服务器;
5.服务器向appstore验证是支付是否合法(来判断是否给用户加商品);
注意事项:
1.沙盒环境测试appStore内购流程的时候,请使用没越狱的设备。
2.请务必使用真机来测试,一切以真机为准。
3.项目的Bundle identifier需要与您申请AppID时填写的bundleID一致,不然会无法请求到商品信息。
4.如果是你自己的设备上已经绑定了自己的AppleID账号请先注销掉,否则你哭爹喊娘都不知道是怎么回事。
5.订单校验 苹果审核app时,仍然在沙盒环境下测试,所以需要先进行正式环境验证,如果发现是沙盒环境则转到沙盒验证。
识别沙盒环境订单方法:
1.根据字段 environment = sandbox。
2.根据验证接口返回的状态码,如果status=21007,则表示当前为沙盒环境。
苹果反馈的状态码:
21000App Store无法读取你提供的JSON数据
21002 订单数据不符合格式
21003 订单无法被验证
21004 你提供的共享密钥和账户的共享密钥不一致
21005 订单服务器当前不可用
21006 订单是有效的,但订阅服务已经过期。当收到这个信息时,解码后的收据信息也包含在返回内容中
21007 订单信息是测试用(sandbox),但却被发送到产品环境中验证
21008 订单信息是产品环境中使用,但却被发送到测试环境中验证