提交 0f96983c 编写于 作者: zhaofengliang920817's avatar zhaofengliang920817

调整 virtualPayment 示例,规避 Apple Store 审核 失败的问题。

上级 6ba98427
<template> <template>
<view class="content"> <view class="content">
<view class="uni-list"> <view class="uni-list">
<radio-group @change="applePriceChange"> <radio-group @change="applePriceChange">
<view class="uni-list-cell" v-for="(item, index) in productList" :key="index"> <view class="uni-list-cell" v-for="(item, index) in productList" :key="index">
<radio :value="item['product_id']" :checked="product_id == item['product_id']"/> <radio :value="item['product_id']" :checked="product_id == item['product_id']" />
<view class="price" @click="applePriceClick(item)">{{item['title']}} {{item['goods_price']}}元</view> <view class="price" @click="applePriceClick(item)">{{item['title']}} {{item['goods_price']}}元</view>
</view> </view>
</radio-group> </radio-group>
</view> </view>
<view class="uni-padding-wrap"> <view class="uni-padding-wrap">
<button class="button btn-pay" @click="createOrder" :loading="loading" :disabled="disabled">立即支付</button> <button class="button btn-pay" @click="createOrder" :loading="loading" :disabled="disabled">立即支付</button>
</view> </view>
<!-- 统一支付组件 --> <!-- 统一支付组件 -->
<uni-pay ref="payRef" :debug="true" :adpid="adpid" return-url="/pages/API/request-payment/request-payment/order-detail" @mounted="onMounted" @success="onSuccess" @fail="onFail" @cancel="onCancel"></uni-pay> <uni-pay ref="payRef" :debug="true" :adpid="adpid"
</view> return-url="/pages/API/request-payment/request-payment/order-detail" @mounted="onMounted" @success="onSuccess"
</template> @fail="onFail" @cancel="onCancel"></uni-pay>
</view>
<script> </template>
export default {
data() { <script>
return { export default {
order_no: "", // 业务系统订单号(即你自己业务系统的订单表的订单号) data() {
out_trade_no: "", // 插件支付单号 return {
adpid: "1000000001", // uni-ad的广告位id order_no: "", // 业务系统订单号(即你自己业务系统的订单表的订单号)
out_trade_no: "", // 插件支付单号
loading: false, // 支付按钮是否在loading中 adpid: "1000000001", // uni-ad的广告位id
disabled: true, // 支付按钮是否禁用
product_id: "", // 用户选择的商品id loading: false, // 支付按钮是否在loading中
// 出售的苹果虚拟商品列表 disabled: true, // 支付按钮是否禁用
productList: [ product_id: "" // 用户选择的商品id
{ }
"description": "为DCloud提供的免费软件进行赞助", },
"goods_price": 1, // 单价(元) onLoad: function () {
"buy_quantity": 1, // 数量(消耗性类型: 数量默认是1,最大值是10)
"product_id": "uniappx.consumable.sponsor_1", },
"title": "消耗性产品:赞助" onShow() {
},
{ },
"description": "为DCloud提供的免费软件进行赞助", onUnload() { },
"goods_price": 5, // 单价(元) computed: {
"buy_quantity": 1, // 数量(消耗性类型: 数量默认是1,最大值是10) // 出售的苹果虚拟商品列表
"product_id": "uniappx.consumable.sponsor_50", productList() {
"title": "消耗性产品:赞助" return [
}, {
{ "description": "为DCloud提供的免费软件进行赞助",
"description": "为DCloud提供的免费软件进行赞助", "goods_price": 1, // 单价(元)
"goods_price": 1, // 单价(元) "buy_quantity": 1, // 数量(消耗性类型: 数量默认是1,最大值是10)
"buy_quantity": 1, // 数量(非消耗性: 数量只能是1,且一个该类型产品一个appleId只能购买一次) "product_id": this.isDebug() ? "uniappx.consumable.sponsor_1" : "uniappx.consumable.sponsor1",
"product_id": "uniappx.nonconsumable.sponsorskin_1", "title": "消耗性产品:赞助"
"title": "非消耗性产品: 赞助" },
}, {
{ "description": "为DCloud提供的免费软件进行赞助",
"description": "为DCloud提供的免费软件进行赞助", "goods_price": 5, // 单价(元)
"goods_price": 1, // 单价(元) "buy_quantity": 1, // 数量(消耗性类型: 数量默认是1,最大值是10)
"buy_quantity": 1, // 数量(自动续期订阅产品: 数量只能是1) "product_id": this.isDebug() ? "uniappx.consumable.sponsor_50" : "uniappx.consumable.sponsor50",
"product_id": "uniappx.autorenewable.monthly_1", "title": "消耗性产品:赞助"
"title": "自动续期订阅产品:每月定期赞助", // 注意自动续期订阅产品在沙盒模式下,实际周期会缩短到几分钟续期一次(即现实世界几分钟 = 沙盒世界1个月) },
}, {
{ "description": "为DCloud提供的免费软件进行赞助",
"description": "为DCloud提供的免费软件进行赞助", "goods_price": 1, // 单价(元)
"goods_price": 1, // 单价(元) "buy_quantity": 1, // 数量(非消耗性: 数量只能是1,且一个该类型产品一个appleId只能购买一次)
"buy_quantity": 1, // 数量(非自动续期订阅产品: 数量只能是1) "product_id": this.isDebug() ? "uniappx.nonconsumable.sponsorskin_1" : "uniappx.nonconsumable.sponsorskin1",
"product_id": "uniappx.nonrenewable.monthly_1", "title": "非消耗性产品: 赞助"
"title": "非自动续期订阅产品:月赞助", },
}, // {
{ // "description": "为DCloud提供的免费软件进行赞助",
"description": "为DCloud提供的免费软件进行赞助", // "goods_price": 1, // 单价(元)
"goods_price": 1, // 单价(元) // "buy_quantity": 1, // 数量(自动续期订阅产品: 数量只能是1)
"buy_quantity": 1, // 数量 // "product_id": this.isDebug() ? "uniappx.autorenewable.monthly_1" : "uniappx.autorenewable.monthly1",
"product_id": "uniappx.nonrenewable.none", // "title": "自动续期订阅产品:每月定期赞助", // 注意自动续期订阅产品在沙盒模式下,实际周期会缩短到几分钟续期一次(即现实世界几分钟 = 沙盒世界1个月)
"title": "测试不存在的产品" // },
} {
] as Array<UTSJSONObject>, "description": "为DCloud提供的免费软件进行赞助",
} "goods_price": 1, // 单价(元)
}, "buy_quantity": 1, // 数量(非自动续期订阅产品: 数量只能是1)
onLoad: function() { "product_id": this.isDebug() ? "uniappx.nonrenewable.monthly_1" : "uniappx.nonrenewable.monthly1",
"title": "非自动续期订阅产品:月赞助",
}, },
onShow() { // {
// "description": "为DCloud提供的免费软件进行赞助",
}, // "goods_price": 1, // 单价(元)
onUnload() {}, // "buy_quantity": 1, // 数量
methods: { // "product_id": "uniappx.nonrenewable.none",
// 支付组件加载完毕后执行 // "title": "测试不存在的产品"
onMounted(insideData: any){ // }
this.init(); ] as Array<UTSJSONObject>
}, }
// 初始化 },
init() { methods: {
this.product_id = this.productList[0]["product_id"] as string; // 支付组件加载完毕后执行
this.disabled = false; onMounted(insideData : any) {
let payRef = this.$refs['payRef'] as UniPayComponentPublicInstance; this.init();
// 苹果虚拟支付未完成订单检测 },
payRef.appleiapRestore(); // 初始化
}, init() {
/** this.product_id = this.productList[0]["product_id"] as string;
* 发起支付 this.disabled = false;
* 在调用此api前,你应该先创建自己的业务系统订单,并获得订单号 order_no,把order_no当参数传给此api,而示例中为了简化跟支付插件无关的代码,这里直接已时间戳生成了order_no let payRef = this.$refs['payRef'] as UniPayComponentPublicInstance;
*/ // 苹果虚拟支付未完成订单检测
createOrder(){ payRef.appleiapRestore();
this.order_no = `test`+Date.now(); },
this.out_trade_no = this.order_no; /**
let productInfo: UTSJSONObject = this.productList.find((item: UTSJSONObject) : boolean => { * 发起支付
return item['product_id'] == this.product_id; * 在调用此api前,你应该先创建自己的业务系统订单,并获得订单号 order_no,把order_no当参数传给此api,而示例中为了简化跟支付插件无关的代码,这里直接已时间戳生成了order_no
}); */
let buy_quantity = productInfo.getNumber('buy_quantity') || 1; createOrder() {
let goods_price = productInfo.getNumber('goods_price'); this.order_no = `test` + Date.now();
// 发起支付 this.out_trade_no = this.order_no;
this.$refs.payRef.createOrder({ let productInfo : UTSJSONObject = this.productList.find((item : UTSJSONObject) : boolean => {
provider: "appleiap", // 支付供应商(这里固定为appleiap,代表苹果虚拟支付) return item['product_id'] == this.product_id;
order_no: this.order_no, // 业务系统订单号(即你自己业务系统的订单表的订单号) });
out_trade_no: this.out_trade_no, // 插件支付单号 let buy_quantity = productInfo.getNumber('buy_quantity') || 1;
type: "appleiap", // 支付回调类型(可自定义,建议填写appleiap) let goods_price = productInfo.getNumber('goods_price');
description: productInfo.description, // 发起支付
total_fee: parseInt((goods_price * 100 * buy_quantity).toFixed(0)), // 插件是以分为单位,故这里需要乘以100 this.$refs.payRef.createOrder({
// apple_virtual字段仅苹果虚拟支付生效 provider: "appleiap", // 支付供应商(这里固定为appleiap,代表苹果虚拟支付)
apple_virtual: { order_no: this.order_no, // 业务系统订单号(即你自己业务系统的订单表的订单号)
product_id: this.product_id, // 产品id out_trade_no: this.out_trade_no, // 插件支付单号
goods_price: goods_price, // 单价 type: "appleiap", // 支付回调类型(可自定义,建议填写appleiap)
buy_quantity: buy_quantity, // 购买数量 description: productInfo.description,
}, total_fee: parseInt((goods_price * 100 * buy_quantity).toFixed(0)), // 插件是以分为单位,故这里需要乘以100
// 自定义数据 // apple_virtual字段仅苹果虚拟支付生效
custom: {} apple_virtual: {
}); product_id: this.product_id, // 产品id
}, goods_price: goods_price, // 单价
// 监听事件 - 支付成功 buy_quantity: buy_quantity, // 购买数量
onSuccess(res){ },
console.log('success: ', res); // 自定义数据
if (res.user_order_success) { custom: {}
// 代表用户已付款,且你自己写的回调成功并正确执行了 });
},
} else { // 监听事件 - 支付成功
// 代表用户已付款,但你自己写的回调执行失败(通常是因为你的回调代码有问题) onSuccess(res) {
console.log('success: ', res);
} if (res.user_order_success) {
}, // 代表用户已付款,且你自己写的回调成功并正确执行了
onFail(err){ } else {
uni.showModal({ // 代表用户已付款,但你自己写的回调执行失败(通常是因为你的回调代码有问题)
content: `${err.errSubject} : ${err.errCode} : ${err.errMsg}`,
showCancel: false, }
title: `发起支付失败`, },
});
}, onFail(err) {
uni.showModal({
onCancel(err){ content: `${err.errSubject} : ${err.errCode} : ${err.errMsg}`,
uni.showToast({ showCancel: false,
title: "用户取消了支付", title: `发起支付失败`,
icon: 'none' });
}); },
},
onCancel(err) {
// 监听-多选框选中的值改变 uni.showToast({
applePriceChange(e) { title: "用户取消了支付",
this.product_id = e.detail.value; icon: 'none'
}, });
applePriceClick(item: any){ },
this.product_id = item['product_id'] as string;
} // 监听-多选框选中的值改变
} applePriceChange(e) {
} this.product_id = e.detail.value;
</script> },
applePriceClick(item : any) {
<style> this.product_id = item['product_id'] as string;
.content { },
padding: 15px; getPackageName() : string {
} const res = uni.getAppBaseInfo();
let packageName : string = ""
.button {
background-color: #007aff; // #ifdef APP-ANDROID
color: #ffffff; packageName = res.packageName
} // #endif
.uni-list-cell { // #ifdef APP-IOS
display: flex; packageName = res.bundleId
flex-direction: row; // #endif
align-items: center;
padding: 10px; return packageName
border-bottom: 1px solid #eee; },
} isDebug() : boolean {
if (this.getPackageName() == 'io.dcloud.uniappx') {
.price { return true
margin-left: 10px; }
} return false
}
.btn-pay { }
margin-top: 30px; }
} </script>
<style>
.content {
padding: 15px;
}
.button {
background-color: #007aff;
color: #ffffff;
}
.uni-list-cell {
display: flex;
flex-direction: row;
align-items: center;
padding: 10px;
border-bottom: 1px solid #eee;
}
.price {
margin-left: 10px;
}
.btn-pay {
margin-top: 30px;
}
</style> </style>
...@@ -69,16 +69,21 @@ ...@@ -69,16 +69,21 @@
name: '非消耗性产品: 赞助特效1元', name: '非消耗性产品: 赞助特效1元',
id: this.isDebug() ? "uniappx.nonconsumable.sponsorskin_1" : "uniappx.nonconsumable.sponsorskin1" id: this.isDebug() ? "uniappx.nonconsumable.sponsorskin_1" : "uniappx.nonconsumable.sponsorskin1"
} as PayItem); } as PayItem);
// this.productList.push({
// name: '自动续期订阅产品:每月定期赞助1元',
// id: this.isDebug() ? "uniappx.autorenewable.monthly_1" : "uniappx.autorenewable.monthly1"
// } as PayItem);
this.productList.push({ this.productList.push({
name: '非自动续期订阅产品:月赞助1元', name: '非自动续期订阅产品:月赞助1元',
id: this.isDebug() ? "uniappx.nonrenewable.monthly_1" : "uniappx.nonrenewable.monthly1" id: this.isDebug() ? "uniappx.nonrenewable.monthly_1" : "uniappx.nonrenewable.monthly1"
} as PayItem); } as PayItem);
this.productList.push({ // this.productList.push({
name: '测试不存在的产品', // name: '测试不存在的产品',
id: "uniappx.nonrenewable.none" // id: "uniappx.nonrenewable.none"
} as PayItem); // } as PayItem);
}, },
getPackageName() : string { getPackageName() : string {
const res = uni.getAppBaseInfo(); const res = uni.getAppBaseInfo();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册