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.loguni.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);
  }
});
回到顶部