由于公司业务的扩展, 第三方的支付已不能通过苹果爸爸的审核, 所以最近两天搞了下Apple IAP, 从银行税务的填写, 到内购商品的添加, 再到客户端的接入, 最后服务端校验, 写点东西, 记录一下心得体会.
一. 银行税务的填写
这块最主要就是添加银行账户, 首先需要明确银行卡持有人不需要跟开发者账号所有者(同意付费协议的法律实体)一致, 我们用的是个人开发者账号, 公司账号据了解, 银行账户添加也是一样, 大陆境外的账户都可以, 根据App投放地区, 若是在海外, 建议用境外的账户. 这点跟Google paly 有点区别, Google play账号注册信息在大陆的话, 添加不了境外的银行账户 .
二. 添加内购商品
- 商品价格不能自定义, 按苹果规定的价格等级进行选择, 只能选择开发者账号所在地区的货币作为等级参考, 其他货币有相应等价的等级.
- 商品id只要添加不能更改, 删除了商品之后, 这个id依然被占用.
- 拉取商品信息会得到 配置的价格, 标题, 说明, 商品id 等可用信息
三. 客户端的接入
也比较容易, 大体分一下几步:
- app从服务器获取产品标识列表
- app从app store 获取产品信息
- 用户选择需要购买的产品
- app 发送支付请求到AppStore
- AppStore处理支付请求,返回transaction信息
- app将 transaction receipt 发送到服务器
- 服务器收到收据后发送到app stroe验证收据的有效性
- app store 返回收据的验证结果
- 根据app store 返回的结果决定用户是否购买成功
四. 服务端校验
- 怎么让后台生成的订单与某一笔交易进行绑定?
- 在验证内购票据的时候怎么确定验证的是哪一笔交易?
这两个问题其实是一个问题, 当你看到某笔交易的transaction_id的时候, 或许你想到了答案? 而我却迷茫的瞎想了好久.
- 某笔交易在数据库创建订单记录的话, 是以内购交易的唯一标识来标记的.
- 验证内购的时候, 也是以transaction_id来区分, 校验的是哪笔交易的.
其外还有一个比较坑的地方, 就是校验票据的时候 传的是, json, 这个地方用Postman跟php走接口会有一个区别, 头晕了半天, Postman上传票据, 到后台, 票据中的"+"字符都变成了, 空格, 然后一直报21002的错误, 然后加上urlencode解决了这个问题, 开心的去app加上urlencode, 上传票据的时候, 依然21002 , 很崩溃有木有, 查询了日志才知道, 客户端上传的encode数据, 到后台依然是encode格式, 而Postman却做了decode, 然后把app的encode去掉, 成功得到校验的结果.
最后补充一点: 上架审核的时候, 内购的校验环境一定保证是沙箱环境, 切记哦!
参考好的博客, 确实收益匪浅, 愿与君共享:
https://juejin.im/post/5a3b169151882521033469b4
https://blog.csdn.net/shihuboke/article/details/74199475
网友评论