uniapp-ios支付

uniapp安卓包中的微信,支付宝逻辑放在iOS测试包中也能使用.

但询问iOS开发者后得知,有支付相关功能的app要上架苹果,必须先有苹果支付,不然苹果审核不给过.甚至没有支付逻辑,但打包时有支付相关的SDK也不行,苹果会认为你偷偷做了支付逻辑,想要绕开他.

一. 去苹果开发者后台把支付勾上.

地址:Apple Developer

之前没勾,现在勾上之后,可能要重新生成mobileprovision文件.并重新打uniapp测试基座.

二.去appstoreconnect里添加一个app内购项目 

地址: https://appstoreconnect.apple.com/apps/ 

苹果好像不允许随意的价格,有多少商品,就要添加多少内购项目.

产品ID是唯一的,即使把创建的内购项目删了,也不能用之前的产品ID,之后支付的代码里也需要用到这个ID.

销售范围,价格时间表等仅供参考.除了app推广,其他项好像必填.

审核信息一栏上传的图片必须是iPhone手机截图,苹果可能做了图片尺寸的校验.

填写好,点击存储.等待添加的app内购项目的状态变为准备提交即可.挺慢的,等了好几分钟,审核信息栏的图片一直在上传状态,等了几分钟就行了.

还有我的截图第一张和其他张不是一个内购项目的.第一次添加忘截图了,不要误会.

  

三.同意新的协议,添加付费app

运行代码报错:{"message":"Payment_appleiap:返回订单信息失败http://ask.dcloud.net.cn/article/282","code":-100},网上搜索后,了解到要同意付费app的协议,苹果会有一个提示,在appstoreconnect里,因为已经同意了所以现在截不了图.

然后还要根据付费app的要求(点击那个问号),完成协议,提供银行业务和税务信息,这一块让公司运营搞的所以也不清楚。

最终结果就是,付费app处于有效状态.

地址: Agreements, Tax, and Banking

四.支付相关的代码

在模块配置里把苹果支付勾上,之前没勾,现在勾上的,要重新打包.

支付代码:  产品ID就是第二步添加内购项目的产品ID.

			initIAP() {
				let that = this
				plus.payment.getChannels((channels) => {
					console.log(channels);
					for (var i in channels) {
						var channel = channels[i];
						if (channel.id == 'appleiap'){
							console.log("苹果")
							let iap = channel;
							//支付参数
							iap.requestOrder(['产品ID'], function(orderList){
								    //必须调用此方法才能进行 iap 支付 
									console.log('requestOrder success666: ' + JSON.stringify(orderList))
									that.applePay(orderList[0])
								},function(e){
									console.log('requestOrder failed: ' + JSON.stringify(e));
									// console.log('暂不支持苹果 iap 支付')
							});
						}	
					}
				}, function(e) {
					console.log("获取iap支付通道失败:" + e.message);
				});
			},
			applePay(para) {
				console.log(para)
				uni.requestPayment({
					provider: 'appleiap',
					orderInfo: {
						productid: para.productid,
						username: this.currentUserName, // 用户标识
						optimize: true // 设置 optimize: true 解决丢单问题  
					},
					/* 
					orderInfo可传参数一览
					productid: (String 类型 )(必填) 商品的标识,你在苹果那里添加的商品标识 
					username: (String 类型 )(可选) 购买用户名称,我喜欢在这里传入订单号,这样支付成功时就可以获得订单号 
					quantity: (String 类型 )(可选) 商品数量,默认为 "1" 
					optimize:(Boolean)(可选) HX 3.1.10 版本新增参数,解决用户未绑定支付方式造成的丢单问题; 
					*/
					success: (e) => {
						// uni.LTY.loaded();
						console.log(e)
						//这里把参数返回服务器进行二次验证 
						//这里再次验证是否订单真实有效
						uni.request({
							url: 'https://www.example.com/request', //仅为示例,并非真实接口地址。 
							data: {
								parasm: e,
							},
							success: (res) => {
								uni.showModal({
									content: "Success",
									showCancel: false,
								});

								try {
									// 购买成功 更新用户vip时长
									// this.updateUserVip(para);
									// uni.navigateBack();
								} catch (e) {
									//TODO handle the exception

								}
							},
						});
					},
					fail: (e) => {
						console.log(e);
						// uni.LTY.loaded();
						uni.showModal({
							content: "fail: " + e.errMsg,
							showCancel: false,
						})
					},
					complete: () => {
						console.log("payment结束");
						// this.payShow = false;
						// this.payShow2 = false;
					}


				})
			},

