iap
来自于:官方立即使用
概述
iap模块封装了iOS系统应用内购买代码相关功能。
使用模块之前需要先了解苹果应用内购买功能,在App Store Connect上面创建好内购商品,正确填写好银行、税务等相关信息。
更多帮助参考苹果应用内购买帮助文档。
setTransactionListener
设置交易监听。
建议在应用首页设置交易监听,这样可以及时处理之前未完成的交易,防止丢单。
注意:同一页面内,设置此监听后,商品交易状态将会通过此回调返回,而不再通过purchase和restoreTransactions方法的回调返回。如果多个页面都设置了监听,那么将无法保证具体哪个页面的监听有效。
setTransactionListener({params}, callback(ret, err))
params
autoFinishTransaction:
- 类型:布尔
- 默认值:true
- 描述:是否自动完成交易,默认会在回调后自动完成交易。如果设置为false,那么需要在监听回调里面处理完交易后调用finishTransaction方法完成交易(如果有下载内容,需要在下载完成后完成交易)。建议设置为false,在验证完交易后调用finishTransaction完成交易。
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
state: //交易状态,详见交易状态常量,数字类型
productId: //商品id,字符串类型
applicationUsername: //用户信息,字符串类型
transactionId: //交易id,字符串类型
originalTransactionId: //原始交易id,只在state为恢复购买时有效,字符串类型
receipt: //交易凭证,经过base64编码,用于验证交易是否合法和有效,避免因越狱破解内购后造成损失,只在state为购买成功时有效,字符串类型
errorCode: //交易失败时的错误码,详见错误码常量,数字类型
downloads: //有下载内容时的下载信息列表
[{
transactionId: //下载内容所属交易id,字符串类型
contentId: //下载内容id,字符串类型
downloadState: //下载状态,详见下载状态常量,数字类型
progress: //下载进度,取值范围0~1,数字类型
contentLength: //文件内容大小,数字类型
timeRemaining: //下载剩余时间,-1时表示未知,数字类型
contentVersion: //下载内容的版本,字符串类型
contentURL: //下载成功后文件路径,字符串类型
errorCode: //下载失败时的错误码,数字类型
errorMsg: //下载失败时的错误描述,字符串类型
}]
}
示例代码
var iap = api.require('iap');
iap.setTransactionListener(function(ret, err) {
if (ret) {
alert(JSON.stringify(ret));
} else {
alert(JSON.stringify(err));
}
});
可用性
iOS系统
可提供的1.0.3及更高版本
finishTransaction
完成指定交易,在完成购买并提供给用户相关功能后应该完成此次交易。
finishTransaction({params})
params
transactionId:
- 类型:字符串
- 默认值:无
- 描述:交易id。
示例代码
var iap = api.require('iap');
iap.finishTransaction({
transactionId:'xxx'
});
可用性
iOS系统
可提供的1.0.4及更高版本
getProducts
获取有效商品列表。
getProducts({params}, callback(ret, err))
params
productIds:
- 类型:字符串数组
- 默认值:无
- 描述:商品id列表
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
invalidProductIds: //无效的商品id列表,字符串数组
products: //有效商品列表,JSON数组
[{
productId: //商品id,字符串类型
title: //商品标题,字符串类型
description: //商品描述,字符串类型
price: //商品价格,数字类型
formattedPrice: //商品格式化后的价格,如¥6.00,字符串类型
downloadable: //是否有下载内容,布尔类型
downloadContentLengths: //下载内容长度,数字组成的数组
downloadContentVersion: //下载内容的版本,字符串类型
}]
}
err:
- 类型:JSON 对象
- 内部字段:
{
msg: '' //错误描述
}
示例代码
var iap = api.require('iap');
iap.getProducts({
productIds: [
'com.apicloud.iap.free'
]
}, function(ret, err) {
if (ret) {
alert(JSON.stringify(ret));
} else {
alert(JSON.stringify(err));
}
});
可用性
iOS系统
可提供的1.0.0及更高版本
purchase
购买商品。
在测试购买操作之前,需要在App Store Connect的”用户和访问“里面添加沙盒测试账号,并用添加的测试账号在手机 设置-iTunes Store与App Store 里面沙盒账户处登录。
purchase({params}, callback(ret, err))
params
productId:
- 类型:字符串
- 默认值:无
- 描述:有效的商品id
applicationUsername:
- 类型:字符串
- 默认值:无
- 描述:(可选项)用户信息,回调里面将会返回该字段。
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
state: //交易状态,详见交易状态常量,数字类型
productId: //商品id,字符串类型
applicationUsername: //用户信息,字符串类型
transactionId: //交易id,字符串类型
originalTransactionId: //原始交易id,只在state为恢复购买时有效,字符串类型
receipt: //交易凭证,经过base64编码,用于验证交易是否合法和有效,避免因越狱破解内购后造成损失,只在state为购买成功时有效,字符串类型
errorCode: //交易失败时的错误码,详见错误码常量,数字类型
downloads: //有下载内容时的下载信息列表
[{
transactionId: //下载内容所属交易id,字符串类型
contentId: //下载内容id,字符串类型
downloadState: //下载状态,详见下载状态常量,数字类型
progress: //下载进度,取值范围0~1,数字类型
contentLength: //文件内容大小,数字类型
timeRemaining: //下载剩余时间,-1时表示未知,数字类型
contentVersion: //下载内容的版本,字符串类型
contentURL: //下载成功后文件路径,字符串类型
errorCode: //下载失败时的错误码,数字类型
errorMsg: //下载失败时的错误描述,字符串类型
}]
}
err:
- 类型:JSON 对象
- 内部字段:
{
msg: '' //其它错误,如参数错误、如当前用户不能使用应用内购买等
}
示例代码
var iap = api.require('iap');
iap.purchase({
productId: 'com.company.app.productid'
}, function(ret, err) {
if (ret) {
alert(JSON.stringify(ret));
} else {
alert(JSON.stringify(err));
}
});
可用性
iOS系统
可提供的1.0.0及更高版本
restoreTransactions
恢复用户以前购买过的所有商品交易。
注:恢复操作只对购买的可恢复性商品有效。
restoreTransactions({params}, callback(ret, err))
params
applicationUsername:
- 类型:字符串
- 默认值:无
- 描述:(可选项)用户信息,回调里面将会返回该字段。
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
finished: //是否所有交易恢复完成,若未完成,则会有以下当前具体交易信息,布尔类型
transaction:
{
state: //交易状态,详见交易状态常量,数字类型
productId: //商品id,字符串类型
applicationUsername: //用户信息,字符串类型
transactionId: //交易id,字符串类型
originalTransactionId: //原始交易id,只在state为恢复购买时有效,字符串类型
receipt: //交易凭证,经过base64编码,用于验证交易是否合法和有效,避免因越狱破解内购后造成损失,只在state为购买成功时有效,字符串类型
downloads: //有下载内容时的下载信息列表
[{
transactionId: //下载内容所属交易id,字符串类型
contentId: //下载内容id,字符串类型
downloadState: //下载状态,详见下载状态常量,数字类型
progress: //下载进度,取值范围0~1,数字类型
contentLength: //文件内容大小,数字类型
timeRemaining: //下载剩余时间,-1时表示未知,数字类型
contentVersion: //下载内容的版本,字符串类型
contentURL: //下载成功后文件路径,字符串类型
errorCode: //下载失败时的错误码,数字类型
errorMsg: //下载失败时的错误描述,字符串类型
}]
}
}
err:
- 类型:JSON 对象
- 内部字段:
{
errorCode: //错误码,详见错误码常量
}
示例代码
var iap = api.require('iap');
iap.restoreTransactions(function(ret, err) {
if (ret) {
alert(JSON.stringify(ret));
} else {
alert(JSON.stringify(err));
}
});
可用性
iOS系统
可提供的1.0.0及更高版本
setDownloadListener
设置下载监听,所有的下载进度通过此回调返回。
setDownloadListener(callback(ret, err))
callBack(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
downloads: //下载状态和进度变化的下载列表,JSON数组
[{
transactionId: //下载内容所属交易id,字符串类型
contentId: //下载内容id,字符串类型
downloadState: //下载状态,详见下载状态常量,数字类型
progress: //下载进度,取值范围0~1,数字类型
contentLength: //文件内容大小,数字类型
timeRemaining: //下载剩余时间,-1时表示未知,数字类型
contentVersion: //下载内容的版本,字符串类型
contentURL: //下载成功后文件路径,字符串类型
errorCode: //下载失败时的错误码,数字类型
errorMsg: //下载失败时的错误描述,字符串类型
}]
}
示例代码
var iap = api.require('iap');
iap.setDownloadListener(function(ret, err) {
if (ret) {
alert(JSON.stringify(ret));
} else {
alert(JSON.stringify(err));
}
});
可用性
iOS系统
可提供的1.0.0及更高版本
startDownloads
开始下载。
startDownloads({params})
params
contentIds:
- 类型:字符串数组
- 默认值:无
- 描述:下载内容id组成的数组
示例代码
var iap = api.require('iap');
iap.startDownloads({
contentIds: [
'123'
]
});
可用性
iOS系统
可提供的1.0.0及更高版本
pauseDownloads
暂停下载。
pauseDownloads({params})
params
contentIds:
- 类型:字符串数组
- 默认值:无
- 描述:下载内容id组成的数组
示例代码
var iap = api.require('iap');
iap.pauseDownloads({
contentIds: [
'123'
]
});
可用性
iOS系统
可提供的1.0.0及更高版本
resumeDownloads
恢复下载。
resumeDownloads({params})
params
contentIds:
- 类型:字符串数组
- 默认值:无
- 描述:下载内容id组成的数组
示例代码
var iap = api.require('iap');
iap.resumeDownloads({
contentIds: [
'123'
]
});
可用性
iOS系统
可提供的1.0.0及更高版本
cancelDownloads
取消下载。
cancelDownloads({params})
params
contentIds:
- 类型:字符串数组
- 默认值:无
- 描述:下载内容id组成的数组
示例代码
var iap = api.require('iap');
iap.cancelDownloads({
contentIds: ['123']
});
可用性
iOS系统
可提供的1.0.0及更高版本