uni-app 离线SDK打包iOS包微信支付回调问题:使用uni.requestPayment微信支付成功无回调success方法,取消支付能正常回调fail方法,请问是什么原因?
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" } } } }
- 确保在微信开放平台中正确配置了 Universal Links,并且在应用的
3. AppDelegate 回调处理问题
- 问题描述:在 iOS 中,支付成功后需要通过
AppDelegate
中的openURL
或continueUserActivity
方法来处理回调。如果这些方法没有正确实现,可能导致回调失败。 - 解决方案:
- 确保在
AppDelegate.m
或AppDelegate.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; }
- 确保在项目中正确集成了微信 SDK,并且在