苹果APP内购 IAP 接入流程

1. 在 App Store Connect 商务 页面完善 银行账户报税表 信息,如果出现 编辑法律实体,请先编辑之;

2. 在 App Store Connect 添加 沙盒 测试账户(一个假的Apple ID,任意邮箱 + 不低于8位的大小写字母数字组合的密码);

3. 开启开发模式:测试苹果手机 设置 - 隐私与安全性 - 开发者模式 - 开启

4. 测试苹果手机添加沙盒账户(iOS 版本不同,设置地方有差异),以下路径找一下:

4.1 设置 - 开发者 - 沙盒 APPLE 账户;

4.2 设置 - App Store - 沙盒账户;

5. 管理内购商品:

5.1. 在 App Store Connect 点进已经创建好的 APP - 分发 - 左侧导航 App 内购买项目,增删改查内购商品(如果内购列表上提示 “缺少元数据” 说明商品的必须填没填完整);

5.2. 左侧导航 iOS App - 选择对应的版本(可能是准备提交) - App 内购买项目和订阅 - 添加或编辑上一步创建的内购商品;

6. 参考 js API 文档 接入内购,基本流程如下:

6.1 引导用户购买的时候调用 canMakePayments 检查用户是否支持内购(一般都支持,想简单处理也可以省掉这一步);

6.2 执行 setTransanctionListener 设置交易监听器,在监听回调里面处理所有支付交易流程;

6.3 用户点购买的时候执行 purchase 发起付款,订单号可以放在 applicationUsername 字段,这个会在上一步的监听回调里面原样返回;

7. 重点在于处理 6.2 步 setTransanctionListener 的回调,js 拿到支付凭证(receipt 字段,此时 state 为 1) 后就发到服务器,在服务器上调用苹果提供的接口验证凭证,验证成功就表示苹果已经真的帮你收到钱了,给用户开通相应服务即可;

8. 在调用 finishTransaction 完成交易之前,交易信息会一直存在,所以在确认不再需这个交易信息时(比如 state == 2 交易失败,state == 1 并且已在服务器端确认)应调用 finishTransaction 把他结束掉,以后就不会在 setTransanctionListener 的回调中再次收到这笔交易了;