IPA苹果支付使用说明

1、您需要先在 iTunes Connet 应用后台,创建好 App 内购买项目,设置好税务和银行卡等配置信息,具体操作请自行查询文档教程;推荐阅读 App 内购买项目配置流程
2、HBuilderX 内置的调试基座默认不带IAP支付通道,如果需要调试 IAP 需要创建自定义调试基座,需要在 manifest->App模块配置->Payment(支付)->勾选 Apple应用内支付

下面对应用内支付的使用方法进行说明,文中API的参数及使用实例请参考 plus.payment

苹果支付接口使用方法

1、首先调用 plus.payment.getChannels 获取支付通道,IAP 支付通道的 ID为"appleiap"
2、调用ID为"appleiap"的PaymentChannel 对象的 requestOrder 方法,向 AppStore 请求有效的商品详情,注意:调用 plus.payment.request 前必须先调用此接口
3、调用 plus.payment.request 方法发起支付请求, OrderStatementIAP 的参数为JSON对象,参数说明

  • productid: (String 类型 )(必填) 商品的标识
  • username: (String 类型 )(可选) 购买用户名称
  • quantity: (String 类型 )(可选) 商品数量,默认为 “1”
  • optimize:(Boolean)(可选) HX 3.1.10 版本新增参数,解决用户未绑定支付方式造成的丢单问题;

4、调用 restoreComplateRequest 恢复购买接口,此方法的作用说明

  • 用于向 App Store发送请求获取已经购买商品(非消耗型项目和订阅项目)的支付信息;
  • 获取之前某些原因造成的丢单的商品支付信息,注意:调用支付接口时需要设置 optimize:true;(比如,支付过程App意外退出,用户首次支付未绑定任何支付方式时造成的丢单情况)

示例

1、获取appleiap支付通道