五.添加沙盒测试员

运行代码测试,购买成功后,一直提示: 此时你没有权限在sandbox购买此inapp .

解决: 添加沙盒测试员后,再去iPhone的设置=>appstore=>沙盒账户,退出原来的沙盒账户,登录刚刚添加的沙盒测试员账户.

添加沙盒测试员时报错: This email address is not available for use as an Apple ID. You may already have an Apple ID associated with this address. Please try again or sign in using your existing Apple ID.       我理解的意思就是,这个邮箱注册过了,已经被当做apple id了.

要么用一个新的邮箱: 直接注册一个新的邮箱,添加到沙盒测试员就行,我自己的做法,比网上介绍的"解绑"省事多了.

要么"把原来的邮箱解绑": 把这个报错百度一下,很多文章说了一堆,总结起来的意思就是解绑,解绑过程看着就很麻烦,不如用第一种方法.

六.上架遇到的问题

苹果测试员一直用自己的账号测试,但我们的内购项目还没上架成功,他的账号又不在沙盒里,然后一直说我们的支付不能用。想让他用我们的测试号,他也不同意。

网上的说法是,不要直接上架app里的支付,先上架一个版本把内购项目通过,再上架app里的支付功能。

具体的我也没试,做其他项目了

苹果开发者写文章都有点官方文档的感觉, 可以用大白话,非要用云里雾里的说法,图贴的也少.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

编程题库-Python、Java、C++、C 应有尽有!!!

目录 网址注册账号题库 网址 传送门 http://oj.ecustacm.cn/ 这个↑链接是网站 注册账号 刚进去是这个页面 注册一个账号 题库 点击上方的问题菜单,进入题库 点击题目标题进入题目,我就随便点一道 这里面一般会有样例输入和输出以及题目描述 点…

语音识别--光谱门控降噪

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计7267字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

redis 使用记录

redis 使用记录 下载运行配置文件启动 参考 下载 github: Redis for Windows 或者从百度网盘下载 Redis version 3.2.100 链接: https://pan.baidu.com/s/1kxNOuZFunvVhVy1cfQzCDA?pwdpibh 运行 双击运行 运行效果 如果出错:查看是否项目路径是否包含中文 配…

矩阵快速幂

要想知道矩阵快速幂,我们先了解一下什么叫快速幂和矩阵乘法 一、快速幂 快速幂算法是用来快速计算指数表达式的值的,例如 210000000,普通的计算方法 2*2*2*2…10000000次,如果一个数字的计算都要计算那么多次的话,那么这个程序一…

Windows10系统中CANoe字体异常问题解决办法

Windows10系统中CANoe/CANalyzer字体异常问题解决办法 一、问题: 在Windows10中文系统中,CANoe/CANalyzer的一些窗口会显示异常的字体,大部分其他窗口的字体却是正常的? 异常的字体如下: 二、问题说明 CANoe/CANalyzer的开发过程中使用了多种对话框技术。一些对话框使…

SparkSQL与Hive整合 、SparkSQL函数操作

SparkSQL与Hive整合 SparkSQL和Hive的整合,是一种比较常见的关联处理方式,SparkSQL加载Hive中的数据进行业务处理,同时将计算结果落地回Hive中。 整合需要注意的地方 1)需要引入hive的hive-site.xml,添加classpath目录下面即可…

循环链表 -- c语言实现

#pragma once // 带头双向循环链表增删查改实现 #include<stdlib.h> #include<stdio.h> #include<assert.h>typedef int LTDataType;typedef struct ListNode {LTDataType data;struct ListNode* next;struct ListNode* prev; }ListNode;//双链表申请一个新节…

吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.13-1.14

目录 第二门课: 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第一周&#xff1a;深度学习的 实践层面 (Practical aspects of Deep Learning)1.13 梯度检验&#…

图片批量旋转方向怎么弄的?有没有一键批量旋转图片到一定角度的方法

我们在处理很多张图片的时候&#xff0c;有时候需要批量的将这些图片旋转一个角度&#xff0c;比如说我们需要批量向右旋转 30 度&#xff0c;如果我们只需要调整一两张图片的话&#xff0c;我们使用 ps 就可以旋转我们的图片&#xff0c;但是如果我们有很多张图片都需要批量的…

