【iOS内购支付,无需插件】Uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑(手把手教程),手把手教你实现Uniapp的iOS内购支付,注意事项、步骤与经验分享

马肤

温馨提示:这篇文章已超过420天没有更新,请注意相关的内容是否还可用!

摘要:本文将介绍Uniapp在iOS平台上实现内购支付的功能,无需额外插件。文章涵盖了拉起苹果内购支付的注意事项、实现步骤以及常见问题的解决方案。本文旨在为读者提供一个手把手的教程,帮助开发者顺利集成iOS内购支付功能,避免遇到不必要的困扰和难题。

前言

Hello!很长时间没有写博客了,因为最近开始从事uniapp开发原生IOS应用的项目,我想分享一下我在项目中使用苹果内购支付所遇到的一些问题及解决方案,希望能给正在做uniapp开发ios应用需要使用苹果内购支付的开发者们一些帮助。

问题

为什么开发ios应用需要使用苹果内购支付?

原因在于,苹果要求所有开发者在上架Appstore中的应用,如果应用中出现了虚拟商品的购买,必须使用苹果内购支付,并且绝对不能使用其他支付方式,例如微信、支付宝等支付方面的sdk,如果你不怕被苹果下架的风险,可以尝试使用webview跳转的方式,但是在你的代码中如果使用了其他支付方式的sdk或者代码,有很大可能无法通过苹果严格的审核。

ios内购为什么要专门拿出来说,对比其他支付方式有什么区别吗?

他与微信、支付宝等都属于支付渠道的一种,本质上没有区别,但是由于苹果服务器的原因,导致一些特殊的问题,例如回调时间长甚至没有回调、掉单、回调异常等情况,这种情况对比其他支付方式真的很鸡肋,特别是在uniapp的开发环境下,居然没有超时的回调,简直是个大坑,不过后面我会提到解决方案。

【iOS内购支付,无需插件】Uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑(手把手教程),手把手教你实现Uniapp的iOS内购支付,注意事项、步骤与经验分享 第1张

前期准备

开通内购

【iOS内购支付,无需插件】Uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑(手把手教程),手把手教你实现Uniapp的iOS内购支付,注意事项、步骤与经验分享 第2张

你需要拥有ios开发者平台的开发者账号,申请开通内购支付,并配置相应的内购档位名称和参数,内购档位需要配置ios后台已有的档位,ios档位是有规定指定的金额,不是自定义档位金额的,注意:此处的档位id需要配置到后端返回给前端,需要跟苹果后台配置的一一对应,否则也会拉起失败!

自定义基座包

【iOS内购支付,无需插件】Uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑(手把手教程),手把手教你实现Uniapp的iOS内购支付,注意事项、步骤与经验分享 第3张

注意,测试支付需要制作自定义基座包,需要配置相应的证书,证书可以参考uniapp的文档进行配置,测试证书制作正式包无法测试支付,只能用于自定义基座包,获取内购证书

正式上线

【iOS内购支付,无需插件】Uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑(手把手教程),手把手教你实现Uniapp的iOS内购支付,注意事项、步骤与经验分享 第4张

正式上线需要将证书替换为正式证书,通过testfight软件进行进一步测试!

实现步骤

【iOS内购支付,无需插件】Uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑(手把手教程),手把手教你实现Uniapp的iOS内购支付,注意事项、步骤与经验分享 第5张

Unipay(不常用)

由于我使用的是uniapp开发原生应用,本身uniapp对于支付方式就有专门的封装,如果你没有后端,可以尝试使用uniPay,下面是文档的链接,Unipay官方文档,基本用法(常用)使用uniapp的uni.requestPayment来实现是比较常用的方式,下面是支付的文档,不过看看就好,还是有挺多坑的,具体的支付流程可以参考一下官方文档,不过逻辑还有代码的正确性需要自己考量,下面我会介绍我的方式。

【iOS内购支付,无需插件】Uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑(手把手教程),手把手教你实现Uniapp的iOS内购支付,注意事项、步骤与经验分享 第6张

开启内购模块

在manifest.json文件中勾选Payment(支付)中的Apple应用内支付,注意:不要勾选其他支付模块,如果你开发ios原生应用的话,获取iap通道是判断当前设备是否支持苹果内购支付的必要条件,所以一定要先判断是否含有iap支付通道,如果含有支付通道,才可以走支付逻辑,否则直接return即可,不需要任何逻辑。

【iOS内购支付,无需插件】Uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑(手把手教程),手把手教你实现Uniapp的iOS内购支付,注意事项、步骤与经验分享 第7张

请求苹果档位列表这一步一定要做,否则无法拉起内购支付,目的就是判断当前的内购档位信息是否有配置在苹果后台中,拉起支付这里建议将manualFinishTransaction设置为true手动关闭订单,否则自动关闭订单可能出现订单关闭失效的情况,由于篇幅限制无法展示所有代码示例,不过我会给出大致的流程和思路,关于回调时间长导致掉单的问题可以通过申请客服反馈查询后端订单情况补单解决如果没有客服反馈功能则需要手动补单提供订单号和票据信息由于用户可能关闭应用导致订单号丢失票据信息和订单号无法对应起来因此我们需要做一个手动队列的处理在用户下单时候将订单号和档位id关联起来做一个队列也就是key:档位idvalue:订单号数组原因是用户可以关闭应用之后重新点击支付生成一笔新的订单号但是回调是上一笔的票据因此需要做一个订单号数组每次支付的时候获取缓存中的队列数据如果该档位存在订单号说明上一笔订单并没有上报成功因此取队列中的第一个订单号作为上报待上报成功之后将这笔订单移除这样就不会影响用户的正常支付获取到上一笔订单的回调问题影响页面逻辑主动关闭订单由于上一步操作虽然正常上报但是并没有将已完成的订单移除所以我们还需要做一个队列用来移除已完成的订单上报成功之后将票据和osn作为队列放入缓存中这一步其实是为了判断订单是否已经关闭由于苹果服务器的原因很可能你主动调用关闭订单没有立即关闭所以你需要在进入应用的时候重新主动关闭苹果回调了上一笔订单的票据这也算是一个比较奇怪的问题不过回想也是可以理解的由于苹果服务器回调时间长的问题不仅仅是支付回调慢就连关闭订单的回调也是非常慢这就导致了用户在支付下一笔订单时上一笔订单并没有完全关闭结果就是用户在支付第二笔订单时回调的结果是上一笔订单的票据因此推荐手动关闭订单自己选择合适的时机去关闭订单总体流程图注意事项校验格式不正确如果上报苹果凭证发现苹果返回凭证格式不正确的问题请注意查看官方文档这里的凭证需要经过base64但是我们通过uniapp官方api调用的支付方式返回的凭证是已经经过了base64的请不要再base64否则就会校验失效2100


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码