Flutter 与 HarmonyOS NEXT | IAPKit(应用内支付服务)避坑指南

一、什么是IAP

IAP全称In App Purchase,中文名:应用内支付服务。是HarmonyOS为开发者提供便捷的应用内支付体验和简便的接入流程,让开发者聚焦应用本身的业务能力,助力开发者商业变现。开发者应用可通过使用IAP Kit提供的系统级支付API快速启动IAP收银台,即可实现应用内支付。

⚠️值得注意的是,企业开发者可以选择使用微信或者支付宝支付,而个人开发者只能使用华为提供的IAPKit,否则上架会不过审。

二、准备步骤

1. 商户开通(!!耗时将近1个月)

使用IAPKit之前要先开通商户服务。这个要去通过邮件联系,然后会让你加微信等,打印并且签署《华为商户服务协议》,再寄回去给华为。不知道现在有没有优化这个流程🤔。

2.1 真机准备

IAPKit无法使用虚拟机调试,一定只能使用真机。(这里我已经帮大家用各种方法试过了虚拟机了,不行的😭),现在最便宜的真机应该是nova13 nova12系列。

2.2 证书准备

IAPKit要求证书是手动签名的方式,不是使用Dev-eco studio自动生成的。这个坑在发现之前也花了我很长时间。

2.3 AGC (开发者联盟) 配置

首先要打开api开关 => 官方文档

然后下载一个密钥

三、上手开发

3.1 下依赖包

鸿蒙官方的支付依赖或多或少用不了,需要自己去github下载了他们的包 (链接: gitcode.com/openharmony...) 然后修改一下。

修改成不会报错就行。

然后引用本地的库:

yaml 复制代码
in_app_purchase:
#    git:
#      url: "https://gitee.com/openharmony-sig/flutter_packages.git"
#      path: "packages/in_app_purchase/in_app_purchase"
    path: packages/in_app_purchase/in_app_purchase

上面注释的那些就是原来想直接引用远程仓库的,但不行,最后才用了本地仓库。

3.2 增加服务器验证所需数据 (可选)

这个 in_app_purchase 跟Flutter官方维护的包名字一模一样,但少了一些逻辑,如鸿蒙官方的 in_app_purchase 是本地执行验证逻辑的,没有服务器确认的这一步。

因此有需要使用的小伙伴可以进行修改,把验证那一步放到服务器上。

找到这个文件MethodCallHandlerImpl.ets

在类 MethodCallHandlerImpl 中加入 一个成员变量。

TypeScript 复制代码
private receiptData: string = ''

if (type == iap.ProductType.AUTORENEWABLE) {} else if (type == iap.ProductType.CONSUMABLE || type == iap.ProductType.NONCONSUMABLE) { 这两句话下面增加 (可以ctl+F快速查找)

TypeScript 复制代码
this.receiptData = JSON.parse(createPurchaseResult.purchaseData).jwsPurchaseOrder

最后修改MethodNames.RETRIEVE_RECEIPT_DATA

kotlin 复制代码
case MethodNames.RETRIEVE_RECEIPT_DATA: 
  result.success(this.receiptData) // 返回获取的数据
  break;

3.3 接入

in_app_purchase库使用经验的小伙伴这个时候就可以直接使用in_app_purchase的example ( pub.dev/packages/in... ) 中的大部分逻辑的。以上的修改就是为了使得_validPurchase中的PurchaseDetailsserverVerificationData属性可用。

dart 复制代码
_validPurchase(PurchaseDetails prod) async {
  CallBack callBack = await validPurchased(
      prod,
      prod.verificationData.serverVerificationData, // 这个就是刚刚修改的获得的receiptData
      prod.purchaseID!,
      prod.productID); // 向服务器验证
  if (callBack.success){
    
  }
}

验证逻辑可以参考官方的这个图 (原图地址: developer.huawei.com/consumer/cn...)

结语

由于鸿蒙5是一个新平台,因此坑可能会比较多,但一步一步来还是能解决问题的。欢迎大家还有什么问题在评论区提问。

相关推荐
是上好佳佳佳呀31 分钟前
【前端(十一)】JavaScript 语法基础笔记(多语言对比)
前端·javascript·笔记
xmdy58661 小时前
Flutter+开源鸿蒙实战|智安盾电商溯源平台Day1 项目搭建与整体方案拆解
flutter·开源·harmonyos
CDN3601 小时前
排查实录:网站偶发502/504错误?360CDN回源超时配置与日志分析技巧
前端·数据库
之歆1 小时前
Day07_CSS盒子模型 · 样式继承 · 用户代理样式
前端·css
nashane2 小时前
HarmonyOS 6学习:应用签名文件丢失处理与更新完全指南
学习·华为·harmonyos·harmonyos 5
DanCheOo2 小时前
AI 应用的安全架构:Prompt 注入、数据泄露、权限边界
前端·人工智能·prompt·安全架构
We་ct3 小时前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域
笔触狂放3 小时前
【项目】基于ArkTS的老年人智能应用开发(1)
harmonyos·arkts·鸿蒙
weixin_427771613 小时前
前端调试隐藏元素
前端
爱上好庆祝4 小时前
学习js的第五天
前端·css·学习·html·css3·js