uni-app 离线SDK打包iOS包微信支付回调问题:使用uni.requestPayment微信支付成功无回调success方法,取消支付能正常回调fail方法,请问是什么原因?

发布于 1周前 作者 bupafengyu 来自 Uni-App

uni-app 离线SDK打包iOS包微信支付回调问题:使用uni.requestPayment微信支付成功无回调success方法,取消支付能正常回调fail方法,请问是什么原因?

开发环境 版本号 项目创建方式
Mac 13.6.1 HBuilderX
4.03

操作步骤:

  • 使用离线SDK打包iOS,微信支付后,uni.requestPayment没有回调success

预期结果:

  • uni.requestPayment能够正常回调success方法

实际结果:

  • 没有任何回调

bug描述:

  • 使用最新的离线SDK打出来的iOS包,使用uni.requestPayment,微信支付成功没有回调success方法,取消支付能正常回调fail方法。断点原生的工程,支付成功有回调到原生如下方法。

    (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
        [PDRCore handleSysEvent:PDRCoreSysEventOpenURLWithOptions withObject:@[url,options]];
        return YES;
    }
  • 支付成功返回:wx3058c59a04720221://pay/?returnKey=&ret=0

  • 但是uniapp那层没有收到success回调。


3 回复

请问你的问题是支付成功后,点击完成没有回调success,还是支付成功后,手势右划或者通过从后台切应用的方式回到app,不回调success?
我现在支付成功后,点击完成可以回调success。但是手势右划或者通过从后台切应用的方式回到app,不回调success。 请问你是如何解决的?

在使用 uni-app 离线 SDK 打包 iOS 应用时,如果遇到微信支付成功后没有回调 success 方法,而取消支付时能正常回调 fail 方法,可能是由于以下几个原因导致的:

1. URL Scheme 配置问题

  • 问题描述:iOS 应用需要通过 URL Scheme 来回调应用,如果 URL Scheme 配置不正确,支付成功后无法正确返回到应用,导致无法触发 success 回调。
  • 解决方案
    • 确保在 manifest.json 中正确配置了 scheme 字段,且与微信开放平台中配置的 URL Scheme 一致。
    • 示例配置:
      {
        "app-plus": {
          "distribute": {
            "ios": {
              "urlscheme": "your.app.scheme"
            }
          }
        }
      }

2. Universal Links 配置问题

  • 问题描述:iOS 9 以上版本推荐使用 Universal Links 来进行应用间的跳转。如果 Universal Links 配置不正确,支付成功后可能无法正确返回到应用。
  • 解决方案
    • 确保在微信开放平台中正确配置了 Universal Links,并且在应用的 Associated Domains 中启用了该功能。
    • manifest.json 中配置 universalLinks
      {
        "app-plus": {
          "distribute": {
            "ios": {
              "universalLinks": "https://yourdomain.com/apple-app-site-association"
            }
          }
        }
      }

3. AppDelegate 回调处理问题

  • 问题描述:在 iOS 中,支付成功后需要通过 AppDelegate 中的 openURLcontinueUserActivity 方法来处理回调。如果这些方法没有正确实现,可能导致回调失败。
  • 解决方案
    • 确保在 AppDelegate.mAppDelegate.swift 中正确实现了相关的回调方法。
    • 示例代码(Objective-C):
      - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
          return [WXApi handleOpenURL:url delegate:self];
      }
      
      - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
          return [WXApi handleOpenURL:url delegate:self];
      }
      
      - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
          return [WXApi handleOpenURL:url delegate:self];
      }
      
      - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
          return [WXApi handleOpenUniversalLink:userActivity delegate:self];
      }

4. 微信 SDK 集成问题

  • 问题描述:如果微信 SDK 集成不正确,可能会导致支付回调无法正常触发。
  • 解决方案
    • 确保在项目中正确集成了微信 SDK,并且在 AppDelegate 中正确注册了微信应用。
    • 示例代码(Objective-C):
      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
          [WXApi registerApp:@"your_app_id" universalLink:@"https://yourdomain.com/apple-app-site-association"];
          return YES;
      }
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!