排序算法之希尔排序(缩小增量排序)

希尔排序是插入排序的优化&#xff0c;如果不了解插入排序可以看排序算法之插入排序-CSDN博客这篇博客&#xff0c;希尔排序算法通过对原始数据集使用 gap 分组的方法&#xff0c;先将数据分组进行插入排序&#xff0c;随着排序的进行&#xff0c;逐渐减小 gap 的值&#xff0c…

代码随想录算法训练营DAY44|C++动态规划Part6|完全背包理论基础、518.零钱兑换II、377. 组合总和 Ⅳ

文章目录 完全背包理论基础完全背包问题的定义与01背包的核心区别为什么完全背包的循环顺序可以互换&#xff1f;CPP代码 ⭐️518.零钱兑换II思路CPP代码 ⭐️377. 组合总和 Ⅳ思路CPP代码 扩展题 完全背包理论基础 卡码网第52题 文章链接&#xff1a;完全背包理论基础 视频链接…

【C++】C++11--- 类的新功能

目录 类的新功能 默认成员函数 示例 类成员变量初始化 强制生成默认函数的关键字default 禁止生成默认函数的关键字delete 类的新功能 默认成员函数 构造函数析构函数拷贝构造函数拷贝赋值重载取地址重载const取地址重载 C11在原先的6个默认成员函数的基础上&#xff0c…

PHP基于vscode医院安全不良事件管理系统源码(AEMS)前端vue2+element+后端laravel8不良事件上报与闭环管理

PHP基于vscode医院安全不良事件管理系统源码&#xff08;AEMS&#xff09;前端vue2element后端laravel8不良事件上报与闭环管理 医院不良事件上报与管理系统结合现代医院管理思路&#xff0c;遵照PDCA全面质量循环管理方法而设计&#xff0c;并在多家大型三甲医院成熟运用。系统…

第29章-SR技术概述

1. SR技术的产生背景 2. SR技术的基本概念 3. SR技术的基本原理 1. SR技术的产生背景 1.1 传统的路由器设备因其转发性能较低 ① 最长匹配算法的缺点&#xff0c;需要遍历整个路由表&#xff1b; ② 早期路由器多采用通用CPU进行转发处理&#xff0c;性能有限&#xff1b; ③…

word:三线表的绘制【攻略】

word&#xff1a;三线表的绘制【攻略】 前言版权推荐word&#xff1a;三线表的绘制效果简单方法另外的方法 最后 前言 2024-5-7 18:25:08 以下内容源自《【攻略】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客…

Linux--基础IO(文件描述符fd)

目录 1.回顾一下文件 2.理解文件 下面就是系统调用的文件操作 文件描述符fd&#xff0c;fd的本质是什么&#xff1f; 读写文件与内核级缓存区的关系 据上理论我们就可以知道&#xff1a;open在干什么 3.理解Linux一切皆文件 4.C语言中的FILE* 1.回顾一下文件 先来段代码…

Upload-labs 靶场通关解析(上)

前言 文件上传漏洞是一种常见的网络安全漏洞&#xff0c;存在于许多Web应用程序中。攻击者利用这个漏洞可以上传恶意文件到目标服务器&#xff0c;从而执行各种恶意操作&#xff0c;如执行恶意代码、获取敏感信息、控制服务器等。 文件上传漏洞的原理是&#xff0c;Web应用程…

(✌)粤嵌—2024/5/7—除自身以外数组的乘积

代码实现&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/ int* productExceptSelf(int *nums, int numsSize, int *returnSize) {// 左乘积int l[numsSize];l[0] 1;for (int i 1; i < numsSize; i) {l[i] l[i - 1] * nums[…

PyQt6--Python桌面开发(1.安装配置环境)

一.PyQt6简介 PyQt&#xff1a;PyQt是一个功能强大且成熟的GUI框架&#xff0c;基于Qt库。它提供了丰富的组件、布局和主题选项&#xff0c;以及强大的功能和灵活性。PyQt的优点是它具有现代化的外观和丰富的功能&#xff0c;适用于复杂的GUI应用程序。然而&#xff0c;由于Py…

VMware导入ova/ovf虚拟机文件

1.文件-打开-ova文件 2.为新虚拟机起名称 3.等待导入 4.导入完成&#xff0c;可以开始使用 参考链接&#xff1a;VMware导入ova/ovf虚拟机文件