x***@126.com
x***@126.com
  • 发布:19 分钟前
  • 更新:18 分钟前
  • 阅读:9

【报Bug】安卓端当前使用paypal支付的时候不能再APP里面打开支付

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: MacBook Pro (Retina, 15-inch, Mid 2014)

HBuilderX类型: 正式

HBuilderX版本号: 5.15

手机系统: Android

手机系统版本号: Android 15

手机厂商: 华为

手机机型: 荣耀

页面类型: vue

vue版本: vue3

打包方式: 离线

项目创建方式: HBuilderX

操作步骤:

使用5.15的SDK测试paypal支付

预期结果:

可以在应用内正常打开支付页面

实际结果:

当前打不开字符页面

bug描述:

┌──────────────────────────────────────────┬──────────────────────────────────┐
│ 文件 │ MD5 │
├──────────────────────────────────────────┼──────────────────────────────────┤
│ 5.15 SDK/libs/payment-paypal-release.aar │ 9e655dadbe557a3c6d29e41b481d6779 │
├──────────────────────────────────────────┼──────────────────────────────────┤
│ 5.15 工程 app/libs 里正在用的 │ 同上 │
├──────────────────────────────────────────┼──────────────────────────────────┤
│ 5.24 SDK/libs/payment-paypal-release.aar │ 同上 │
├──────────────────────────────────────────┼──────────────────────────────────┤
│ 5.07 那份 │ 也是同一份 │
└──────────────────────────────────────────┴──────────────────────────────────┘

换 5.24 的 aar,二进制完全一样,PaypalPay.java:131 还是会调那个已经不存在的构造函数。

能不能升级 android-sdk:0.6.2

不能靠升级修好。 升到 0.6.3、0.8.x、1.3.2 只会更偏。

当前崩溃要的是这个 8 参数构造:

CheckoutConfig(
Application,
clientId, // String
Environment,
CurrencyCode, // 第 4 个
UserAction,
PaymentButtonIntent,
SettingsConfig,
returnUrl // 最后 1 个 String
)

而 0.6.2 实际提供的是:

CheckoutConfig(
Application,
clientId,
Environment,
returnUrl, // 第 4 个已经是 String
CurrencyCode,
UserAction,
PaymentButtonIntent,
SettingsConfig
[, UIConfig]
)

第 4 个参数类型就不一样:DCloud aar 要 CurrencyCode,0.6.2 要 String returnUrl。所以是 NoSuchMethodError,不是漏依赖。

我核对了 Maven 上 0.3.0 到 0.6.2,公开 SDK 从很早开始就是 returnUrl 在第 4 位。继续升版本不会变回 DCloud aar 编译时用的那个签名。

所以现在怎么办

┌─────────────────────────────────────────────────────────────────────────────────────┬─────────────────────────────────────┐
│ 方案 │ 结果 │
├─────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────┤
│ 换 5.24 的 payment-paypal-release.aar │ 无效,文件相同 │
├─────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────┤
│ 升级 android-sdk 到 0.6.3 / 1.x │ 无效,构造函数更对不上 │
├─────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────┤
│ 降到 0.4.x / 0.5.x │ 大概率也无效,returnUrl 仍在第 4 位 │
├─────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────┤
│ 等更新的 DCloud payment-paypal-release.aar(比 5.24 还新,且按 0.6.2 新签名重编过) │ 这才是对齐原生 SDK 的正路 │
├─────────────────────────────────────────────────────────────────────────────────────┼─────────────────────────────────────┤
│ 继续用现在的 approveUrl 浏览器兜底 │ 目前唯一已经验证能打开结账页的路径 │
└─────────────────────────────────────────────────────────────────────────────────────┴─────────────────────────────────────┘

前端 orderInfo、渠道接口、getProvider 都没问题。要原生收银台,必须换一份和 android-sdk:0.6.2 构造函数匹配的 DCloud PayPal 模块;手头 5.07 / 5.15 / 5.24 的 aar 都不行。

19 分钟前 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

感谢您提交详尽的 Bug 反馈。您提供的问题描述、版本对比、参数差异分析以及排查过程非常专业,这对于我们定位和解决问题非常有帮助。针对您反馈的安卓端 PayPal 支付无法在应用内打开的问题,我们进行了评审与分析,具体如下:

1. Bug 反馈内容完整性评审

  • BUG 描述:非常详细且清晰。您不仅描述了故障现象,还深入到了原生 SDK 的方法签名层面,对比了 DCloud payment-paypal-release.aar 期望的 CheckoutConfig 构造函数与 Maven 仓库中 android-sdk:0.6.2 实际提供的构造函数差异(第 4 个参数类型不符导致 NoSuchMethodError)。这种深度的分析官方人员完全能够看懂,并可以直接作为排查依据。
  • 代码示例:由于此问题属于原生 AAR 模块与底层 SDK 的二进制不兼容问题,不需要前端业务代码示例即可复现,因此当前描述已足够说明问题。
  • 复现步骤:描述清晰。结合您提供的环境信息(5.15 SDK、安卓端),官方人员可以直接按照该路径复现并抓取崩溃堆栈。
  • 预期结果与实际结果:预期结果合理(在应用内打开支付页面),实际结果描述准确(无法打开支付页面,底层抛出 NoSuchMethodError),不属于误报。
  • 分类信息:完整。包含了 HBuilderX 版本(5.15)、手机系统(Android 15)、设备机型(荣耀)等必要信息。
  • 附件说明:提示一下,我们目前的系统无法识别附件,如果后续有日志截图等,请直接以文本形式粘贴。

2. Bug 是否成立及分析

根据您提供的信息以及我们核对官方文档记录,该 Bug 现象成立

在 DCloud 的Android离线SDK配置文档中,PayPal 模块确实依赖了 com.paypal.checkout:android-sdk:0.6.2 版本。同时,在历史更新记录中可以看到,DCloud 在 3.6.7 alpha 版本时曾将 PayPal SDK 升级到了 0.6.2 版本。

正如您所分析的,当前 5.15(乃至 5.24)的 payment-paypal-release.aar 在编译时可能引用了某个特定的内部或早期签名,而 Maven 上的 0.6.2 公开版本构造函数参数顺序已经发生了变化(returnUrl 的位置变动)。这导致了在运行期调用原生收银台时,由于方法签名不匹配,直接抛出异常,从而无法拉起应用内支付。

3. 后续处理与建议

您在分析中提出的结论是正确的:单纯依靠升级或降级 Maven 上的 PayPal android-sdk 版本无法解决此问题。因为公开 SDK 的签名已经改变,只要 DCloud 的 payment-paypal-release.aar 没有针对新的签名重新进行编译适配,就必然存在方法找不到的崩溃。

针对此问题,官方需要重新对 payment-paypal-release.aar 模块进行更新,使其与当前 PayPal 原生 SDK 的实际签名对齐。我们将把此问题转交至相关的原生模块研发团队进行评估和修复,请关注后续 SDK 的更新日志。

在官方修复发布之前,建议您暂时使用您提到的 approveUrl 浏览器兜底方案(通过 web-view 或系统浏览器跳转支付),这是目前避开原生崩溃且能保证支付流程跑通的可行过渡方案。

内容为 AI 生成,仅供参考

要回复问题请先登录注册