app ios 苹果内购 的步骤
1,准备工作先要uniapp 开发ios 内购需要准备的沙盒 测试账号,在苹果手机登录沙盒账号 也就是把自己的Apple ID退出登录沙盒账号,manifest.json中APP模块配置勾选 apple应用内支付。在app store connect配置好 苹果内购商品id 。在HBuilderX 运行基座设置成自定义调试基座(需要自己先打一个自定义基座的包,发行->原生APP-云打包->打包类型选为自定义调试基座)
2,开始写 内购的代码
<template>
<view>
<view class="pay-list">
<view class="row" @click="bthActive(index,row._id,row.price)" v-for="(row,index) in allPriceInfo"
:key="index">
<view class="name">{{row.goods_name}}</view>
<view class="price">¥{{row.price}}</view>
</view>
</view>
<view class="subPay" @click="subPaynow">立即充值</view>
</view>
<template>
<script>
let iapChannel = null,
productId = '1001', //默认苹果内购商品id 要提前在app store connect 配置 要支付的商品的标识(必须是调用uni.requestPayment返回的有效的商品标识)
productIds = ['1001','1002','1003','1004','1005','1006']; //商品的id 列表
export default {
data() {
return {
orderId:null,
allPriceInfo: [{
"_id": '1001', //这个商品的id 一定要跟在app store connect配置的ID相同
"goods_name": "商品2",
"price": "12",
},
{
"_id": '1002',
"goods_name": "商品2",
"price": "12",
},
],
}
},
onLoad() {
// #ifdef APP-PLUS
//1.首先调用plus.payment.getChannels获取支付通道,IAP支付通道的ID为“appleiap”
plus.payment.getChannels((channels) => {
console.log("获取到channel" + JSON.stringify(channels))
iapChannel = channels.find(i => i.id === 'appleiap')
console.log("获取到iapChannel" + JSON.stringify(iapChannel))
if(iapChannel){
this.requestOrder();
}
if(!iapChannel){
this.errorMsg()
}
}, (error) => {
this.errorMsg()
});
},
methods:{
//苹果内支付
//2.调用ID为“appleiap”的PaymentChannel对象的requestOrder方法,像Appstore请求有效的商品详情。注意:IAP支付必须在调用payment.request方法之前,调用requestOrder方法,否则调用payment.request将会报错。
requestOrder() {
uni.showLoading({
title:'检测支付环境...'
})
iapChannel.requestOrder(productIds, (orderList) => { //必须调用此方法才能进行 iap 支付
console.log('requestOrder success666: ' + JSON.stringify(orderList));
uni.hideLoading();
}, (e) => {
console.log('requestOrder failed: ' + JSON.stringify(e));
uni.hideLoading();
this.errorMsg()
});
},
//选中价格的时候
bthActive(index, id, price) {
this.orderId = id
},
//点击立即支付
//3.调用uni.requestPayment方法发起支付请求,
subPaynow(e) {
let _this = this
uni.showLoading({
title:'支付中...'
})
productId = _this.orderId
uni.requestPayment({
provider: 'appleiap',
orderInfo: {
productid: productId, //必填
quantity:1,//选择的数量 可不填
username:'' //支付商户的名称 可不填
},
success: (e) => {
console.log('支付成功====',e)
uni.hideLoading()
},
fail: (e) => {
uni.hideLoading()
console.log('支付失败,原因为===',e.errMsg)
},
complete: () => {
uni.hideLoading()
console.log("payment结束")
},
})
},
errorMsg(){
uni.showModal({
content: "暂不支持苹果 iap 支付",
showCancel: false
})
},
}
}
</script>
返回的支付数据 仅供参考 console.log(‘支付成功====’,e)
{
"payment": {
"productid": "1001",
"quantity": "1"
},
"transactionDate": "2021-03-25 17:12:23",
"transactionIdentifier": "1000000793435070",
"transactionReceipt": "ewoJInNpZ25hdHVyZSIgPSAiQXd1NllXSU5abGgzS1lOTHExam9LN0E4L1k1dWk2ZzBHYUZSRnp6dnkzRWpIUElKQ0kxWW91SDFMN1hENWRCbDBUOWdtK2o1UTJBT25Bd2pjQWpWSW5WVjZFZU5zR3dXdnQ0NGJVMUF4VFBuN3ExaDZ3bnFlZkRieHpvNEtpbTdPb1JXUWlLdVBoR2JBM2ZMWXRXQzFTbHZ4SVZ3MUtBeHlhTjNRanV1U0loTHZRNmtHTzkltbHpMWFJ5YVdGc0xYQmxjbWx2WkNJZ1BTQWlabUZzYzJVaU93b0pJbkIxY21Ob1lYTmxMV1JoZEdVdGNITjBJaUE5SUNJeU1ESXhMVEF6TFRJMUlEQXlPakV5T2pJeklFRnRaWEpwWTJFdlRHOXpYMEZ1WjJWc1pYTWlPd29KSW05eWFXZHBibUZzTFhCMWNtTm9ZWE5sTFdSaGRHVWlJRDBnSWpJd01qRXRNRE10TWpVZ01EazZNVEk2TWpNZ1JYUmpMMGROVkNJN0NuMD0iOwoJImVudmlyb25tZW50IiA9ICJTYW5kYm94IjsKCSJwb2QiID0gIjEwMCI7Cgkic2lnbmluZy1zdGF0dXMiID0gIjAiOwp9",
"transactionState": "1",
"errMsg": "requestPayment:ok"
}