uni-app 苹果支付 同意 媒体服务条款与条件已更改 后报错
uni-app 苹果支付 同意 媒体服务条款与条件已更改 后报错
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | wind11 | CLI |
产品分类:uniapp/App
PC开发环境操作系统:Windows
手机系统:iOS
手机系统版本号:iOS 14
手机厂商:苹果
手机机型:iphonex
页面类型:vue
vue版本:vue3
打包方式:云端
项目创建方式:CLI
CLI版本号:3.0.0-3090920231225001
示例代码:
// 发起支付
const quzhifu = (product) => {
uni.showToast({
icon: "loading",
title: "获取支付通道...",
duration: 99999,
mask: true,
});
uni.getProvider({
service: "payment",
success: (ProviderRes) => {
const iapChannel = ProviderRes.providers.find((channel) => {
return channel.id === "appleiap";
});
if (iapChannel) {
uni.showToast({
icon: "loading",
title: "校验支付产品...",
duration: 99999,
mask: true,
});
iapChannel.requestProduct(
[product.productId],
(productList) => {
if (productList.length <= 0) {
uni.showToast({
title: "未获取到产品信息",
icon: "none",
});
return false;
}
console.log("获取苹果产品列表成功", productList);
APIPostMemberBuy({
memberPackageId: product.id, //会员套餐ID
isRetrieve: product.isRetrieve, //是否开启挽回优惠: [0=否, 1=是]
})
.then((orderDetail) => {
const { orderId, orderSn, from } = orderDetail.data;
console.log("orderId", orderId);
uni.requestPayment({
provider: "appleiap",
orderInfo: {
productid: product.productId,
manualFinishTransaction: true,
username: orderId, //根据业务需求透传参数,关联用户和订单关系
},
success: (transactions) => {
// e 类型为 Transaction, 详见下面的描述
APIPostPayIosIPayNotify({
transactionReceipt: transactions.transactionReceipt, //苹果支付凭证
orderId: orderId, //订单id
}).then((payNotifyRes) => {
console.log("接口的回调", payNotifyRes);
// 验证成功后关闭订单
iapChannel.finishTransaction(transactions);
// 支付成功
storeUserinfo.FnRefreshUserinfo();
uni.showToast({
title: payNotifyRes.msg,
icon: "none",
});
});
},
fail: (err) => {
console.log("支付失败", err);
uni.hideToast();
},
});
})
.catch((err) => {
uni.hideToast();
});
},
(err) => {
console.log("获取苹果支付产品失败", err);
uni.showToast({
title: "校验产品失败",
icon: "none",
});
}
);
return false;
}
uni.showToast({
icon: "none",
title: "获取支付通道失败",
});
},
fail: () => {
uni.showToast({
icon: "none",
title: "获取支付通道失败",
});
},
});
};
操作步骤:
- 苹果支付
预期结果:
- 支付成功回调成功
实际结果:
- 支持成功 回调失败
bug描述:
支付,跳转同意协议后回调是错误的
{
"errMsg": "requestPayment:fail Payment_appleiap:Error Domain=SKErrorDomain Code=0 \"发生未知错误\" UserInfo={NSLocalizedDescription=发生未知错误, NSUnderlyingError=0x281ca58c0 {Error Domain=ASDServerErrorDomain Code=3038 \"Apple 媒体服务条款与条件已更改。\" UserInfo={NSLocalizedDescription=Apple 媒体服务条款与条件已更改。}}},https://ask.dcloud.net.cn/article/282",
"code": 0
}
更多关于uni-app 苹果支付 同意 媒体服务条款与条件已更改 后报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
uniapp支付的回调,早上 中断,弹服务协议的时候点了同意,但是返回的还是失败回调,下午测试返回的是成功回调。(严重怀疑是hbuilder的问题,中午给社区反馈偷偷修复了)
更多关于uni-app 苹果支付 同意 媒体服务条款与条件已更改 后报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在使用 uni-app 开发应用时,如果遇到苹果支付(Apple Pay)相关的报错,特别是与“媒体服务条款与条件已更改”相关的错误,可能是由于以下几个原因导致的。以下是一些可能的解决方案和排查步骤:
1. 检查 Apple Developer 配置
- 证书和配置文件:确保你的 Apple Developer 账户中已经正确配置了 Apple Pay 的证书和配置文件。特别是要确保你的 App ID 已经启用了 Apple Pay 功能。
- Merchant ID:确保你在 Xcode 项目中正确配置了 Merchant ID,并且在 Apple Developer 账户中已经创建了对应的 Merchant ID。
2. 检查 uni-app 配置
- manifest.json:在
manifest.json文件中,确保已经正确配置了 Apple Pay 的相关信息。例如:"applePay": { "merchantIdentifier": "your.merchant.id", "supportedNetworks": ["visa", "masterCard", "amex"] } - 插件配置:如果你使用了 uni-app 的插件(如
uni-pay),确保插件已经正确配置,并且版本是最新的。
3. 检查 Apple Pay 服务条款
- 同意条款:如果 Apple 提示“媒体服务条款与条件已更改”,你需要登录 Apple Developer 账户,检查并同意最新的服务条款。通常,Apple 会通过邮件或在 Developer 账户中提示你更新条款。
- 重新生成证书:在同意新的服务条款后,可能需要重新生成相关的证书和配置文件,并更新到你的项目中。
4. 检查代码逻辑
- 支付流程:确保你的 Apple Pay 支付流程代码逻辑正确。特别是检查支付请求的构建、支付结果的回调处理等。
- 错误处理:在代码中添加详细的错误处理逻辑,捕获并打印错误信息,以便更好地定位问题。
5. 测试环境
- 沙盒测试:在开发阶段,使用 Apple Pay 的沙盒环境进行测试。确保你的测试设备和 Apple ID 已经正确配置为沙盒环境。
- 真机测试:确保在真机上进行测试,模拟器可能无法完全模拟 Apple Pay 的行为。
6. 查看日志
- Xcode 日志:如果问题依然存在,可以通过 Xcode 查看详细的日志信息,查找具体的错误原因。
- uni-app 日志:在 uni-app 中,可以通过
console.log或uni.showModal等方式输出调试信息,帮助定位问题。
7. 更新 uni-app 和相关插件
- uni-app 版本:确保你使用的 uni-app 版本是最新的,旧版本可能存在已知的兼容性问题。
- 插件更新:如果你使用了第三方插件,确保插件已经更新到最新版本。
8. 联系 Apple 支持
- 如果以上步骤都无法解决问题,可以联系 Apple 开发者支持,提供详细的错误信息和日志,寻求进一步的帮助。
示例代码
以下是一个简单的 Apple Pay 支付请求示例:
uni.requestPayment({
provider: 'applepay',
orderInfo: {
merchantIdentifier: 'your.merchant.id',
supportedNetworks: ['visa', 'masterCard', 'amex'],
countryCode: 'US',
currencyCode: 'USD',
paymentItems: [
{
label: 'Product Name',
amount: '10.00'
}
]
},
success: function (res) {
console.log('Payment success:', res);
},
fail: function (err) {
console.error('Payment failed:', err);
}
});

