uniapp实现iOS支付苹果内购支付踩过的坑以及具体操作步骤

news2025/1/11 2:39:13

由于我们app会员属于虚拟产品,所以苹果商店要求我们必须选择苹果内购,否则就勒令下架。
无奈,于是就又开始了踩坑之旅~
uniapp可以直接使用uni-pay的插件去进行苹果内购。
但是,在对接自己的项目之前,建议先跑通示例项目,能跑通示例项目,代表你的配置和证书一定是正确的,然后再将uni-pay集成到你自己的项目中,不然就像盲头苍蝇,不知道怎么做。

(1)从插件市场导入uni-pay示例项目。前往插件市场

在这里插入图片描述

(2)关联自己的云空间,没有就新建一个

打开uni-pay配置文件,配置文件地址: uniCloud/cloudfunctions/common/uni-config-center/uni-pay/config.js
在这里插入图片描述
大家注意了,这个示例项目在导入hbuilderx的时候,它已经创建好了config.js的文件以及对应的目录,那我们到接入自己项目的时候。就需要自己去手动创建,然后把文件的内容复制粘贴过去。

const fs = require('fs');
const path = require('path')
module.exports = {
	// 统一 - 支付回调地址,格式为 "服务空间ID":"URL化地址"
	"notifyUrl": {
		// 本地开发环境-支付回调地址
		"b267e273-19a7-4288-99c7-f6f27f9c5b77": "https://b267e273-19a7-4288-99c7-f6f27f9c5b77.bspapp.com/uni-pay-co",
		// 线上正式环境-支付回调地址
		"499e2a37-0c77-418a-82aa-3e5820ecb057": "https://499e2a37-0c77-418a-82aa-3e5820ecb057.bspapp.com/uni-pay-co",
	},
	// ios内购相关
	"appleiap" :{
		// ios内购支付
		"app": {
			"password": "", // App 专用共享密钥,App 专用共享密钥是用于接收此 App 自动续期订阅收据的唯一代码。如果您要将此 App 转让给其他开发者或不想公开主共享密钥,建议使用 App 专用共享密钥。非自动续订场景不需要此参数
			"timeout": 10000, // 请求超时时间,单位:毫秒
			"sandbox": false, // 是否是沙箱环境(本地调试ios走的是沙箱环境,故要设置为true,正式发布后,需要设置为false)
		}
	}
}

(3)上传公共模块 uni-config-center(右键,上传公共模块,每次修改了支付配置,都需要重新上传此模块才会生效)

(4)上传公共模块 uni-pay(右键,上传公共模块)

(5)上传云对象 uni-pay-co(右键,上传部署。当然对uniCloud目录点右键批量上传也可以)

(6)数据库初始化

在这里插入图片描述

(7)修改manifest文件

在这里插入图片描述
这里要注意,只能选择apple应用内支付这一项,不要去勾选支付宝或者微信。

(8)云打包

只有通过云打包,iOS内购才能生效。
在这里插入图片描述
这里也要注意一个坑。。。
就是在你接入自己的项目的时候,你是以插件的形式(uni_modules)依赖的,如果使用了easycom,就要做下配置,否则uni-pay没法正常依赖使用。也可能造成云打包失败。
在这里插入图片描述

"easycom": {
		"autoscan": true,
		"custom": {
			"^model-(.*)": "@/components/model-$1/model-$1.vue", // 匹配components目录内的vue文件
			"^uni-list-i(.*)": "@/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue", // 匹配uni_modules目录的vue文件
			"^uni-(.*)": "@/uni_modules/uni-$1/components/uni-$1/uni-$1.vue", // 匹配uni_modules目录内的vue文件
			"^vue-file-(.*)": "packageName/path/to/vue-file-$1.vue" ,// 匹配node_modules内的vue文件
			"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
		}
	},

(9)如何获取产品id(ios内购产品id(仅ios内购生效))

需要注册ios开发者账号,且交了年费(688元/年)
需要在ios开发者平台添加内购商品,并获得商品id
ios沙箱测试时,需要先在ios开发者平台添加沙箱测试账号,同时你的测试手机上需要登录ios沙箱账号
目前hbx版本热刷新会导致ios支付无法正常调用,因此每次修改完代码保存后,需要先关闭手机App,然后hbx重启项目,再打开手机app。(后面HBX会修复此问题)
具体怎么操作可以看下这篇博文–《Java接入苹果支付 – IAP支付 – IOS应用内支付- 完整版》
成功获取到productId之后,就在代码中填入:
在这里插入图片描述

