IOS 应用内支付(IAP)接口使用说明

IOS平台最新集成了苹果官方提供的应用内支付(In-App Purchase),新的插件是在plus.payment的基础上进行了扩展,但是在使用方法上与原有的支付API的使用流程稍有区别,下面对IAP插件的使用方法进行说明

HBuilder 里的调试基座默认不带IAP支付通道,如果需要调试IAP需要使用开发证书生成一个自定义调试基座,用来实现IAP的开发和调试。
自定义调试基座使用方法请参考文档http://ask.dcloud.net.cn/article/12723

手机用户可以在“设置->通用->访问限制->App 内购买项目”中关闭支付,如果用户关闭了IAP,开发者将获取不到ID为“appleiap”的支付通道。

IAP支付对PaymentChannel对象进行了扩展添加了以下几个方法
方法
requestOrder 向Appstore请求有效的商品详情
restoreComplateRequest 向Appstore发送请求获取已经购买商品(非消耗型项目和订阅项目)的支付信息,获取成功以后会返回一个的已购商品收据列表。

下面对应用内支付的使用方法进行说明,文中API的参数及使用实例请参考http://www.html5plus.org/doc/zh_cn/payment.html

购买商品接口使用方法

\n

  1. 首先调用plus.payment.getChannels获取支付通道,IAP支付通道的ID为“appleiap”
  2. 调用ID为“appleiap”的PaymentChannel对象的requestOrder方法,像Appstore请求有效的商品详情。注意:IAP支付必须在调用payment.request方法之前,调用requestOrder方法,否则调用payment.request将会报错。
  3. 调用plus.payment.request方法发起支付请求,传入statement的参数为JSON对象,可以设置如下参数
    productid String(必选)要支付的商品的标识(必须是调用requestOrder返回的有效的商品标识)
    username String(可选)购买商品用户的用户名
    quantity String (可选)购买商品的数量,如果不填写默认为1
    示例:
\n
<html>

<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>Hello H5+</title>
<script type="text/javascript">
var iapChannel;
var IAPOrders = ['io.dcloud.payTest1', 'io.dcloud.payTest2'];

function plusReady() {
// 获取支付通道
plus.payment.getChannels(function(channels) {
for (var i in channels) {
if (channel[i].id == 'appleiap') {
iapChannel = channel[i];
iapChannel.requestOrder(IAPOrders, function(event) {
for (var index in event) {
var OrderItem = event[index];
outLine("Title:" + OrderItem.title + "Price:" + OrderItem.price + "Description:" + OrderItem.description + "ProductID:" + OrderItem.productid);
}
}, function(errormsg) {
outLine("获取支付通道失败:" + errormsg.message);
});
}
}
}, function(e) {
outLine("获取支付通道失败:" + e.message);
});
}
document.addEventListener('plusready', plusReady, false);

function pay(id) {
plus.payment.request(iapChannel, {
"productid": id,
"username": "appusername",
"quantity": 2
}, function(result) {
alert(JSON.stringify(result));
}, function(e) {
plus.nativeUI.alert("更多错误信息请参考支付(Payment)规范文档:http://www.html5plus.org/#specification#/specification/Payment.html", null, "支付失败:" + e.code);
});
}
</script>
</head>

</html>
\n

恢复已购项目接口使用方法

\n

  1. 首先调用plus.payment.getChannels获取支付通道,IAP支付通道的ID为“appleiap”
  2. 调用ID为“appleiap”的PaymentChannel对象的restoreComplateRequest方法
\n

示例:

<!DOCTYPE HTML>
<html>

<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>Hello H5+</title>
<script type="text/javascript">
var iapChannel;
var IAPOrders = ['io.dcloud.payTest1', 'io.dcloud.payTest2'];

function plusReady() {
// 获取支付通道
plus.payment.getChannels(function(channels) {
for (var i in channels) {
if (channel[i].id == 'appleiap') {
iapChannel = channel[i];
iapChannel.requestOrder(IAPOrders, function(event) {
for (var index in event) {
var OrderItem = event[index];
outLine("Title:" + OrderItem.title + "Price:" + OrderItem.price + "Description:" + OrderItem.description + "ProductID:" + OrderItem.productid);
}
}, function(errormsg) {
outLine("获取支付通道失败:" + errormsg.message);
});
}
}
}, function(e) {
outLine("获取支付通道失败:" + e.message);
});
}
document.addEventListener('plusready', plusReady, false);
function getPayedTrances() {
iapChannel.restoreComplateRequest({
"username": "waipptt"
},function(trancs){
outLine(“获取已经购买项目成功:” + JSON.stringify(trancs));
}, function(errormsg){
outLine("获取支付通道失败:" + errormsg.message);
});
}
</script>
</head>
</html>
\n
4 分享 关注
DCloud_客服_Trust 515766519@qq.com 1844252358@qq.com 498763851@qq.com
842200016@qq.com

842200016@qq.com

订单参数怎么传进去的 @DCloud_App_Array,@DCloud_heavensoft
0 赞 2018-12-19 15:45
842200016@qq.com

842200016@qq.com 回复 842200016@qq.com

ios版本的
0 赞 2018-12-19 15:13
842200016@qq.com

842200016@qq.com

@DCloud_App_Array 非企业级的app只能用内购支付吗
0 赞 2018-12-19 14:45
similing4@163.com

similing4@163.com

restoreComplateRequest这个方法调用成功了但是trancs为什么没有数据只有一个[]空数组呢?
0 赞 2018-10-19 19:44
970905469@qq.com

970905469@qq.com 回复 bishuihanshan

我一直是获取订单信息失败,这是什么原因呢?
0 赞 2018-08-06 11:55
bishuihanshan

bishuihanshan

