IAP内购

2019-04-18  本文已影响0人  风_iOSer

由于公司业务的扩展, 第三方的支付已不能通过苹果爸爸的审核, 所以最近两天搞了下Apple IAP, 从银行税务的填写, 到内购商品的添加, 再到客户端的接入, 最后服务端校验, 写点东西, 记录一下心得体会.

一. 银行税务的填写

这块最主要就是添加银行账户, 首先需要明确银行卡持有人不需要跟开发者账号所有者(同意付费协议的法律实体)一致, 我们用的是个人开发者账号, 公司账号据了解, 银行账户添加也是一样, 大陆境外的账户都可以, 根据App投放地区, 若是在海外, 建议用境外的账户. 这点跟Google paly 有点区别, Google play账号注册信息在大陆的话, 添加不了境外的银行账户 .

二. 添加内购商品

  1. 商品价格不能自定义, 按苹果规定的价格等级进行选择, 只能选择开发者账号所在地区的货币作为等级参考, 其他货币有相应等价的等级.
  2. 商品id只要添加不能更改, 删除了商品之后, 这个id依然被占用.
  3. 拉取商品信息会得到 配置的价格, 标题, 说明, 商品id 等可用信息

三. 客户端的接入

也比较容易, 大体分一下几步:

  1. app从服务器获取产品标识列表
  2. app从app store 获取产品信息
  3. 用户选择需要购买的产品
  4. app 发送支付请求到AppStore
  5. AppStore处理支付请求,返回transaction信息
  6. app将 transaction receipt 发送到服务器
  7. 服务器收到收据后发送到app stroe验证收据的有效性
  8. app store 返回收据的验证结果
  9. 根据app store 返回的结果决定用户是否购买成功

四. 服务端校验

  1. 怎么让后台生成的订单与某一笔交易进行绑定?
  2. 在验证内购票据的时候怎么确定验证的是哪一笔交易?

这两个问题其实是一个问题, 当你看到某笔交易的transaction_id的时候, 或许你想到了答案? 而我却迷茫的瞎想了好久.

  1. 某笔交易在数据库创建订单记录的话, 是以内购交易的唯一标识来标记的.
  2. 验证内购的时候, 也是以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

上一篇下一篇

猜你喜欢

热点阅读