然后就可以选择自定义基座的方式去运行测试了。
如果苹果内购的支付弹窗出不来,然后控制台报错了,可能是ios内购支付漏单重试这里的请求服务端回调这里出错了,我们可以先注释掉。
在这里插入图片描述
如果还有别的报错,再去看控制台提示的或者手机弹窗的进行整改。一般是以下几个错:
在这里插入图片描述
配置回调url(这个可以不配,因为我们后面自己接入的时候,要调用自己写的请求服务端验证回调),在这里配置是为了让示例项目稳定运行起来。
在这里插入图片描述
最好就注释掉这里
在这里插入图片描述
把最终的url拼接,保证运行不出错
在这里插入图片描述
运行成功弹出这个内购的时候,就可以用注册的沙箱账号去测试支付了。
在这里插入图片描述
但是沙箱账号同一个产品id只能买一次,需要再测试就要清除历史购买记录才行。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(10)怎么接入自己的项目?

①导入插件到自己的项目,关联云空间,我选的是阿里云的。直接确认合并项目。
在这里插入图片描述
如果没有云空间要自己创建
在这里插入图片描述
创建之后才能关联
在这里插入图片描述

在这里插入图片描述
然后就可以根据我上面的1-9的步骤照着做。
这样就可以了。

(11)在哪里加自己的回调?怎么弄

在这里插入图片描述
把这个verifyReceiptFromAppleiap改成自己写的
在这里插入图片描述
最后真正上线的时候记得修改
uniCloud/cloudfunctions/common/uni-config-center/uni-pay/config.js
在这里插入图片描述
改成false

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/143806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE-Spring(Spring中的五大类注解,@Bean注解,对象装配(@Autowired,@Resource),Bean对象在Spring中的作用域)

文章目录1. 配置扫描路径2. Spring五大类注解3. Spring Bean注解对象装配4. Bean对象在Spring中的作用域5. Bean生命周期1. 配置扫描路径 只有设置了扫描路径&#xff0c;其他的路径下注解不会被Spring扫描 这里设置路径为com.beans下 <?xml version"1.0" enc…

(七)devops持续集成开发——jenkins流水线发布一个node环境下的前端vue项目

前言 在前面的章节中已经介绍了jenkins集成前端流水化部署环境的内容&#xff0c;本节内容是关于前端项目的流水化部署发布&#xff0c;通过实操发布一个前端项目&#xff0c;从而完成前端项目的流水化发布。前端项目主要是静态资源的发布&#xff0c;这里我们以一个vue项目为…

智慧物流信息化供应链管理体系转型发展现状

现如今&#xff0c;伴随着时代的迅速发展和高新科技水准的持续提升&#xff0c;人们慢慢进入了信息时代。在其中&#xff0c;物流制造行业也从以往20年前的粗放型管理机制慢慢变化为信息化、智慧化的管理机制。 5G、云计算技术、AI、物联网等新技术的出现加快了各个领域经营方法…

k线图中的三条线是什么?

新手投资朋友可能会在行情软件中发现&#xff0c;图表中除了K线以外&#xff0c;其下方还有三条颜色不一样的曲线&#xff0c;到底这三条线有什么功能呢&#xff1f;它们的使用方法又是怎样的呢&#xff1f; 其实&#xff0c;这三条线分别是短、中、长周期移动平均线&#xff0…

界面控件DevExpress WinForm——属于WinForm组件的MVVM框架

DevExpress WinForm拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜任…

谷粒学院——Day17【数据同步工具、SpringCloud【GateWay网关】、权限管理功能(接口)】

❤ 作者主页&#xff1a;Java技术一点通的博客 ❀ 个人介绍&#xff1a;大家好&#xff0c;我是Java技术一点通&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 记得关注、点赞、收藏、评论⭐️⭐️⭐️ &#x1f4e3; 认真学习&#xff0c;共同进步&#xff01;&am…

sql调优

一、MySQL架构总览&#xff1a; 三、SQL解析顺序 SELECT DISTINCT< select_list > FROM< left_table > < join_type > JOIN < right_table > ON < join_condition > WHERE< where_condition > GROUP BY< group_by_list > HAVING<…

振弦采集模块的频率值与温度值的修正

振弦采集模块的频率值与温度值的修正 此功能在 SF3.51 版本时增加。 固件版本 V3.51 修改固件版本号为 V3.51_2200827。 增加了频率和温度的多项式修正参数和对应指令。 $STFP、 $GTFP、 $STTP、 $GTTP 增加了 FFT 频幅数据输出功能。设置 ATSD_SEL.[5]为 1。 修正了 VM608 采集…

