ios内购 -九游会国际

webapp快捷打包
ios内购
转到模块插件

敬告:此 demo 演示为开放测试页面,仅用于开发者快速测试体验应用功能,请严格遵守开发者协议,九游会国际-九游会真人第一品牌

js-sdk 引用方式:

♦ 普通网页 script 方式加载:下载最新版 ,请在页面上调用 jsbridge 接口之前引用 jsbridge-mini.js 库;

♦ js module 方式引用:npm install ym-jsbridge

ios内购(in-app purchase)- 仅支持苹果端

canmakepayments 检查当前设备是否支持内购

可能由于家长控制等原因,当前设备不支持app内购买,在发起内购前可以先判断是否支持。

jsbridge.iap.canmakepayments(function(yes) {
  alert(yes ? "支持内购" : "不支持内购");
});

getproducts 获取产品列表

jsbridge.iap.getproducts({
  //你在 https://appstoreconnect.apple.com/ 创建的产品id数组
  productids: [
    "com.yidiantongqa.app.vip30",
    "com.yidiantongqa.app.vip60",
    "com.yidiantongqa.app.vip360"
  ]
}, function(succ, products) {
  if (succ) {
    alert(json.stringify(products));
  } else {
    alert("操作失败\n"   json.stringify(products));
  }
});
/**
products 返回产品信息
{   
  invalidproductids:[]      //无效的产品id,如果你提供了无效的产品id,会在这里返回,数组类型
  products:                 //有效的产品信息,数组类型
  [{
    productid:              //产品id,字符串类型
    title:                  //产品标题,字符串类型
    description:            //产品描述,字符串类型
    price:                  //产品价格,数字类型
    formattedprice:         //产品格式化后的价格,如¥6.00,字符串类型
    downloadable:           //是否有下载内容,布尔类型
    downloadcontentlengths: //下载内容长度,数字组成的数组
    downloadcontentversion: //下载内容的版本,字符串类型
  }]
}
**/

settransanctionlistener 设置交易监听器

• 调用 getunfinishedtransactions/purchase/restoretransactions/finishtransaction 方法之前应设置本监听器,所有交易状态变更都会通知到此监听器。

• 系统以数组形式将交易信息传递给回调参数 transactions

• 如果多次设置监听器,只有最后一个才会收到通知。

jsbridge.iap.settransanctionlistener(function(succ, transactions) {
  if (succ) {
    var json = json.stringify(transactions);
    jsbridge.setclipboardtext(json);
    //transactions.foreach(function(x){jsbridge.iap.finishtransaction({transactionid: x.transactionid});})
    alert(json);
  } else {
    alert("操作失败\n"   json.stringify(transactions));
  }
});
alert("已设置监听器");
/**
transactions 返回交易信息数组
[{
  state:                 //交易状态,详见交易状态常量,数字类型    
  transactionid:         //交易id,字符串类型    
  originaltransactionid: //原始交易id,只在state为恢复购买时有效,字符串类型
  transactiondate:       //交易时间,unix 时间戳(秒)
  receipt:               //交易凭证,经过base64编码,用于验证交易是否合法和有效,避免因越狱破解内购后造成损失,只在state为购买成功时有效,字符串类型
  errorcode:             //交易失败时的错误码,数字类型    
  errormsg:              //交易失败时的说明,字符串类型    
  payment:               //商品购买信息
  {
    productid:           //商品id,字符串类型
    quantity:            //购买数量,数字类型
    applicationusername: //用户信息,字符串类型
  },
  downloads:             //有下载内容时的下载信息列表
  [{    
    state:               //下载状态,详见下载状态常量,数字类型
    transactionid:       //下载内容所属交易id,字符串类型
    contentid:           //下载内容id,字符串类型
    progress:            //下载进度,取值范围0~1,数字类型
    contentlength:       //文件内容大小,数字类型
    timeremaining:       //下载剩余时间,-1时表示未知,数字类型
    contentversion:      //下载内容的版本,字符串类型
    contenturl:          //下载成功后文件路径,字符串类型
    errorcode:           //下载失败时的错误码,数字类型
    errormsg:            //下载失败时的错误描述,字符串类型
  }]
}]
state(transaction) 交易状态常量说明
0: 已加入交易队列(transaction is being added to the server queue.)
1: 交易完成(transaction is in queue, user has been charged.  client should complete the transaction.)
2: 交易失败(transaction was cancelled or failed before being added to the server queue.)
3: 恢复购买(transaction was restored from user's purchase history.  client should complete the transaction.)
4: 交易等待被确认(the transaction is in the queue, but its final status is pending external action.)
    
state(download) 下载状态常量说明
0: 等待下载(download is inactive, waiting to be downloaded)
1: 正在下载(download is actively downloading)
2: 暂停下载(download was paused by the user)
3: 下载完成(download is finished, content is available)
4: 下载失败(download failed)
5: 取消下载(download was cancelled)
**/

