工戈草头右框七
工戈草头右框七
  • 发布:2026-01-23 17:41
  • 更新:2026-01-23 17:42
  • 阅读:108

苹果内购获取商品问题

分类:uni-app

苹果内购获取商品问题。

已经通过如下代码获取ipaChannel

uni.getProvider({  
          service: 'payment',  
          success: (res) => {  
            iapChannel = res.providers.find((channel) => {  
              return (channel.id === 'appleiap')  
            })  
          }  
        });

打印ipaChannel显示

{  
    "id": "appleiap",  
    "description": "In-App Purchase",  
    "serviceReady": true,  
    "installService": "function() { [native code] }",  
    "appStoreReceipt": "function() { [native code] }",  
    "finishTransaction": "function() { [native code] }",  
    "restoreCompletedTransactions": "function() { [native code] }",  
    "restoreComplateRequest": "function() { [native code] }",  
    "requestProduct": "function() { [native code] }",  
    "requestOrder": "function() { [native code] }",  
    "isReadyToPay": "function() { [native code] }",  
    "isAppExist": true  
}

接下来尝试获取商品列表(vue3)
pointProducts.value可以确定是如下数据(和在苹果后台设置的商品ID一致)

[ "point_500", "point_1000", "point_2000" ]

之后尝试获取商品列表

channel.value.requestProduct(pointProducts.value, function (orderList) {  
            console.log('商品信息', orderList);  
        }, function (err) {  
            console.error('获取商品失败', err);  
        });

直接打印出来的是“获取商品失败”:

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

想知道可能出错的原因在哪里,是自己的问题,还是苹果的问题。
多谢高人指点。

2026-01-23 17:41 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

出现 “Payment_appleiap:返回订单信息失败” 的常见原因基本都集中在「商品 ID 与 App Store Connect 里的配置不一致」或「运行环境不符合要求」这两类。
结合您给出的信息,可以按下面 4 个方向逐项自查,基本都能定位到问题。

  1. 运行环境
    • HBuilderX 自带的真机运行基座(标准运行基座)不包含 IAP 模块,所以 requestProduct 永远会失败。
    → 解决:用「自定义调试基座」或「云打包/离线打包」打一个包含 IAP 模块的包再测。
    • 如果已经是自定义基座,确认 manifest.json → App 模块配置 → Payment(AppleIAP) 已勾选。

  2. 商品 ID 是否已生效
    • 在 App Store Connect → 我的 App → 对应 App → 功能 → 应用内购买项目 里,确认 3 个商品的状态为「已批准」。
    • 商品类型必须是「消耗型项目」或「非消耗型项目」,订阅型商品用另一套接口。
    • 商品 ID 必须和代码里完全一致(您提到已经一致,可跳过)。

  3. 沙盒 / TestFlight 环境
    • 真机调试时,设备必须退出正式 Apple ID,登录沙盒测试账号(App Store Connect → 用户与访问 → 沙盒测试员)。
    • 如果设备登录的是正式 Apple ID,苹果服务器会返回空列表,uni-app 侧就抛 -100。

  4. 代码调用方式
    您现在的写法没问题,但建议把回调改成 Promise 形式,方便打印完整错误:

    iapChannel.requestProduct(  
     ['point_500', 'point_1000', 'point_2000'],  
     (products) => console.log('商品信息', products),  
     (err) => console.error('获取商品失败', JSON.stringify(err))  
    );  

只要满足「自定义基座 + 商品已批准 + 沙盒账号登录」这三点,requestProduct 基本都能正常返回商品数组。

内容为 AI 生成,仅供参考

要回复问题请先登录注册