IOS支付
使用苹果开发者账号登录 App Store Connect,在应用的功能选项卡页面,添加 App 内购项目。注意:
- 内购项目的各信息需要填写完整,然后保存,此时内购项目的状态应该是准备提交,当提交应用通过审核后,状态则变为已批准
- 测试时,建议使用测试证书打一个自定义的 iOS 基座进行测试
- 在应用
TestFight的选项卡添加App Store Connect用户,测试支付时可以使用此用户帐号进行测试
开通, 并签署协议
- 登录
App Store Connect签署《付费应用程序协议》, 点击【商务】,签署该页面的所有协议,不能有警告
- 添加银行账户,CNAPS12位数字(大额支付行号/银行识别代码)


- 添加报税表


==(提示:这一步做完需要等待大概1个小时左右,苹果测试时才会生效)==
添加沙盒用户
- 用户访问,添加沙盒用户,邮箱可以不存在。

- 手机
ios设备登录沙盒用户,设置->开发者-》沙盒APPLE账户
添加内购项目
- 添加内购项目

- 选择销售范围

App内购买项目定价

- 添加
App Store本地化版本
- 图像(可选)

- 填写审核信息

- 点击存储,状态为准备提交
证书配置
如果您的应用只接入内购(IAP),那么请您忽略手动创建 Merchant ID 的步骤。您只需要在 Xcode 中开启 In-App Purchase 能力,并在 App Store Connect 中配置商品和银行信息即可。
证书配置完成记得重新生成

配置SDK

支付流程
- 获取支付通道 (
uni.getProvider)
1 | import { applePayCallback } from '@/api' |
- 通过支付通道获取产品列表 (
iapChannel.requestProduct)
1 | /** |
- 检查是否存在未关闭的订单 (
iapChannel.restoreCompletedTransactions, 可选在合适的时机检查)
1 | /** |
- 请求支付,传递产品信息 (
uni.requestPayment) - 客户端接收苹果返回的支付票据发送到服务器,在服务器请求苹果服务器验证支付是否有效
1 | /** |
- 服务器验证票据有效后在客户端关闭订单 (
iapChannel.finishTransaction)
HBuilder 3.5.1 之前因自动关闭订单导致某些情况下丢单的问题
HBuilder 3.5.1 + 增加了手动关闭订单参数 manualFinishTransaction, 在合适的时机调用HBuilder 3.5.1+ 开始支持通过 uni.getProvider 获取IAP支付通道的方法
注意事项
- 相同订单,重复调用
restoreCompletedTransactions后transactionReceipt会发生变化,并非唯一值 - 调用
finishTransaction关闭订单可能不会立即生效,取决于苹果的服务器 - 沙盒环境:一个测试账号相同产品仅能购买一次,重复测试需要清除购买记录或重新添加沙盒测试账号
- 沙盒环境:调用
restoreCompletedTransactions长时间无反应,检查设备登陆的沙箱账号是否正常 - 提交
App Store的App才能开通应用内支付,使用苹果企业账号发布的 App 不能开通使用 - 根据
App Store审核指南条款3.1.1要求,虚拟物品交易必须使用应用内支付,实物交易才可使用第三方支付(支付宝、微信等) - 创建
App内购买项目的各项信息需要填写完整,保存后内购项目的状态是准备提交,当提交应用通过审核后,状态则变为已批准 - 正式上线前可在
Test Flight平台添加App Store Connect用户,测试支付时可以使用此用户帐号
订单丢失场景
用户没有绑定 AppStore 支付方式,调用 uni.requestPayment() 准备支付,触发失败 fail 回调,errCode=2,用户未绑定支付方式,app内支付流程结束。 系统弹出框引导用户绑定支付方式,此过程将跳转到系统应用 AppStore 进行绑定支付方式,绑定成功同步支付成功,用户成功付款
测试
- 使用开发证书打包,可以借助
App Uploader生成证书、和测试、和安装