iOS 调起微信支付页面后,点击取消或支付成功无法返回原APP问题

本文介绍如何正确配置微信支付所需的APPID,确保在Xcode项目中通过URL schemes进行正确的设置,避免支付功能出现问题。

原因很简单,只要认真阅读微信支付文档就不会出现这种问题,方法如下

用户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID,在Xcode中打开项目如下图,设置项目属性中的URL schemes 为你的APPID。



### iOS 微信 H5 支付完成后返回 APP 的解决方案 在 iOS 平台上,微信 H5 支付完成后无法返回 APP问题通常是由于支付流程中的某些配置逻辑未正确处理导致的。以下是针对该问题的详细分析和解决方案。 #### 1. 确保调起微信支付的 URL 不包含 `redirect_url` 参数 根据相关描述[^4],如果调起微信支付的 URL 中包含了 `redirect_url` 参数,则无论支付是否成功取消,都会跳转到该参数指定的地址,而不是返回 APP。因此,在生成支付链接时,需确保 `mweb_url` 中不包含 `redirect_url` 参数。 服务器端通过统一下单接口获取的支付跳转链接(`mweb_url`)有效期为 5 分钟[^2]。在移动端发起请求时,应直接使用此链接,而不附加其他参数。 #### 2. 在 WebView 中拦截支付链接并调起微信支付 当用户点击支付按钮时,支付链接会在 WebView 的 `shouldStartLoadWithRequest` 回调方法中被捕获[^3]。此时需要对支付链接进行拦截,并通过系统方法调起微信支付 App: ```objc - (BOOL)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { NSURL *url = navigationAction.request.URL; if ([url.absoluteString hasPrefix:@"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb"]) { // 拦截支付链接并调起微信支付 [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; decisionHandler(WKNavigationActionPolicyCancel); return NO; } decisionHandler(WKNavigationActionPolicyAllow); return YES; } ``` 上述代码片段展示了如何在 `decidePolicyForNavigationAction` 方法中拦截支付链接,并通过 `openURL` 方法调起微信支付 App[^1]。 #### 3. 处理支付完成后的返回逻辑 支付完成后,微信支付会自动返回 APP。如果发现无法返回,则可能与以下因素有关: - **支付链接配置问题**:如前所述,确保 `mweb_url` 中不包含 `redirect_url` 参数。 - **APP Scheme 配置问题**:需要在 APP 的 `Info.plist` 文件中正确配置 `LSApplicationQueriesSchemes` 和 `CFBundleURLTypes`,以支持微信支付的回调机制[^4]。 以下是 `Info.plist` 的配置示例: ```xml <key>LSApplicationQueriesSchemes</key> <array> <string>weixin</string> <string>wx</string> </array> <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>com.example.app</string> <key>CFBundleURLSchemes</key> <array> <string>wxXXXXXXXX</string> </array> </dict> </array> ``` 其中,`wxXXXXXXXX` 是微信分配给 APP 的唯一标识符,需根据实际情况替换。 #### 4. 捕获支付结果并返回到指定页面 支付完成后,微信支付会通过 APP 的 `AppDelegate` 方法回调支付结果。可以在 `application:openURL:options:` 方法中捕获支付结果,并根据业务需求跳转到指定页面: ```objc - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { if ([url.scheme isEqualToString:@"wx"]) { // 捕获微信支付回调 NSLog(@"微信支付回调: %@", url); // 根据业务需求跳转到指定页面 [self presentViewControllerWithIdentifier:@"PaymentResultViewController"]; return YES; } return NO; } ``` #### 注意事项 - 确保支付链接的生成和调用符合微信支付的相关规范。 - 如果仍无法返回 APP,可以尝试更新微信 SDK 至最新版本,并参考官方文档进行调试。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值