美文网首页
iOS 微信支付疑难杂症。

iOS 微信支付疑难杂症。

作者: 小昊昊_iOS | 来源:发表于2021-02-09 11:20 被阅读0次

哈喽,大家好,感谢您来阅读我的文章,作为iOS开发者,集成各类支付是家常便饭之事,今天我来给大家推荐几个不常见的微信支付问题。

最近,在项目的反馈版块中,收到了这么一位APP用户的反馈,他在使用我们家的APP时,使用微信支付,支付完成后,账户信息得不到更新,需要重启APP才能更新。从后面了解中所得知,用户手中装的微信APP版本号是 7.0.3的(经过了九九八十一难,我拿到了用户使用的手机,并将其手机用于项目调试)。

在控制台中,我发现了这么一条信息,在调取WXAPI时就会打印出来。

canOpenURL: failed for URL: "weixinULAPI://" - error: The operation couldn’t be completed. (OSStatus error -10814.)

当时有点懵逼。这个是多么熟悉,有多么可恨的报错。这个在刚介入微信支付时就能出现。只需在项目中把各种配置配起来,就可以消除的了,我反反复复对之前的配置进行检测,发现并没有问题。

很是奇怪咯。~~~~

这个时候,我使用微信支付,不管成功与否,确实不会触发回调。(在个人手机操作时,流程都是正常的)

查阅了各种资料。发现也没查出个所以然来。

最后我只能下手,向WXAPI文档下手了。

/*! @brief 处理旧版微信通过URL启动App时传递的数据

 *

 * 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用。

 * @param url微信启动第三方应用时传递过来的URL

 * @param delegate  WXApiDelegate对象,用来接收微信触发的消息。

 * @return 成功返回YES,失败返回NO。

 */

+ (BOOL)handleOpenURL:(NSURL *)url delegate:(nullable id<WXApiDelegate>)delegate;

/*! @brief 处理微信通过Universal Link启动App时传递的数据

 *

 * 需要在 application:continueUserActivity:restorationHandler:中调用。

 * @param userActivity微信启动第三方应用时系统API传递过来的userActivity

 * @param delegate  WXApiDelegate对象,用来接收微信触发的消息。

 * @return 成功返回YES,失败返回NO。

 */

+ (BOOL)handleOpenUniversalLink:(NSUserActivity *)userActivity delegate:(nullable id<WXApiDelegate>)delegate;

看到以上两个API,脑海中突然灵光一闪,关于SDK接口问题。其实这里最大的问题不是接口,而是自身微信版本问题。

在上面第一条信息中,我们可以得知。

旧版微信通过URL Schemes传递数据的

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{

    return [WXApi handleOpenURL:url delegate:self];

}

新版微信是通过UniversalLink来传递数据的。

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {

    return [WXApi handleOpenUniversalLink:userActivity delegate:self];

}

把这两个接口适配好。就可以收到微信回调的。

即使能收到微信回调。但是控制台中还是会继续打印出 canOpenURL: failed for URL: "weixinULAPI://" - error: The operation couldn’t be completed. (OSStatus error -10814.) 从功能上暂时没有发现什么异常。

个人分析,可能是高版本的SDK调用低版本的微信时,由于内部兼容所导致的。并不影响使用。

如何有道友知道是什么原因所导致的。可以在下方评论区中留言。

随便提一下:在iOS13 开始会出现这么一个文件SceneDelegate(Xcode11开始,创建项目时,会把之前的APPdelegate给细分化)。

在有这种项目文件的项目中,UniversalLink 和 URL Schemes 回调都会在这个文件API方法中回调。

iOS 13 UniversalLink 回调方法。

- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity API_AVAILABLE(ios(13.0)){

}

iOS 13  URL Schemes

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts API_AVAILABLE(ios(13.0)){

}

随手记录,不喜勿喷。

相关文章

网友评论

      本文标题:iOS 微信支付疑难杂症。

      本文链接:https://www.haomeiwen.com/subject/ypwqxltx.html