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
生成证书、和测试、和安装