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

更新 virtualPayment 页面示例,支持通过virtualPaymentContext对象调用api。

上级 15742c6c
<template> <template>
<!-- #ifdef APP --> <!-- #ifdef APP -->
<scroll-view style="flex: 1;"> <scroll-view style="flex: 1;">
<!-- #endif --> <!-- #endif -->
<page-head title="苹果内购支付"></page-head> <page-head title="苹果内购支付"></page-head>
<view style="padding-left: 20px; padding-right: 20px;"> <view style="padding-left: 20px; padding-right: 20px;">
<text> <text>
requestVirtualPayment api 适用于消耗性类型、非消耗性类型、自动续期订阅类型、非自动续期订阅类型产品的购买。\n\n requestVirtualPayment api 适用于消耗性类型、非消耗性类型、自动续期订阅类型、非自动续期订阅类型产品的购买。\n\n
1. 消耗性类型:该类型的产品可以设置购买数量,默认是1,最大值是10; \n 1. 消耗性类型:该类型的产品可以设置购买数量,默认是1,最大值是10; \n
2. 非消耗性类型、自动续期订阅类型、非自动续期订阅类型: 这些类型的产品购买数量设置无效,数量只能是1。 2. 非消耗性类型、自动续期订阅类型、非自动续期订阅类型: 这些类型的产品购买数量设置无效,数量只能是1; \n
</text> 3. 非消耗性类型:该类型产品一个appleId只能购买一次,可以在任何登陆该appleId账号的设备上restore获取。
<button style="margin-top: 20px;" type="primary" v-for="(item,index) in productList" :key="index" </text>
@click="requestVirtualPayment(item)">{{item.name}}</button> <button style="margin-top: 20px;" type="primary" v-for="(item,index) in productList" :key="index"
@click="requestVirtualPayment(item)">{{item.name}}</button>
<text>
\nrestoreCompletedTransactions api 适用于非消耗性类型、自动续期订阅类型、非自动续期订阅类型产品的购买。\n\n <text>
1. 非消耗性类型: 返回每个已购买的非消耗性类型产品的购买记录;\n \nrestoreCompletedTransactions api 适用于非消耗性类型、自动续期订阅类型、非自动续期订阅类型产品的购买。\n\n
2. 自动续期订阅类型: 返回每个已购买的自动续期订阅类型产品的最新购买记录,沙盒账号最多可自动续订 12 次;\n 1. 非消耗性类型: 返回每个已购买的非消耗性类型产品的购买记录;\n
3. 非自动续期订阅类型: 返回每个已购买的非自动续期订阅类型产品的最新购买记录, 该类型订阅可以连续多次购买,开发者需要自己的后台计算产品过期的时间。\n 2. 自动续期订阅类型: 返回每个已购买的自动续期订阅类型产品的最新购买记录,沙盒账号最多可自动续订 12 次;\n
Note: 不能用来恢复消耗性类型的购买记录。 3. 非自动续期订阅类型: 返回每个已购买的非自动续期订阅类型产品的最新购买记录, 该类型订阅可以连续多次购买,开发者需要自己的后台计算产品过期的时间。\n
</text> Note: 不能用来恢复消耗性类型的购买记录。
<button style="margin-top: 20px;" type="primary" @click="restoreCompletedTransactions">恢复购买订单列表</button> </text>
<button style="margin-top: 20px;" type="primary" @click="restoreCompletedTransactions">恢复购买订单列表</button>
<text>
\ngetUnfinishedTransactions api 适用于获取未完成的各种类型产品的购买记录(用来防止丢单)。\n\n <text>
1. 比如用户点击购买已经付款成功,但因网络、手机没电关机等特殊情况,Apple IAP \ngetUnfinishedTransactions api 适用于获取未完成的各种类型产品的购买记录(用来防止丢单)。\n\n
没有返回客户端对应的购买凭证,从而导致无法finish该交易导致的丢单,可以在需要的地方调用该api获得此类未finished的交易记录; \n 1. 比如用户点击购买已经付款成功,但因网络、手机没电关机等特殊情况,Apple IAP
2. 针对消耗性类型产品交易,只能通过该api获取未finished的交易,防止丢单;\n 没有返回客户端对应的购买凭证,从而导致无法finish该交易导致的丢单,可以在需要的地方调用该api获得此类未finished的交易记录; \n
3. 对于其他类型产品未finished交易, 不仅可以通过该api获取,也可以通过restoreCompletedTransactions api (也可获取已经finished的交易)获取; 2. 针对消耗性类型产品交易,只能通过该api获取未finished的交易,防止丢单;\n
</text> 3. 对于其他类型产品未finished交易, 不仅可以通过该api获取,也可以通过restoreCompletedTransactions api (也可获取已经finished的交易)获取;
<button style="margin-top: 20px; margin-bottom: 50px;" type="primary" </text>
@click="getUnfinishedTransactions">获取未结束的订单列表</button> <button style="margin-top: 20px; margin-bottom: 50px;" type="primary"
</view> @click="getUnfinishedTransactions">获取未结束的订单列表</button>
<!-- #ifdef APP --> </view>
</scroll-view> <!-- #ifdef APP -->
<!-- #endif --> </scroll-view>
<!-- #endif -->
</template> </template>
...@@ -42,85 +43,91 @@ ...@@ -42,85 +43,91 @@
export default { export default {
data() { data() {
return { return {
productList: [] as PayItem[] productList: [] as PayItem[],
virtualPaymentContext: Object
} }
}, },
onLoad: function () { onLoad: function () {
this.productList.push({ this.virtualPaymentContext = uni.createVirtualPaymentContext()
name: '消耗性产品:个人赞助1元,购买数量=5', this.initProductList()
id: this.isDebug() ? "uniappx.consumable.sponsor_1" : "uniappx.consumable.sponsor1",
quantity: 5
} as PayItem);
this.productList.push({
name: '消耗性产品:金牌赞助50元',
id: this.isDebug() ? "uniappx.consumable.sponsor_50" : "uniappx.consumable.sponsor50",
quantity: 1
} as PayItem);
this.productList.push({
name: '非消耗性产品: 赞助特效1元',
id: this.isDebug() ? "uniappx.nonconsumable.sponsorskin_1" : "uniappx.nonconsumable.sponsorskin1"
} as PayItem);
this.productList.push({
name: '自动续期订阅产品:每月定期赞助1元',
id: this.isDebug() ? "uniappx.autorenewable.monthly_1" : "uniappx.autorenewable.monthly1"
} as PayItem);
this.productList.push({
name: '非自动续期订阅产品:月赞助1元',
id: this.isDebug() ? "uniappx.nonrenewable.monthly_1" : "uniappx.nonrenewable.monthly1"
} as PayItem);
this.productList.push({
name: '测试不存在的产品',
id: "uniappx.nonrenewable.none"
} as PayItem);
}, },
methods: { methods: {
getPackageName() : string { initProductList() {
const res = uni.getAppBaseInfo(); this.productList.push({
let packageName : string = "" name: '消耗性产品:个人赞助1元, 数量=5',
id: this.isDebug() ? "uniappx.consumable.sponsor_1" : "uniappx.consumable.sponsor1",
// #ifdef APP-ANDROID quantity: 5
packageName = res.packageName } as PayItem);
// #endif
this.productList.push({
// #ifdef APP-IOS name: '消耗性产品:金牌赞助50元',
packageName = res.bundleId id: this.isDebug() ? "uniappx.consumable.sponsor_50" : "uniappx.consumable.sponsor50",
// #endif quantity: 1
} as PayItem);
return packageName
}, this.productList.push({
isDebug() : boolean { name: '非消耗性产品: 赞助特效1元',
if (this.getPackageName() == 'io.dcloud.uniappx') { id: this.isDebug() ? "uniappx.nonconsumable.sponsorskin_1" : "uniappx.nonconsumable.sponsorskin1"
return true } as PayItem);
}
return false this.productList.push({
}, name: '自动续期订阅产品:每月定期赞助1元',
isProd() : boolean { id: this.isDebug() ? "uniappx.autorenewable.monthly_1" : "uniappx.autorenewable.monthly1"
if (this.getPackageName() == 'io.dcloud.hellouniappx') { } as PayItem);
return true
} this.productList.push({
return false name: '非自动续期订阅产品:月赞助1元',
}, id: this.isDebug() ? "uniappx.nonrenewable.monthly_1" : "uniappx.nonrenewable.monthly1"
isCustom() : boolean { } as PayItem);
if (this.isDebug() == false && this.isProd() == false) {
return true this.productList.push({
} name: '测试不存在的产品',
return false id: "uniappx.nonrenewable.none"
} as PayItem);
},
getPackageName() : string {
const res = uni.getAppBaseInfo();
let packageName : string = ""
// #ifdef APP-ANDROID
packageName = res.packageName
// #endif
// #ifdef APP-IOS
packageName = res.bundleId
// #endif
return packageName
},
isDebug() : boolean {
if (this.getPackageName() == 'io.dcloud.uniappx') {
return true
}
return false
},
isProd() : boolean {
if (this.getPackageName() == 'io.dcloud.hellouniappx') {
return true
}
return false
},
isCustom() : boolean {
if (this.isDebug() == false && this.isProd() == false) {
return true
}
return false
}, },
requestVirtualPayment(e : PayItem) { requestVirtualPayment(e : PayItem) {
uni.showLoading({ uni.showLoading({
title: "", title: "",
mask: true mask: true
}); });
uni.requestVirtualPayment({ uni.requestVirtualPayment({
apple: { apple: {
productId: e.id, productId: e.id,
appAccountToken: "orderId+accountId", appAccountToken: "orderId+accountId",
quantity: e.quantity ?? 1 quantity: e.quantity ?? 1,
}, },
success: (res) => { success: (res) => {
uni.hideLoading() uni.hideLoading()
...@@ -128,7 +135,7 @@ ...@@ -128,7 +135,7 @@
//TODO: 开发者server验证逻辑 //TODO: 开发者server验证逻辑
//经过开发者server验证成功后请结束该交易 //经过开发者server验证成功后请结束该交易
uni.finishedTransaction({ this.virtualPaymentContext.finishTransaction({
transaction: res.apple, transaction: res.apple,
success: (r) => { success: (r) => {
console.log("关单成功, 该productId= " + res.apple?.payment.productId) console.log("关单成功, 该productId= " + res.apple?.payment.productId)
...@@ -157,7 +164,8 @@ ...@@ -157,7 +164,8 @@
title: "", title: "",
mask: true mask: true
}); });
uni.restoreCompletedTransactions({
this.virtualPaymentContext.restoreCompletedTransactions({
success: (res) => { success: (res) => {
uni.hideLoading() uni.hideLoading()
console.log("restore成功的交易个数:" + res.transactions.length) console.log("restore成功的交易个数:" + res.transactions.length)
...@@ -187,16 +195,18 @@ ...@@ -187,16 +195,18 @@
title: "", title: "",
mask: true mask: true
}); });
uni.getUnfinishedTransactions({
this.virtualPaymentContext.getUnfinishedTransactions({
success: (res) => { success: (res) => {
uni.hideLoading() uni.hideLoading()
console.log("获取未结束的订单列表个数:" + res.transactions.length) console.log("获取未结束的订单列表个数:" + res.transactions.length)
res.transactions.forEach(transaction => { res.transactions.forEach(transaction => {
console.log("getUnfinishedTransactions成功的交易productId= " + transaction.payment.productId)
//TODO: 开发者server验证逻辑 //TODO: 开发者server验证逻辑
//经过开发者server验证成功后请结束该交易 //经过开发者server验证成功后请结束该交易
uni.finishedTransaction({ this.virtualPaymentContext.finishTransaction({
transaction: transaction, transaction: transaction,
success: (r) => { success: (r) => {
console.log("关单成功, 该productId= " + transaction.payment.productId) console.log("关单成功, 该productId= " + transaction.payment.productId)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册