java实现的非关系型数据库:nosqldb

nosqldb一、nosqldb介绍二、nosqldb功能介绍三、数据存储结构介绍1. 数据文件存储结构(data.nosqldb)2.索引文件存储结构(index.mbdb)三、优化点1. 不支持连表查询2. 不支持分片存储3. 碎片整理一、nosqldb介绍 github地址 https://github.com/MaBo2420935619/nosqldb nosqld…

2022年终总结2023年计划

目录 前言&#xff1a; 2022年总结&#xff1a; 工作上&#xff1a; 生活上&#xff1a; 2023年规划&#xff1a; 工作上&#xff1a; 生活上&#xff1a; 前言&#xff1a; 嗨&#xff0c;不知不觉一年又过去了&#xff0c;2022已经结束了&#xff0c;我们迎来了2023。…

c++ -- STL容器--list容器

7. list容器7.1 简介① 功能&#xff1a;将数据进行链式存储。② 链表(list)是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的。③ 链表的组成&#xff1a;链表由一系列结点组成。④ 结点的组成&#xff1a;一个是存储数据元素…

serverless论文总结

1.Benchmarking, Analysis, and Optimization of Serverless Function Snapshots https://zhuanlan.zhihu.com/p/572288442 这项工作引入了vHive&#xff0c;一个针对无服务器实验的开源框架&#xff0c;它使系统研究人员能够在整个无服务器堆栈中进行创新。vHive集成了来自领…

ITSM | 权威指南发布,高速IT服务管理团队是什么样子的?

当Netflix正在打造流媒体平台时&#xff0c;还有人在营业厅里为一张网卡而烦恼。当Craig Newmark创建免费分类广告网站时&#xff0c;报社的网络管理员最关心的还是重启电子邮件服务器。当数字化转型成为一道必答题&#xff0c;谁能率先给出解题之法&#xff1f; 阅读本篇文章&…

Input子系统

文章目录前言Input子系统简介Input子系统代码实现框架Linux Input子系统支持的数据类型input核心层设备驱动层input_allocate_device 与 函数input_set_capabilityinput_register_device 函数input_unregister_device 与 input_free_device 函数事件处理层input_attach_handler…

A. Divide and Conquer

An array bb is good if the sum of elements of bb is even. You are given an array aa consisting of nn positive integers. In one operation, you can select an index ii and change ai:⌊ai2⌋ai:⌊ai2⌋. †† Find the minimum number of operations (possibly 00)…

ArcGIS 切片问题小结

1. 如果发布的切片缓存服务没有自动启动怎么办&#xff1f; 在进行切片时偶然情况下可能会遇到&#xff0c;你在切片时已经设置了server自动进行切片处理&#xff0c;但是在服务发布后&#xff0c;服务发布成功&#xff0c;但是服务没有成功启动&#xff0c;导致服务器没有自动…

免费数据恢复方法有哪些?分享这几种简单又实用的恢复方法(2023年最新)

很多时候&#xff0c;我们使用电脑总是容易误删一些数据。比如使用电脑&#xff0c;误删了办公资料&#xff1b;使用SD卡&#xff0c;出现照片没有办法打开的情况&#xff1b;使用移动硬盘&#xff0c;出现文档误格式化等问题。 不必要的数据被删除那就没问题&#xff0c;如果…

Java反序列化—Fastjson基础

0x01 前言 最近摆烂了很久&#xff0c;来学习一下fastjson 0x02 Fastjson 简介 Fastjson 是 Alibaba 开发的 Java 语言编写的高性能 JSON 库&#xff0c;用于将数据在 JSON 和 Java Object 之间互相转换。 提供两个主要接口来分别实现序列化和反序列化操作。 JSON.toJSONStr…

socket应用之从电脑发送图片到手机(1)之通信过程建立

本人曾经做了一个基于MPVd的C#开发的播放器&#xff0c;用于自娱自乐&#xff0c;后来又用websocket 写了个简单的远程控制器。由于websocket 要依赖于浏览器&#xff0c;因此有诸多不便&#xff0c;后来又用flutter写了一个&#xff0c;方便多了。 下面介绍具体实现。 1、通信…

RabbitMQ 消息持久化

RabbitMQ 消息持久化 持久化是为提高rabbitmq消息的可靠性&#xff0c;防止在异常情况(重启&#xff0c;关闭&#xff0c;宕机)下数据的丢失。设置完队列和消息的持久化&#xff0c;并不能完全保证消息不会丢失。尽管它告诉 RabbitMQ 将消息保存到磁盘&#xff0c;但当 Rabbit…