getunfinishedtransactions 获取未完成的交易

请在 settransanctionlistener 中接收交易数据

jsbridge.iap.getunfinishedtransactions();

purchase 购买产品

请在 settransanctionlistener 中接收交易数据

jsbridge.iap.purchase({
  //你在 https://appstoreconnect.apple.com/ 创建的产品id
  productid : "com.yidiantongqa.app.vip60",
  //可选,购买数量,不小于1的整数,默认1
  quantity  : 1,
  //可选,用户信息,交易回调里面原样返回,默认空
  applicationusername: "mystring"
});

restoretransactions 恢复用户以前购买过的所有商品交易

请在 settransanctionlistener 中接收交易数据

jsbridge.iap.restoretransactions();

finishtransaction 完成指定交易

• 在完成购买并提供给用户相关功能后应该完成此次交易;

• finishtransaction 成功后,此交易将从 unfinishedtransactions 队列中移除;

• 请在 settransanctionlistener 中接收交易数据;

jsbridge.iap.finishtransaction({
  //交易id
  transactionid: "3a266867-8275-4299-9bef-ff7a8a207d21"
});

setdownloadlistener 设置下载监听器

• 调用 startdownloads/pausedownloads/resumedownloads/canceldownloads 方法之前应设置本监听器,所有下载状态变更都会通知到此监听器。

• 系统以数组形式将下载信息传递给回调参数 downloads

• 如果多次设置监听器,只有最后一个才会收到通知。

jsbridge.iap.setdownloadlistener(function(succ, downloads) {
  if (succ) {
    alert(json.stringify(downloads));
  } else {
    alert("操作失败\n"   json.stringify(downloads));
  }
});
alert("已设置监听器");
/**
downloads 下载信息数组
[{    
  state:         //下载状态,详见settransanctionlistener的下载状态常量说明,数字类型
  transactionid: //下载内容所属交易id,字符串类型
  contentid:     //下载内容id,字符串类型
  progress:      //下载进度,取值范围0~1,数字类型
  contentlength: //文件内容大小,数字类型
  timeremaining: //下载剩余时间,-1时表示未知,数字类型
  contentversion://下载内容的版本,字符串类型
  contenturl:    //下载成功后文件路径,字符串类型
  errorcode:     //下载失败时的错误码,数字类型
  errormsg:      //下载失败时的错误描述,字符串类型
}]
**/

startdownloads 开始下载

请在 setdownloadlistener 中接收下载信息

jsbridge.iap.startdownloads({
  //下载内容id组成的数组
  contentids: [
    "contentid1",
    "contentid2",
    "..."
  ]
});

pausedownloads 暂停下载

请在 setdownloadlistener 中接收下载信息

jsbridge.iap.pausedownloads({
  //下载内容id组成的数组
  contentids: [
    "contentid1",
    "contentid2",
    "..."
  ]
});

resumedownloads 恢复下载

请在 setdownloadlistener 中接收下载信息

jsbridge.iap.resumedownloads({
  //下载内容id组成的数组
  contentids: [
    "contentid1",
    "contentid2",
    "..."
  ]
});

canceldownloads 取消下载

请在 setdownloadlistener 中接收下载信息

jsbridge.iap.canceldownloads({
  //下载内容id组成的数组
  contentids: [
    "contentid1",
    "contentid2",
    "..."
  ]
});


♦ 接入流程请参考 这里

♦ 关于自动续期订阅类商品:、

在服务器端验证支付凭证(receipt)

♦ 苹果官方文档

♦ 沙盒凭证验证接口

♦ 生产环境凭证验证接口

♦ 注意,app上架审核时苹果审核员用的是沙盒账户;

♦ 识别沙盒环境下收据的方法有两种:
1.根据凭证验证返回的字段 environment = sandbox。
2.根据凭证验证返回的状态码,如果 status = 21007,则表示当前的收据为沙盒环境下凭证;

♦ 构造json { "receipt-data" : "(receipt 支付凭证)" } post 到苹果的验证接口,处理返回结果即可。

网站地图