uni-app 苹果内支付获取商品列表报"返回订单信息失败"

发布于 1周前 作者 itying888 来自 Uni-App

uni-app 苹果内支付获取商品列表报"返回订单信息失败"

操作步骤

使用官方苹果内支付示例代码即可复现

预期结果

返回商品列表

实际结果

订单信息不存在

Bug 描述

使用苹果内支付的示例代码,在获取商品列表的时候返回:

{
"code": -100,
"message": "Payment_appleiap:返回订单信息失败,https://ask.dcloud.net.cn/article/282",
"errCode": -100,
"errMsg": "Payment_appleiap:返回订单信息失败,https://ask.dcloud.net.cn/article/282"
}

检查步骤

  • 检查商品状态是否正常(第一次添加app内购买,随着app提交在审核中,是否跟这个有关系,是不是需要审核成功之后才能使用呢)
  • 检查登录的苹果账号是否是测试账号,是否是沙盒环境(苹果已经是测试账号,app store已经展示沙盒账号)
  • 手机设置里看下是否限制了应用内购(没有限制)
  • 检查appstore connect 后台是否有协议需要同意或者更新(检查了没有)
  • 检查是否有科学上网,商品是否支持手机设置的地区(商品支持全地区)
  • 是否是通过requestProduct获取的商品列表(是的,是通过这个,而且还是根据官方实例复制粘贴使用的)

我的疑问

是什么查询商品列表会报返回订单信息失败,使用的是uniapp官方提供的苹果支付示例代码,一点没改,走requestProduct的时候报的,望官方及时回复


14 回复

我也碰到这个问题了,请问解决了吗,是不是需要先提交app审核才行


获取产品列表时需要传入productid 以数组的形式[‘priductid1’,‘priductid2’,]

我也遇到了同样的问题,App已经提交审核了还是不行,之前的的App同样的代码都可以

获取产品列表时需要传入productid 以数组的形式[‘priductid1’,‘priductid2’,]

需要先提交版本审核吗,还是怎么弄

获取产品列表时需要传入productid 以数组的形式[‘priductid1’,‘priductid2’,]

获取产品列表时需要传入productid 以数组的形式[‘priductid1’,‘priductid2’,]

官方文档有地方说明吗?我想知道

就是传这样的数组,一样不行

大佬,解决了吗?我也遇到这个问,苹果后台设置都检查过很多遍了,都配置完了,还是一直失败

解决了,就是传商品id数组

你好,最后解决了吗,我和你的情况一样,怎么解决的呀

同样的问题 不过我的是偶尔报错,不是每次都报错
{ “code”: -100, “message”: “Payment_appleiap:返回订单信息失败,https://ask.dcloud.net.cn/article/282”, “errCode”: -100, “errMsg”: “Payment_appleiap:返回订单信息失败,https://ask.dcloud.net.cn/article/282” }

针对您提到的在使用uni-app进行苹果内购(In-App Purchase, IAP)时遇到“返回订单信息失败”的问题,这通常涉及到与Apple服务器的通信和数据处理。以下是一个简化的代码示例,展示如何通过uni-app的支付模块进行内购商品列表的获取和处理。请确保您的应用已经正确配置了App Store Connect中的内购项目,并且已经生成了相应的证书和配置文件。

1. 配置uni-app支付模块

首先,确保在manifest.json中配置了支付相关的信息,特别是针对iOS平台的配置,比如apple-iap的相关设置。

2. 获取商品列表

在您的uni-app项目中,可以使用如下代码来获取内购商品列表:

// 引入uni-app的支付模块
const inAppPurchase = uni.getInAppPurchaseManager();

// 定义要获取的商品ID数组
const productIds = ['com.example.product1', 'com.example.product2'];

// 请求商品信息
inAppPurchase.requestProducts({
    productIds: productIds,
    success: (res) => {
        // 处理获取到的商品信息
        const products = res.products;
        products.forEach(product => {
            console.log(`Product ID: ${product.productId}, Title: ${product.localizedTitle}, Price: ${product.localizedPrice}`);
        });
    },
    fail: (err) => {
        // 处理获取商品信息失败的情况
        console.error('获取商品信息失败', err);
        // 如果错误信息是“返回订单信息失败”,可能是网络问题或Apple服务器问题
        // 也可能是商品ID配置错误或该商品在App Store Connect中未正确设置
        if (err.errMsg.includes('返回订单信息失败')) {
            // 可以尝试重新请求或提示用户检查网络连接
        }
    }
});

3. 错误处理与重试机制

由于网络波动或Apple服务器响应延迟,建议在失败时实现重试机制:

function fetchProducts(retries = 3) {
    inAppPurchase.requestProducts({
        productIds: productIds,
        success: (res) => {
            // 处理成功逻辑
        },
        fail: (err) => {
            console.error('获取商品信息失败', err);
            if (retries > 0) {
                console.log('重试获取商品信息...');
                fetchProducts(retries - 1);
            } else {
                // 最终失败处理,比如提示用户稍后重试
            }
        }
    });
}

// 调用函数开始获取商品信息
fetchProducts();

结论

上述代码提供了一个基本的框架来处理uni-app中的苹果内购商品列表获取。如果持续遇到“返回订单信息失败”的问题,请检查Apple开发者账号的配置、网络连接状态以及是否有最新的Apple支付SDK或uni-app插件更新。同时,确保您的应用遵循了Apple的内购政策和指导原则。

回到顶部