getChannels(){plus.payment.getChannels(function(channels) {  for (var i in channels) {  var channel = channels[i];  // 获取 id 为 'appleiap' 的 channel  if (channel.id === 'appleiap') {  this.iap = channel;  }  }  }, function(e) {  console.log("获取iap支付通道失败:" + e.message);  });
}

2、获取订单信息

// ids 为在苹果开发者后台配置的应用内购项目的标识集合
requestPaymentIos(id){var ids = ['商品1', '商品2'];   // iap 为刚刚获取的`appleiap`支付通道  this.iap.requestOrder(ids, function(e) {  // 获取订单信息成功回调方法  console.log('requestOrder success: ' + JSON.stringify(e));  ids.map(item=>{//这里的id是 iTunes Connet 应用后台创建App 内购买项目的idif(item.productid == id){var orderInfo = {productid: item.productid, // 商品idquantity: 1, // 数量,默认1username: 'appusername', // 用户标识  optimize: true, // 设置 optimize: true 解决丢单问题  }// 接下来就是调用plus.payment.request支付this.iosPayment(orderInfo)}})}, function(e) {  // 获取订单信息失败回调方法  console.log('requestOrder failed: ' + JSON.stringify(e));  });
}

3、支付

iosPayment(orderInfo){// restoreFlag 标记,用于判断在页面显示的时候是否需要调用 restoreComplateRequest 方法  var restoreFlag = true; // 调用支付接口时标记 restoreFlag = true , 实际应用请将标记存储在 storage 中 // 开始支付plus.payment.request(this.iap, orderInfo, function(result) {console.log("支付成功----", result)restoreFlag = false;//调用后端接口验证支付接口},function(e) {console.log("支付失败----", e);// 支付失败的时候需要调用一下 restoreComplateRequest 方法this.restoreComplateRequest()});
}

4、验证支付结果

verifyIosPay(result) {const params = {productId: result.payment.productid,quantity: result.payment.quantity,transactionDate: result.transactionDate,transactionIdentifier: result.transactionIdentifier,transactionReceipt: result.transactionReceipt,orderId: 'orderId'}console.log('params---------', params)payIosVerifyApi(params).then(res=>{console.log('res', res)if (res.code == 20000) {this.$u.toast('支付成功')} else {this.$u.toast(res.message)}})
},

4、恢复购买方法(获取已购的非消耗性商品和订阅商品及丢单的商品包括消耗类型商品)
注意:如果用户在支付过程中退出了App,或其他情况造成的丢单的消耗类型商品在支付完成后,首次调用该接口可返回支付凭证

restoreComplateRequest() {  iap.restoreComplateRequest({}, function(results) {  this.requestPaymentIos(results[0].payment.productid)// results 格式为数组存放恢复的IAP商品交易信息对象 IAPTransaction,需要将返回的支付凭证传给后端进行二次认证  });
}

5、在支付页面每次显示的时候判断是否需要调用 restoreComplateRequest()方法,确认是否有未完成或可恢复的订单

// 1. 5+app 在 resume 回调中调用 restoreComplateRequest
document.addEventListener('resume',function(){  if(restoreFlag) {  restoreComplateRequest()  }
},false);  // 2.uniapp 在页面 onShow 方法中调用 restoreComplateRequest
onShow() {  if(restoreFlag) {  restoreComplateRequest()   }
}

丢单恢复的说明

通过和用户联调我们发现在调用支付接口后,如果用户未绑定支付方式此时会触发支付失败回调方法,实际上用户可以跳转 AppStrore 绑卡然后继续支付,之前的逻辑在回调失败方法中框架会关闭订单,用户付完钱在回到App中也不会触发成功回调,这样就造成了丢单,解决方法就是在调用支付接口时添加optimize: true参数,并标记 restoreFlag = true;,支付成功回调中清除标记 restoreFlag = false; 然后在支付失败回调中框架就不会关闭订单了,并在页面显示的时候通过标记判断是否需要调用 restoreComplateRequest 方法,如果用户跳转App Store绑定支付方式付款成功后回到 App 就可以通过 restoreComplateRequest 方法恢复之前支付的订单信息,解决丢单的问题;

uniapp使用IPA苹果支付相关推荐

  1. 【iOS内购支付】Uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑(手把手教程)

    前言 Hello!又是很长时间没有写博客了,因为最近又开始从事新项目,也是第一次接触关于uniapp开发原生IOS应用的项目,在这里做一些关于我在项目中使用苹果内购支付所实现的方式以及要注意的事项,希 ...

  2. uniapp 苹果支付注意事项(前端)

    <script> let iapChannel = null, productId = 'Recharge_1',//默认苹果内购商品ID productIds = ['Recharge_ ...

  3. 苹果支付和ios安全 - 你需要知道的

    2019独角兽企业重金招聘Python工程师标准>>> 移动支付看起来将成为2015年的定义技术之一,因为苹果公司的推出推动了无刷支付的繁荣 - 无论是苹果自己的系统还是对手都在追赶 ...

  4. 苹果支付:如何解决沙盒环境下获取可恢复购买项为空

    在传统手游开发中免不了和苹果支付打交道,而且苹果也会有各种奇奇怪怪的问题和BUG . 曾经有一次某一个游戏出现了调单问题,现象如下(我有点懒,不想画泳道图或者时序图): 客户端拉起支付付款成功,OC底 ...

  5. 苹果支付返回html,苹果应用内支付,服务器端的实现

    苹果支付的逻辑如下首先客户端先请求苹果支付中心,支付中心返回给客户端一堆加密的数据. 然后客户端把这段加密的数据 base64之后传给后端. 最后由后端再去请求苹果支付中心来验证这次购买是否成功.验证 ...

  6. 苹果支付成功后,JAVA服务端二次验证

    原理简述: 苹果客户端在完成应用购买,下单后支付,苹果后台会给客户端返回信息,用来验证支付结果: 客户端在拿到返回值后,将指定返回值,通过接口形式请求应用服务器,应用服务器根据这个值调用苹果服务器进行 ...

  7. 苹果支付(内购项目)回调验证

    返回的加密参数-苹果支付返回的参数 $receipt_data="MIIbWQYJKoZIhvcNAQcCoIIbSjCCG0YCAQExCzAJBgUrDgMCGgUA......&quo ...

  8. uni-app app平台微信支付

    一.App平台支付流程 流程:支付平台功能申请 -> manifest.json 里配置支付参数 -> uni-app 里调用 API 进行支付 二.微信App支付功能申请 到 微信开放平 ...

  9. 苹果支付验证回执单相关错误码

    苹果支付错误码 类型: status 可能值 21000: 未使用HTTP POST请求方法向App Store发送请求. 21001: 此状态代码不再由App Store发送. 21002: rec ...

  10. 海外SDK之----------苹果支付

    哈喽,大家好,么么哒!今天天气真是异常的热啊!出去走走都要热晕了,今天呢就开始我们的苹果支付啦,下面开始. 苹果支付分2种,1是什么银联类型的支付 2是应用内支付( In-Aopp Purchase ...

最新文章

  1. axis2 java客户端内存溢出怎么办_java - Axis2-总是出现404错误 - 堆栈内存溢出
  2. Linux SVN 命令详解
  3. 发现了拯救“文献多的一团麻”的工具
  4. 九毛九集团java_JAVA数组课后作业
  5. Github Trending被中文项目“占领”,国外开发者不开心了!
  6. 已经安装mysql xampp_windows 7 本机已安装mysql5的情况上 安装XAMPP
  7. 分享一些不错的sql语句
  8. C#保存图片到数据库,读取图片显示
  9. PCI总线地址空间与PC地址空间的映射关系及数据传输原理
  10. hexo笔记十五:next主题添加网易云外链
  11. 计算机硬件未来发展前景,计算机硬件现状及其发展趋势
  12. 51nod 1108.距离之和最小 V2 - 曼哈顿距离
  13. 3d打印英语文献_3D打印合集,从设计,技术到工业制造应用!
  14. Python OCR 识别图片内容
  15. 注意力机制、bmm运算
  16. 爬取碧蓝航线wiki
  17. 华为麦芒6支持鸿蒙吗,华为麦芒6支持电信吗_华为麦芒6支持电信卡吗-太平洋IT百科...
  18. spring 自己定义标签 学习二
  19. 秦储数字藏品平台正式上线公测 | 实名注册用户首日突破2万!
  20. G120变频器本地_远程切换(CDS切换)的具体方法和步骤

热门文章

  1. win gvim erlang 环境配置
  2. 2022最新批量删除微博教程!支持批量删除微博批量删除清空点赞关注评价以及粉丝
  3. Web.xml 错误或异常页面配置
  4. 编译jitsi-meet安卓遇到的问题
  5. Python学习—字典
  6. 基于中科院-CASIA-GaitDatasetB步态图像轮廓数据库的步态周期检测与步态角度特征MATLAB源码介绍
  7. 【MySQL 09】安装mysql时出现:需要这两个包perl(Data::Dumper),perl(JSON)
  8. Spring boot 集成 WebService(简单使用、文件上传下载)
  9. 列表,元组,字典,集合的特点
  10. 制作Excel图表背景