uni-app中苹果内购plus.payment.request的回调函数有概率不执行

uni-app中苹果内购plus.payment.request的回调函数有概率不执行

苹果内购 plus.payment.request 的回调函数有概率不执行,是什么导致的呢?已经支付成功了,回调一直不触发,有概率出现这个,10次会出现1~2次。。。是代码有问题?还是其他原因呢?

11 回复

贴一下你的代码

更多关于uni-app中苹果内购plus.payment.request的回调函数有概率不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html


您好,我用沙盒环境测试能够拉起支付并且走完流程,但是苹果官方审核时 好像拉不起支付,甚至会提示 your account is temporarily unavailable.try again later [Environment: Sandbox],我判断是苹果官方审核时没有获取到支付通道或产品,请问这个该怎么解决呢?

回复 tzc: 听你这个描述怎么感觉像 证书的问题 你提交苹果官方审核时 是发布证书吗?

回复 天生DR: 如果不是发布证书是不能上传到testflight的

回复 tzc: getChannels 不联网 肯定能获取到 通道 后边的取决于网和你appid 如果是这种错误的话 建议你 重新登录你的appid 跟 appstore 里的appid 最好一致 现在是苹果审核给你打回来了是吗 有没有完整的信息?

回复 天生DR: 这个可能解决了,问题是:必须要requestOrder方法执行成功后,再调用plus.payment.request方法不然就会拉不起支付,可能明天就过审了,等我的好消息。

回复 tzc: 好的 过了吗?

回复 天生DR: 过了

回复 tzc: 好 关闭问题了

plus.payment.getChannels(function(channels) { // 获取支付通道 for (var i in channels) { var channel = channels[i]; // 获取 id 为 ‘appleiap’ 的 channel if (channel.id === ‘appleiap’) { _self.iap = channel; var ids = [_self.product.apple_product_id + ‘’]; // iap 为刚刚获取的appleiap支付通道 _self.iap.requestOrder(ids, function(e) { // 获取订单信息成功回调方法 console.log('requestOrder success: ’ + JSON.stringify(e)); _self.iapId = e[0].productid; }, function(e) { // 获取订单信息失败回调方法 console.err('requestOrder failed: ’ + JSON.stringify(e)); }); } } }, function(e) { console.log(“获取支付通道失败:” + e.message); });
iosPay(order_id) { // 支付 let _self = this; _self.restoreComplateRequest(); if (_self.iapId != -1) { plus.payment.request(_self.iap, { productid: _self.iapId, username: order_id, optimize: true, // 支付时设置 optimize: true quantity: _self.product.purchaseNum }, function(result) { console.log(result, ‘result’) _self.$api.post(‘pay.apple.notice’, { order_id: result.payment.username, transaction_id: result.transactionIdentifier, transaction_receipt: result.transactionReceipt, }).then((res) => { _self.loadingShow = false; _self.inOperation2 = false; console.log(res.status, res) if (res.status == 0) { uni.navigateTo({ url: ‘…/…/d_payment/d_payment/index?order_id=’ + order_id + ‘&situation=complete’ }); } }); }, function(e) { _self.loadingShow = false; _self.inOperation2 = false; _self.restoreComplateRequest() }); } }
restoreComplateRequest() {
this.iap.restoreComplateRequest({}, function(results) {
// results 格式为数组存放恢复的IAP商品交易信息对象 IAPTransaction,通用需将返回的支付凭证传给后端进行二次认证
});
},

在uni-app中使用苹果内购时,plus.payment.request回调不执行的问题通常与以下几个因素有关:

  1. 网络问题:苹果服务器回调可能因网络波动而丢失,特别是在支付完成后的关键回调阶段

  2. 应用生命周期:应用可能在支付过程中被切换到后台,导致回调被系统中断

  3. 苹果服务器延迟:苹果IAP服务器偶尔会有响应延迟,回调可能不会立即触发

  4. 沙盒环境特性:测试环境下回调稳定性通常比生产环境差

建议检查以下方面:

  • 确保支付流程中应用保持前台状态
  • 添加超时重试机制
  • 在应用启动时检查未完成的交易
  • 使用plus.payment.restoreComplateRequest恢复购买记录

典型处理方案:

let timer = setTimeout(() => {
    // 超时处理逻辑
}, 15000);

plus.payment.request(iapChannel, orderInfo, (result) => {
    clearTimeout(timer);
    // 正常处理逻辑
}, (error) => {
    clearTimeout(timer);
    // 错误处理
});
回到顶部