restoreComplateRequest 这个一直是雪花等待,都没有返回啊
大家有收到返回的吗
0 赞 2018-03-16 08:42
1024大于1M

1024大于1M 回复 1844252358@qq.com

做出来了,你继续看电影,看直播
0 赞 2017-11-03 10:16
1844252358@qq.com

1844252358@qq.com 回复 1024大于1M

你你ios内购做好了吗?还在睡觉!
0 赞 2017-10-24 14:58
1844252358@qq.com

1844252358@qq.com 回复 阿彬

你ios内购做好了吗?
0 赞 2017-10-24 14:47
1024大于1M

1024大于1M 回复 立扬

你ios内购做好了吗?
1 赞 2017-10-24 11:59
Sunaice

Sunaice 回复 小修的幻想

解决了吗
1 赞 2017-08-09 10:06
hlmystery@hotmail.com

hlmystery@hotmail.com

它给我返回 返回订单信息失败,http://ask.dcloud.net.cn/article/282 咋搞,itunes connect里面已经添加商品了,app也打包出来测试的
1 赞 2017-07-24 16:55
阿彬

阿彬

这里只说了如果获取产品跟恢复产品,在itune connect 里面如果生成产品没有说,我购买产品成功后,如果返回服务器如何修改状态也没有说。
0 赞 2017-07-18 15:34
阿彬

阿彬

我在channel里面也是获取不到appleiap,是不是我要打包安装到手机才会出现???
1 赞 2017-07-15 13:23
啊啊啊啊sky

啊啊啊啊sky

请问下,hbuilder最终是能不能接入IOS 应用内支付的??
0 赞 2017-06-19 11:16
小修的幻想

小修的幻想

苹果不让使用第三方SDK调用IAP支付,导致应用被打回,这种情况怎么处理?今天苹果APPSTORE REVIEW打电话说的。
0 赞 2017-06-16 12:38
凌垚

凌垚 回复 天空晴朗

你做好了苹果内购了吗?
0 赞 2017-03-08 10:46
565220921@qq.com

565220921@qq.com 回复 SDK_骁骑

我的目前也报这个错了,怎么解决啊,用的苹果沙盒测试账号支付完全没问题,换为正式账号就报这个错了。
0 赞 2017-02-15 17:26
SDK_骁骑

SDK_骁骑 回复 愉悦的筱恩

检查一下itunes账号是否有测试的权限,或者商品为非消耗性商品重复购买了
0 赞 2016-11-10 18:01
愉悦的筱恩

愉悦的筱恩 回复 SDK_骁骑

payment_appleiap:-6
在文档中找不到这个报错
code:-100
0 赞 2016-11-08 18:16
SDK_骁骑

SDK_骁骑 回复 愉悦的筱恩

打印一下错误的message看下详细的错误信息
0 赞 2016-11-08 15:24
愉悦的筱恩

愉悦的筱恩

iap一直报-100.。。。怎么破@客服
0 赞 2016-11-08 14:21
515766519@qq.com

515766519@qq.com 回复 立扬

你做好了吗
0 赞 2016-10-26 19:37
515766519@qq.com

515766519@qq.com

IAPOrders @ DCloud_SDK_骁骑 大神 这里面参数写什么
0 赞 2016-10-26 19:14
立扬

立扬 回复 tinny100

谢谢大神
0 赞 2016-10-18 11:46
tinny100

tinny100 回复 立扬

看你的支付涉及到什么东西,如果支付的商品时虚拟商品(类似:游戏币,视频等等),就必须用到苹果内支付(人家要收取提成的),如果是实物的话就可以不用苹果支付,微信或者支付宝都可以
1 赞 2016-10-06 10:53
立扬

立扬 回复 SDK_骁骑

谢谢亲,研究一下
0 赞 2016-09-30 15:50
SDK_骁骑

SDK_骁骑 回复 立扬

支付申请的部分可以参考文档
http://www.cnblogs.com/XimuYouzi/archive/2016/04/17/5401749.html
1 赞 2016-09-27 11:53
立扬

立扬

请问有完整示例么?官方的html5+例子不能用,没明白原理,是跟微信一样需要在微信平台申请接口,然后客户服务器端写接口程序,app端按上面代码即可么?@大神
0 赞 2016-09-20 20:21
立扬

立扬 回复 天空晴朗

请问,您那边解决了么
0 赞 2016-09-20 15:13
立扬

立扬 回复 天空晴朗

苹果端有支付的话,必须用应用内支付接口么?客户需求是用微信支付,我提交了几个版本都没有通过审核,请问是这个原因么(说明里提到支付)
0 赞 2016-09-20 15:12
longgger@hotmail.com

longgger@hotmail.com 回复 天空晴朗

同问
0 赞 2016-09-13 11:09
天空晴朗

天空晴朗

谁有具体的 苹果内购实例啊,苹果内购没法做出来,无法通过审核,开发苹果的APP就没有意义了啊
0 赞 2016-06-08 17:05
张益达啊

张益达啊

云端打包后测试,也还没有获取到appleiap 呢 代码也跟上边例子一样的
0 赞 2016-03-21 08:48
DCloud_App_Array

DCloud_App_Array

在manifest.json中的plus->distribute->plugins->payment节点下添加“appleiap”相关的节点,并提交云端打包。
更多说明参考:
[http://ask.dcloud.net.cn/article/71](http://ask.dcloud.net.cn/article/71)
[http://ask.dcloud.net.cn/article/497](http://ask.dcloud.net.cn/article/497)
0 赞 2016-03-07 15:15
旭仔

旭仔

获取不到 appleiap 的channel呢?其他的都可以得到!
0 赞 2016-03-06 18:27

要回复文章请先登录注册