uniapp-ios支付

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

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

一. 去苹果开发者后台把支付勾上.
地址:Apple Developer

二.去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处于有效状态.

四.支付相关的代码

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

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

<template>
	<view>
		
		
		<button class="subPay" @click="subPaynow"> 立即充值</button>
		
					
	</view>
	
	
</template>

<script>
	import { mapState } from 'vuex'
	
	export default {
		data() {
			return {	
			
			
			
			
			iapChannel: null,
			productId: '1718558086069075970', //默认苹果内购商品id 要提前在app store connect 配置 要支付的商品的标识(必须是调用uni.requestPayment返回的有效的商品标识)
			
			orderNo:'1252555222512',//订单号
			quantity:1,//产品数量
		
			channel:''		
					
			}
		},
		
		
		
		
		onLoad() {  
			
		
			
		},
		
		methods: {
			
			
		subPaynow(){
			
			console.log('支付')
			//苹果内购
			if (!this.productId) {//没有在苹果content上创建APP内购买项目
					uni.showToast({
						title: '苹果内购ID缺失,请选择其它支付方式或联系客服',
						icon: "none"
					});
					return false;
				}
			
				var that = this
			
				uni.showLoading({
					title: '正在支付中...'
				});
			
				try {
					plus.payment.getChannels(function(channels) {//判读项目支付通道开通情况
						
							for (var i in channels) {
			
								var channel = channels[i];
								
								// 获取 id 为 'appleiap' 的 channel  
								// console.info("支付通道", channel)
			
								if (channel.id === 'appleiap') {//开通了app应用内支付,在manifest.josn中设置,开通后需打自定议基座
									// console.info("苹果支付通道", channel)
			
									that.channel = channel
									// ids 数组中的项为 App Store Connect 配置的内购买项目产品ID(productId)
									var ids = [that.productId];
									// iap 为应用内支付对象 
									channel.requestOrder(ids, function(e) {
											// 获取订单信息成功回调方法  
											console.log('requestOrder success: ' + JSON.stringify(e));
											console.log('username ', that.orderNo);
			
											// 
											that.transaction = uni.requestPayment({
												provider: 'appleiap',
												orderInfo: {
													productid: that.productId,//产品id,来自于苹果
													username: that.orderNo,//订单号
													quantity: that.quantity,//产品数量
													manualFinishTransaction: true
												},
												success: (e) => {
													uni.hideLoading();
													console.info("苹果内购成功", e)
			
													e.payment.orderNo = that.orderNo
			
													//支付成功回调,前端调用后台接口
													that.$http
														.post(
															'api/pay/v1/pay_callback_apple',
															e).then(res => {
															
														});
			
													that.finishTransaction()
			
			
												},
												fail: (e) => {
													uni.hideLoading();
													console.info("苹果内购失败", e)
												},
											})
			
			
										},
										function(e) {
											// 获取订单信息失败回调方法  
											console.log('requestOrder failed: ' + JSON.stringify(e));
										});
			
								}
								else{
									console.log('不支持苹果支付')
								}
			
							}
						},
						function(e) {
							console.log("获取iap支付通道失败:" + e.message);
						});
			
				} catch (e) {
					uni.showModal({
						title: "init",
						content: e.message,
						showCancel: false
					});
				} finally {
					uni.hideLoading();
				}
				

		}
		

			
		},
	

		 
		
		
		 	 
		
	}
</script>

<style>
	

	
	.subPay{
		width: 200rpx;
		height: 100rpx;
		padding-top: 100rpx;
		margin:300rpx auto 0 auto;
		background-color: #ff0000;
	}
</style>

注意:此步后一定要打自定义基座

五.添加沙盒测试员

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

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

每个订单 ,第个沙盒测试员只能买一次,买后得换号

邮箱用过以后的,以后也不能用了,只能用新的,不是必须真邮箱,邮箱随便写,密码要记住,买商品时会在设备上弹出用邮箱和密码的。在购买前要在设置上填。

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

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

具体的我也没试,做其他项目了,可以用蒲公英分发测试。

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值