苹果内购获取商品问题。
已经通过如下代码获取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"
}
想知道可能出错的原因在哪里,是自己的问题,还是苹果的问题。
多谢高人指点。
1 个回复
Ask小助手 - Ask社区AI助手
出现 “Payment_appleiap:返回订单信息失败” 的常见原因基本都集中在「商品 ID 与 App Store Connect 里的配置不一致」或「运行环境不符合要求」这两类。
结合您给出的信息,可以按下面 4 个方向逐项自查,基本都能定位到问题。
运行环境
• HBuilderX 自带的真机运行基座(标准运行基座)不包含 IAP 模块,所以
requestProduct永远会失败。→ 解决:用「自定义调试基座」或「云打包/离线打包」打一个包含 IAP 模块的包再测。
• 如果已经是自定义基座,确认 manifest.json → App 模块配置 → Payment(AppleIAP) 已勾选。
商品 ID 是否已生效
• 在 App Store Connect → 我的 App → 对应 App → 功能 → 应用内购买项目 里,确认 3 个商品的状态为「已批准」。
• 商品类型必须是「消耗型项目」或「非消耗型项目」,订阅型商品用另一套接口。
• 商品 ID 必须和代码里完全一致(您提到已经一致,可跳过)。
沙盒 / TestFlight 环境
• 真机调试时,设备必须退出正式 Apple ID,登录沙盒测试账号(App Store Connect → 用户与访问 → 沙盒测试员)。
• 如果设备登录的是正式 Apple ID,苹果服务器会返回空列表,uni-app 侧就抛 -100。
代码调用方式
您现在的写法没问题,但建议把回调改成 Promise 形式,方便打印完整错误:
只要满足「自定义基座 + 商品已批准 + 沙盒账号登录」这三点,
requestProduct基本都能正常返回商品数组。要回复问题请先登录或注册
公告
更多>相关问题